[ASP.NET]如何在客户端调用服务端代码

**[ASP.NET][原创]如何在客户端调用服务端代码
** 比如我们在页面上有3个TextBox,3个Button,每个Button分别执行不同的动作。我们现在想在TextBox中检测是否按下了回车键,如果是则执行不同的Button调用。即TextBox1中按下回车就执行Button1的动作,......

测试中,我发现要调用服务器端代码必须调用__doPostBack函数,但该函数除了在放置有DataGrid控件的页面中会由系统产生外,其他的页面中并不存在。(可以通过查看源文件看到该代码)。这样我们必须手工在aspx中添加__doPostBack函数,和函数一起添加的还有两个隐藏元素,__EVENTTARGET和__EVENTARGUMENT,这是__doPostBack所必须的,实际上,.NET是把产生事件的元素名称以及参数传到,__EVENTTARGET和__EVENTARGUMENT。然后再调用Form的submit函数提交回服务器的,服务器端根据传回来的参数就知道是哪个控件被触发了,从而调用它的相应后端代码,然后再将新页面回送回客户端的。
以下是我的测试页面,其中使用了两种方法来检测TextBox中的按键
WebForm2.aspx
--------------------------------------------------------

1@ Page language="c#" Codebehind="WebForm2.aspx.cs" AutoEventWireup="false" Inherits="UTF8Test.WebForm2" 
 1<html>
 2<head>
 3<title>WebForm2</title>
 4<meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR"/>
 5<meta content="C#" name="CODE_LANGUAGE"/>
 6<meta content=" _javascript_ " name="vs_defaultClientScript"/>
 7<meta ;="" content="  http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema"/>
 8<script event=" _onkey_ down" for="TextBox1" language=" _javascript_ ">
 9
10  
11if(event.keyCode==13)<!-- 注意大小写-->   
12{   
13__doPostBack('Button1','');   
14return false;<!--很重要,不然会选择Button1进行提交 -->   
15}   
16  
17</script>
18<script event=" _onkey_ down" for="TextBox2" language=" _javascript_ ">
19
20  
21if(event.keyCode==13)   
22{   
23__doPostBack('Button2','');   
24return false;<!--很重要,不然会选择Button1进行提交 -->   
25}   
26  
27</script>
28<script language=" _javascript_ ">   
29function keypress()   
30{   
31if(event.keyCode==13)   
32{   
33  
34__doPostBack('Button3','');   
35event.keyCode=0; <!--很重要,不然会选择Button1进行提交 -->   
36return false;<!--很重要,不然会选择Button1进行提交 -->   
37}   
38}   
39</script>
40</head>
41<body ms_positioning="GridLayout">
42<form id="Form1" method="post" runat="server">
43<input name="__EVENTTARGET" type="hidden"/> <input name="__EVENTARGUMENT" type="hidden"/>
44<script language=" _javascript_ " type="text/ _javascript_ ">   
45<!--   
46function __doPostBack(eventTarget, eventArgument) {   
47var theform;   
48if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {   
49theform = document.Form1;   
50}   
51else {   
52theform = document.forms["Form1"];   
53}   
54theform.__EVENTTARGET. _value_ = eventTarget.split("$").join(":");   
55theform.__EVENTARGUMENT. _value_ = eventArgument;   
56theform.submit();   
57}   
58// -->   
59</script>
60<asp:button id="Button1" runat="server" style="Z-INDEX: 101; LEFT: 192px; POSITION: absolute; TOP: 88px" text="Button1"></asp:button><asp:textbox id="TextBox1" runat="server" style="Z-INDEX: 102; LEFT: 16px; POSITION: absolute; TOP: 88px"></asp:textbox>
61<asp:button id="Button2" runat="server" style="Z-INDEX: 103; LEFT: 192px; POSITION: absolute; TOP: 120px" text="Button2"></asp:button>
62<asp:textbox id="TextBox2" runat="server" style="Z-INDEX: 104; LEFT: 16px; POSITION: absolute; TOP: 120px"></asp:textbox>
63<asp:textbox id="TextBox3" runat="server" style="Z-INDEX: 105; LEFT: 16px; POSITION: absolute; TOP: 152px"></asp:textbox>
64<asp:button id="Button3" runat="server" style="Z-INDEX: 106; LEFT: 192px; POSITION: absolute; TOP: 152px" text="Button3"></asp:button>
65<asp:label id="Label1" runat="server" style="Z-INDEX: 107; LEFT: 24px; POSITION: absolute; TOP: 56px"></asp:label></form>
66</body>
67</html>

WebForm2.aspx.cs
----------------------------------------------------------------------
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace UTF8Test
{
///

1<summary>   
2/// WebForm2 的摘要说明。   
3/// </summary>

public class WebForm2 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.Button Button2;
protected System.Web.UI.WebControls.TextBox TextBox2;
protected System.Web.UI.WebControls.TextBox TextBox3;
protected System.Web.UI.WebControls.Button Button3;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.Button Button1;

private void Page_Load(object sender, System.EventArgs e)
{
// 在此处放置用户代码以初始化页面
TextBox3.Attributes.Add(" onkey press","keypress()");//注意大小写
}

#region Web 窗体设计器生成的代码
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
//
InitializeComponent();
base.OnInit(e);
}

///

1<summary>   
2/// 设计器支持所需的方法 - 不要使用代码编辑器修改   
3/// 此方法的内容。   
4/// </summary>

private void InitializeComponent()
{
this.Button1.Click += new System.EventHandler(this.Button1_Click);
this.Button2.Click += new System.EventHandler(this.Button2_Click);
this.Button3.Click += new System.EventHandler(this.Button3_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Button1_Click(object sender, System.EventArgs e)
{
Label1.Text = "1";
}

private void Button2_Click(object sender, System.EventArgs e)
{
Label1.Text = "2";
}

private void Button3_Click(object sender, System.EventArgs e)
{
Label1.Text = "3";
}
}
}

Published At
Categories with Web编程
Tagged with
comments powered by Disqus