场景:
一个注册表单,其间有.Net自带的验证控件,但有一些验证必须得借助于另外的一些js,如验证是否复选了注册协议(这里为了说明,只举这样一个简单的例子)。
这样的话,会涉及到二次验证,第一次可能是.Net验证控件的验证,第二次会认证用户有没有复选注册协议,如何让这二者合作无间呢?
这里不得不提到.Net的Page_ClientValidate()函数,该函数返回当前Page页中的表单有没有通过Validate的验证.
页面呈现
![图片可能已被缩小,点击查看原图](http://www.webjx.com/files/allimg/081211/2317280.jpg)
TextBox留空,点击Button,会进行一次验证,当在TextBox中输入文本时,再点击提交,验证通过,引发OnClick事件,但用户是否复选了注册协议此处还未做判断。
![图片可能已被缩小,点击查看原图](http://www.webjx.com/files/allimg/081211/2317281.jpg)
此时需要我们手写验证函数了
修改后的代码
预览页面
![图片可能已被缩小,点击查看原图](http://www.webjx.com/files/allimg/081211/2317282.jpg)
![图片可能已被缩小,点击查看原图](http://www.webjx.com/files/allimg/081211/2317283.jpg)
![图片可能已被缩小,点击查看原图](http://www.webjx.com/files/allimg/081211/2317284.jpg)
到这里好像已经结束了,但查看html源代码会发现:
Button1除了有return test()外还有WebForm_DoPostBackWithOptions这样一段,很明显WebForm_DoPostBackWithOptions是不会被执行的,去掉这段也很简单,
将Button1的CausesValidation设为false即可。
当然,你也可以完全不用验证控件来实现。
一个注册表单,其间有.Net自带的验证控件,但有一些验证必须得借助于另外的一些js,如验证是否复选了注册协议(这里为了说明,只举这样一个简单的例子)。
这样的话,会涉及到二次验证,第一次可能是.Net验证控件的验证,第二次会认证用户有没有复选注册协议,如何让这二者合作无间呢?
这里不得不提到.Net的Page_ClientValidate()函数,该函数返回当前Page页中的表单有没有通过Validate的验证.
新建一个Page页面,简单的放一些控件
- <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
- <asp:Button ID="Button1" runat="server" Text="Button"
- ValidationGroup="submit" CausesValidation="True"
- onclick="Button1_Click" />
- <input type="checkbox" id="checkbox" />我已阅读注册协议
- <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server"
- ControlToValidate="TextBox1" Display="Dynamic" ErrorMessage="不能为空"
- ValidationGroup="submit"></asp:RequiredFieldValidator>
页面呈现
![图片可能已被缩小,点击查看原图](http://www.webjx.com/files/allimg/081211/2317280.jpg)
TextBox留空,点击Button,会进行一次验证,当在TextBox中输入文本时,再点击提交,验证通过,引发OnClick事件,但用户是否复选了注册协议此处还未做判断。
![图片可能已被缩小,点击查看原图](http://www.webjx.com/files/allimg/081211/2317281.jpg)
此时需要我们手写验证函数了
- <script type="text/javascript">
- function test() {
- var isCheck = document.getElementById('checkbox').checked;
- if (isCheck) {
- //Page_ClientValidate('submit'),这里有不同的ValidGroup,所以Page_ClientValidate传递是指定的GroupName
- if (Page_ClientValidate('submit')) {
- alert('验证成功');
- return true;
- }
- }
- else {
- alert('您必须同意注册协议');
- return false;
- }
- return false;
- }
- </script>
修改后的代码
- <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
- <asp:Button ID="Button1" runat="server" Text="Button" ValidationGroup="submit" CausesValidation="True"
- OnClientClick="return test();" OnClick="Button1_Click" />
- <input type="checkbox" id="checkbox" />我已阅读注册协议
- <asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" ControlToValidate="TextBox1"
- Display="Dynamic" ErrorMessage="不能为空" ValidationGroup="submit"></asp:RequiredFieldValidator>
预览页面
![图片可能已被缩小,点击查看原图](http://www.webjx.com/files/allimg/081211/2317282.jpg)
![图片可能已被缩小,点击查看原图](http://www.webjx.com/files/allimg/081211/2317283.jpg)
![图片可能已被缩小,点击查看原图](http://www.webjx.com/files/allimg/081211/2317284.jpg)
到这里好像已经结束了,但查看html源代码会发现:
- <input type="submit" name="Button1" value="Button"
- onclick="return test();WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("Button1", "", true, "submit", "", false, false))" id="Button1" />
Button1除了有return test()外还有WebForm_DoPostBackWithOptions这样一段,很明显WebForm_DoPostBackWithOptions是不会被执行的,去掉这段也很简单,
将Button1的CausesValidation设为false即可。
当然,你也可以完全不用验证控件来实现。