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

转载于:https://www.cnblogs.com/shenbing/p/5276030.html

[转]验证发生前无法调用 Page.IsValid。应在 CausesValidation=True 且已启动回发的控件...相关推荐

  1. [转]ASP.NET验证发生前无法调用 Page.IsValid。应在 CausesValidation=True 且已启动回发的控件...

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

  2. C#窗口调用百度云实现人脸识别。(注意代码中添加的控件以及部分传值给函数,亲测百分百可用。)

    调用的dll库文件 代码模块 首先是连接开启电脑摄像头,拍照后保存照片到本地. 然后是调用百度云: 1.获取百度云access_token与百度云连接: 2.建立控制太应用:人脸识别: 3.人脸库的人 ...

  3. html bs架构调用客户端打印机用客户端及客户端局域网打印机打印,使用ScriptX.cab控件...

    <html> <head> <style type="text/css" media="print"> DIV.d1 { D ...

  4. Page.IsValid 属性

    Page.IsValid 是在 Page_Load 发生之后才会处理 所以在 Page_Load 中调用它是无用的 应该在 OnClick , OnSelectedIndexChanged 这类的服务 ...

  5. 风影ASP.NET基础教学 4 验证控件

    前言 无论什么应用软件系统,它最本质的功能和用途就是处理数据.这样,数据的安全性就成为了系统设计里面非常重要的话题,提交一些不安全的数据(如SQL注入.数据类型或者数据范围不合适等)常常会导致系统计算 ...

  6. Asp.Net中验证控件简单分析

    为了实现验证,.net提供了一个javascript脚本,当我们生成一个asp.net页面时,通过查看页面源代码的方式,会发现都调用了下面一个javascript文件: <script src= ...

  7. 第三章 用检验控件执行表单的验证

    第三章 用检验控件执行表单的检验 主要内容: l 使用客户端检验 l 必填域控件:RequiredFieldValidator l 检验表达式控件:RegularExpressionValidator ...

  8. Java调用ocx控件以及dll

    2019独角兽企业重金招聘Python工程师标准>>> http://lvqingboy-163-com.iteye.com/blog/769358 通过Java调用OCX控件有几种 ...

  9. 用户控件(.ascx)调用网页(.aspx)的方法

    首先在aspx文件中有这样一个方法等待调用: public void SetLabel(string str) {     this.Label1.Text = str; ; } 然后在用户控件asc ...

最新文章

  1. python跟易语言那个写辅助_易语言写练练看辅助
  2. windows7与虚拟机fedora 9.0文件共享
  3. linux下安装ftp服务器
  4. Oracle 数据库-服务器端字符集查看方法
  5. english email writing techniques demo
  6. jQuery 插件-(初体验一)
  7. Repeater使用小结
  8. 机器学习——常用算法的总结
  9. 板框导入_板框结构导入有问题?这几个问题最常见,附解决方法!
  10. android ImageView 之 android:scaleTye=
  11. 深度学习中防止过拟合的方法
  12. 又是AI+IoT!谷歌试图收购物联网公司Xively
  13. 正则表达式中符号的含义(可能不是很全)
  14. pkcs1与pkcs8格式RSA私钥互相转换
  15. shader变体是什么_shader 里面的分支
  16. 操作系统的基本类型、工作流程及其优缺点
  17. centos7安装erlang
  18. 计算机的格式刷,“excle怎样取消格式刷“电脑上格式刷怎么用excel2000
  19. 手撸JDK之ReentrantLock锁那点事
  20. Python爬虫爬下IT之家图片

热门文章

  1. Windows实例搭建FTP站点
  2. 布局器 拖拽拖拽表单设计器 厉害了
  3. 2.1 数据库之序列,索引和同义词
  4. [NOI Online #3 提高组] 水壶
  5. c#创建文件夹时无法访问路径,路径拒绝访问
  6. Linux再学--shell基础5正则表达式和文本搜索
  7. docker解决2375安全性的问题
  8. STM32H7学习之路继续(stm32H7系列3) GPIO
  9. 论文笔记——Deep Residual Learning for Image Recognition(论文及相关代码)
  10. postion absolution relative fixed static 使用