代码改变世界

让服务器端控件同时执行客户端脚本和服务器端代码

  Anders Cui  阅读(2106)  评论(3编辑  收藏  举报
让服务器控件的事件同时执行客户端脚本和服务器端代码
    问题:
        有时候我们需要一个服务器控件同时执行客户端脚本(如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>

     后台代码(仅事件处理函数):
     
     protected void SubmitServerHandler(object sender, System.EventArgs e)
     {
        Response.Write(
"hello!" + txtName.Text + "<br>");
     }

     分析:
     这里客户端和服务器端的事件处理函数分别是submitClientHandler()和SubmitServerHandler()。submitClientHandler()在页面加载完成时(onload事件中)注册,这时才能获得对服务器控件的引用。SubmitServerHandler()在Button控件的OnClick属性中注册,这里注意该方法须声明为protected以上级别,这样才能在页面中访问。完成这两步注册后,页面会先后执行客户端和服务器端时间处理函数。

     那么,怎么才能控制对服务器端代码的调用?看
submitClientHandler()函数,如果返回false,那么就不执行SubmitServerHandler(),如果返回true,就会继续调用SubmitServerHandler()。

编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示