“在验证发生前无法调用 Page.IsValid”问题的由来
2012-09-10 10:16
651 查看
“在验证发生前无法调用 Page.IsValid”问题的由来
分类:ASP.Net 2005-04-04 17:55
1796人阅读 评论(0)
收藏
举报
在ASP.Net中,为了方便表单的验证,提供了验证控件来完成表单输入数据的验证。这些验证控件确实是功能强大,为写表单程序提供了极大的便利。但是,在不熟悉的情况下,经常碰到问题。其中,最常见的是遇到错误:在验证发生前无法调用 Page.IsValid。
这个问题我认为是很多朋友受了《深入接触ASP.Net》这本书。这本书在网友间流传甚广,也确实是一本不错的入门书,但是错误也有一些,比如这里。在该书论述到验证组件的时候,演示RequiredFieldValidator的用法时,有这样一个程序:
RequiredFieldValidator.aspx:
<% @ Page Language="C#" %>
<Script Language="C#" Runat="Server">
public void Page_Load(Object src,EventArgs e)
{
if(Page.IsPostBack)
{
if(Page.IsValid)
{
show.Text = "已经通过验证";
}
else
{
show.Text = "没有通过验证";
}
}
}
</script>
<html>
<head>
<title></title>
</head>
<body>
<form runat="server">
<table>
<tr><td colspan=2 align="center"><b>RequiredFieldValidator控件演示</b></td></tr>
<tr>
<td>姓名:</td>
<td><asp:TextBox id="name" runat="server" />*
<asp:RequiredFieldValidator id="rfv1" runat="server"
ControlToValidate="name"
Display="Static"
>(请填写姓名)
</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td>年龄:</td>
<td><asp:TextBox id="age" runat="server" />*
<asp:RequiredFieldValidator id="rfv2" runat="server"
ControlToValidate="age"
Display="Static"
>(请填写年龄)
</asp:RequiredFieldValidator>
</td>
</tr>
<tr>
<td><asp:Button Text="提交" runat="server" /></td>
<td></td>
</tr>
</table>
<hr>
<asp:Label id="show" ForeColor="red" runat="server" />
</form>
</body>
</html>
运行这个程序,就发生了错误:在验证发生前无法调用 Page.IsValid。应在控件的事件处理程序中使用 CausesValidation=True 或在调用 Page.Validate 后对它进行查询。
这个问题的发生来自作者的一个小疏忽。其实,在点击提交按钮时,程序先进行了验证,验证通过后才会和服务器交互(这里是重新加载,调用了Page_Load)。
问题的根源是对于asp:Button控件,点击的时候是默认先进行表单的验证的。有的朋友希望在表单里有两个按钮,其中有的按钮执行的操作和表单本身无关,不需要验证,但也默认必须进行验证,对程序设计上造成不少烦恼。
其实,这个问题很好解决。Button控件有一个属性 CauseValidation,默认是true。只需要将此属性设为false,就不会引发表单验证了。需要验证的时候,可以手工调用验证代码:验证控件.Validate()或者Page.Validate()进行验证。
相关文章推荐
- “在验证发生前无法调用 Page.IsValid”问题的由来(轉)
- “在验证发生前无法调用 Page.IsValid”问题的由来
- 验证发生前无法调用 Page.IsValid。应在 CausesValidation=True 且已启动回发的控
- PHP调用JS验证弹出框无法显示的问题
- ThinkPHP框架调用page类分页无法关联表的情况,解决ThinkPHP框架多表分页、TP联表分页、多表分页问题
- C#调用Java端Web服务(CXF)时发生Integer参数类型无法传递的问题
- 客户端程序无法直接调用CMP之间one-many关系的cmrfield的问题
- Delphi调用C#web服务参数无法接收的问题
- 【Django】框架ajax无法调用后台方法问题
- “调用的目标发生了异常”问题
- jquery validate 无法验证hidden隐藏域问题
- ajax调用controller后页面无法跳转的问题
- Ubuntu 16.04中 Qt 5.6 中无法调用fcitx输入中文的问题
- PHP图片验证码无法显示问题
- 图片验证码有时会出现无法显示的问题
- SqlServer 2005 升级至SP2过程中出现"身份验证"无法通过的问题
- 关于UrlHttpConnection.setRequestProperty()的调用顺序问题的验证
- validationGroup和Page_ClientValidate()配合使用解决前端click事件返回为false时验证失效问题
- labview中,用相对路径动态调用的子VI,在生成EXE文件后无法调用问题的解决
- Autohotkey在total commander中的应用,比如TC在TRAY时无法按ALT+TAB调用的问题 ...