文章类型: .NET
关键词: 验证,无法调用,Page,IsValid
内容摘要:

在验证发生前无法调用”Page.IsValid”问题的由来

2015/7/29 11:27:47    来源:apple    阅读:

ASP.Net中,为了方便表单的验证,提供了验证控件来完成表单输入数据的验证。这些验证控件确实是功能强大,为写表单程序提供了极大的便利。但是,在不熟悉的情况下,经常碰到问题。其中,最常见的是遇到错误:在验证发生前无法调用 Page.IsValid

 

这个问题我认为是很多朋友受了《深入接触ASP.Net》这本书。这本书在网友间流传甚广,也确实是一本不错的入门书,但是错误也有一些,比如这里。在该书论述到验证组件的时候,演示RequiredFieldValidator的用法时,有这样一个程序:

RequiredFieldValidator.aspx:

<% @ Page Language="C#" %>
<Script Language="C#" Runat="Server">
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Page.IsPostBack)
        {
            if (Page.IsValid)
            {
                this.lblMessage.Text = "已经通过验证";
            }
            else
            {
                this.lblMessage.Text = "没有通过验证";
            }
        }
    }
</script>
<html>
<head>
<title></title>
</head>
<body>
<form runat="server">
<table>
<tr><td colspan=2><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()进行验证。

↑ 上一篇文章:C#中List与Dictionary泛型集合复习总结训练 关键词:C#,ArrayList,Hashtable,List,.. 发布日期:2015/7/29 10:45:06
↓ 下一篇文章:从客户端中检测到有潜在危险的 Request.Form 值 关键词:客户端,检测,有潜在危险,Request,Form 发布日期:2015/7/29 11:28:39
相关文章:
软件开发中手机验证码接收不到的问题调查研究 关键词:软件,开发,手机,验证码,接收不到,问题,调查研究,验证码使用 发布日期:2017-12-21 11:20
用户输入时提供一个C#语言编写的正则表达式验证类 关键词:C#语言,C#编程,正则表达式,输入验证,用户输入,验证类,自定义 发布日期:2015-07-14 16:17
验证(XHTML 1.0 Transitional): 属性“align”被视为已过时 关键词:验证,XHTML,1.0,Transitional,属性,align,被视为已过时 发布日期:2015-07-29 11:53
相关目录:.NET软件开发ANDROID
我要评论
正在加载评论信息......