**[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";
}
}
}