zoukankan      html  css  js  c++  java
  • [转]ASP.NET验证发生前无法调用 Page.IsValid。应在 CausesValidation=True 且已启动回发的控件

    在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()进行验证。

  • 相关阅读:
    scala之伴生对象的继承
    scala之伴生对象说明
    “Failed to install the following Android SDK packages as some licences have not been accepted” 错误
    PATH 环境变量重复问题解决
    Ubuntu 18.04 配置java环境
    JDBC的基本使用2
    DCL的基本语法(授权)
    ZJNU 1374
    ZJNU 2184
    ZJNU 1334
  • 原文地址:https://www.cnblogs.com/shenbing/p/5276030.html
Copyright © 2011-2022 走看看