让服务器控件的事件同时执行客户端脚本和服务器端代码
问题:
有时候我们需要一个服务器控件同时执行客户端脚本(如javascript)和服务器端代码。比如在进行表单验证的时候,希望先在客户端进行验证,只有通过验证才执行后台代码。这样可以避免不必要的postback,提供更好的用户体验。
解决方案:
在不同的地方分别注册客户端和服务器端事件处理函数。示例如下:
Web页面代码(仅HTML部分):
后台代码(仅事件处理函数):
分析:
这里客户端和服务器端的事件处理函数分别是submitClientHandler()和 SubmitServerHandler()。submitClientHandler() 在页面加载完成时(onload事件中)注册,这时才能获得对服务器控件的引用。 SubmitServerHandler()在Button控件的OnClick属性中注册,这里注意该方法须声明为protected 以上 级别,这样才能在页面中访问。完成这两步注册后,页面会先后执行客户端和服务器端时间处理函数。
那么,怎么才能控制对服务器端代码的调用?看submitClientHandler()函数,如果返回false,那么就不执行 SubmitServerHandler(),如果返回true,就会继续调用 SubmitServerHandler()。
有时候我们需要一个服务器控件同时执行客户端脚本(如javascript)和服务器端代码。比如在进行表单验证的时候,希望先在客户端进行验证,只有通过验证才执行后台代码。这样可以避免不必要的postback,提供更好的用户体验。
解决方案:
在不同的地方分别注册客户端和服务器端事件处理函数。示例如下:
Web页面代码(仅HTML部分):
<
HTML
>
< HEAD >
< title > DoubleSidesHandler </ title >
< script language ="javascript" >
function submitClientHandler()
{
var len = document.form1.txtName.value.length;
if (len < 3 )
{
window.alert( " required at least 3 letters! " );
return false ;
}
window.alert(document.form1.txtName.value);
return true ;
}
function initHandler()
{
var elem = document.form1.btnSubmit;
if (elem)
{
elem.onclick = submitClientHandler;
}
}
</ script >
</ HEAD >
< body onload ="initHandler()" >
< form id ="form1" method ="post" runat ="server" >
Enter your name:
< asp:TextBox ID ="txtName" Width ="200px" Runat ="server" ></ asp:TextBox >
< br >
< asp:Button ID ="btnSubmit" Text ="Submit" Runat ="server" OnClick ="SubmitServerHandler" ></ asp:Button >
</ form >
</ body >
</ HTML >
< HEAD >
< title > DoubleSidesHandler </ title >
< script language ="javascript" >
function submitClientHandler()
{
var len = document.form1.txtName.value.length;
if (len < 3 )
{
window.alert( " required at least 3 letters! " );
return false ;
}
window.alert(document.form1.txtName.value);
return true ;
}
function initHandler()
{
var elem = document.form1.btnSubmit;
if (elem)
{
elem.onclick = submitClientHandler;
}
}
</ script >
</ HEAD >
< body onload ="initHandler()" >
< form id ="form1" method ="post" runat ="server" >
Enter your name:
< asp:TextBox ID ="txtName" Width ="200px" Runat ="server" ></ asp:TextBox >
< br >
< asp:Button ID ="btnSubmit" Text ="Submit" Runat ="server" OnClick ="SubmitServerHandler" ></ asp:Button >
</ form >
</ body >
</ HTML >
后台代码(仅事件处理函数):
protected
void
SubmitServerHandler(
object
sender, System.EventArgs e)
{
Response.Write( " hello! " + txtName.Text + " <br> " );
}
{
Response.Write( " hello! " + txtName.Text + " <br> " );
}
分析:
这里客户端和服务器端的事件处理函数分别是submitClientHandler()和 SubmitServerHandler()。submitClientHandler() 在页面加载完成时(onload事件中)注册,这时才能获得对服务器控件的引用。 SubmitServerHandler()在Button控件的OnClick属性中注册,这里注意该方法须声明为protected 以上 级别,这样才能在页面中访问。完成这两步注册后,页面会先后执行客户端和服务器端时间处理函数。
那么,怎么才能控制对服务器端代码的调用?看submitClientHandler()函数,如果返回false,那么就不执行 SubmitServerHandler(),如果返回true,就会继续调用 SubmitServerHandler()。
本文转自一个程序员的自省博客园博客,原文链接:http://www.cnblogs.com/anderslly/archive/2006/09/30/doublesidesevent.html,如需转载请自行联系原作者。