asp.net开发中,通常需要做一些客户端验证。当我们默认在一个页面中加个button控件时,这个Button被asp.net输出为一个Submit按钮。
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
查看前台的HTML源码是:
<input type="submit" name="Button1" value="Button" id="Button1" />
Button 有一个OnClientClick属性,这个属性可以在提交的同时做一些提示,但是不能阻挡数据的回传。而我们需要的是在前台做一些验证,假如数据符合要 求,才答应提交到数据库。我们假如想要在Button控件提交前做一些验证的事情,就首先要Submit改成Button。对于这个改动,在 asp.net上是很简单的。只需要加上UseSubmitBehavior="false" 属性,这样submit就会变成button控件。
<asp:Button ID="Button1" UseSubmitBehavior="false" runat="server" Text="Button" onclick="Button1_Click" />
输出HTML源码:
<input type="button" name="Button1" value="Button" onclick="javascript:__doPostBack('Button1','')" id="Button1" />
这时候,asp.net提交不再是通过submit了,而是要首先经过一个_doPostBack的JS方法后,再提交,我们来看一下_doPostBack方法:
在_doPostBack方法内,通过theForm.submit()来使数据提交到服务器。
这样很轻易看出,假如我们想要在数据提交到服务器端前做些验证的事情,就要首先在_doPostBack之前做些处理,并使数据验证只有达到了要求 后,才可以调用_doPostBack使数据回传。我们首先给Button加一个 OnClientClick属性,给OnClientClick属性指定一个JS方法Test():
<asp:Button ID="Button1" OnClientClick="test();" UseSubmitBehavior="false" runat="server" Text="Button" onclick="Button1_Click" />
JS代码如下:
再看一下经过服务端解析后输出的控件HTML代码:
<input type="button" name="Button1" value="Button" onclick="test();__doPostBack('Button1','')" id="Button1" />
我们看到test方法执行是在_doPostBack之前,当我们点按钮时,页面会弹出 test 警告,但是仍然会继续提交数据到服务器。假如不想提交数据到服务器,就要想办法阻止_doPostBack执行。到了这一步,解决办法就很明白了,我们只 需要把onclick变成 test();return;_dopostBack('Button1','')就可以了。假如需要test()方法的判定结果才决定是否提交数据到服 务器,我们需要这样改动 if(!test())return;_dopostBack('Button1','')。
打开aspx源代码,把OnClientClick改成OnClientClick= "if(!test())return; "我们再看一下HTML的输出:
<input type="button" name="Button1" value="Button" onclick="if(!test())return;__doPostBack('Button1','')" id="Button1" />
运行测试,满足要求。
这只是一种解决办法,还有就是重写Button,自己控制onclick的输出或者利用验证控件。