[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
——————————————————–
<%@ page language="c#" codebehind="webform2.aspx.cs" autoeventwireup="false" inherits="utf8test.webform2" %>
<!doctype html public "-//w3c//dtd html 4.0 transitional//en" >
<html>
<head>
<title>webform2</title>
<meta content="microsoft visual studio .net 7.1" name="generator">
<meta content="c#" name="code_language">
<meta content="javascript" name="vs_defaultclientscript">
<meta content="http://schemas.microsoft.com/intellisense/ie5"; name="vs_targetschema">
<script language="javascript" event="onkeydown" for="textbox1">
if(event.keycode==13)<!– 注意大小写–>
{
__dopostback(button1,);
return false;<!–很重要,不然会选择button1进行提交 –>
}
</script>
<script language="javascript" event="onkeydown" for="textbox2">
if(event.keycode==13)
{
__dopostback(button2,);
return false;<!–很重要,不然会选择button1进行提交 –>
}
</script>
<script language="javascript">
function keypress()
{
if(event.keycode==13)
{
__dopostback(button3,);
event.keycode=0; <!–很重要,不然会选择button1进行提交 –>
return false;<!–很重要,不然会选择button1进行提交 –>
}
}
</script>
</head>
<body ms_positioning="gridlayout">
<form id="form1" method="post" runat="server">
<input type="hidden" name="__eventtarget"> <input type="hidden" name="__eventargument">
<script language="javascript" type="text/javascript">
<!–
function __dopostback(eventtarget, eventargument) {
var theform;
if (window.navigator.appname.tolowercase().indexof("microsoft") > -1) {
theform = document.form1;
}
else {
theform = document.forms["form1"];
}
theform.__eventtarget.value = eventtarget.split("$").join(":");
theform.__eventargument.value = eventargument;
theform.submit();
}
// –>
</script>
<asp:button id="button1" style="z-index: 101; left: 192px; position: absolute; top: 88px" runat="server"
text="button1"></asp:button><asp:textbox id="textbox1" style="z-index: 102; left: 16px; position: absolute; top: 88px" runat="server"></asp:textbox>
<asp:button id="button2" style="z-index: 103; left: 192px; position: absolute; top: 120px" runat="server"
text="button2"></asp:button>
<asp:textbox id="textbox2" style="z-index: 104; left: 16px; position: absolute; top: 120px" runat="server"></asp:textbox>
<asp:textbox id="textbox3" style="z-index: 105; left: 16px; position: absolute; top: 152px" runat="server"></asp:textbox>
<asp:button id="button3" style="z-index: 106; left: 192px; position: absolute; top: 152px" runat="server"
text="button3"></asp:button>
<asp:label id="label1" style="z-index: 107; left: 24px; position: absolute; top: 56px" runat="server"></asp:label></form>
</body>
</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
{
/// <summary>
/// webform2 的摘要说明。
/// </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("onkeypress","keypress()");//注意大小写
}
#region web 窗体设计器生成的代码
override protected void oninit(eventargs e)
{
//
// codegen: 该调用是 asp.net web 窗体设计器所必需的。
//
initializecomponent();
base.oninit(e);
}
/// <summary>
/// 设计器支持所需的方法 – 不要使用代码编辑器修改
/// 此方法的内容。
/// </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";
}
}
}
