在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。应在 CausesValidation=True 且已启动回发的控件的更多相关文章

  1. Error-ASP.NET:由于未能找到 id 为“FileUpload1$gvFiles$ctl02$lnkBtnRemoveFile”的控件或在回发后将同一 ID 分配给另一个控件,导致发生错误。如果未分配 ID,请显式设置引发回发事件的控件的 ID 属性以避免此错误。

    ylbtech-Error-ASP.NET:由于未能找到 id 为“FileUpload1$gvFiles$ctl02$lnkBtnRemoveFile”的控件或在回发后将同一 ID 分配给另一个控件 ...

  2. 转:运行page页面时的事件执行顺序及页面的回发与否深度了解

    using System; using System.Data; using System.Configuration; using System.Web; using System.Web.Secu ...

  3. 初识 Asp.Net数据验证控件

    在我们建立一个Asp.Net Web应用程序的时候我一般都会注意我们工具如图

  4. 【C#】让工具栏ToolStrip能触发焦点控件的Leave、Validating、DataError等事件以验证数据

    ----------------更新:2014-04-21--------------- 蒙doggo兄指教,得知有更好的方法可以代替蹩脚的0尺寸Button法,即调用窗体的验证方法Form.Vali ...

  5. ASP.NET验证控件一

    为了更好地创建交互式Web应用程序.加强应用程序安全性,程序开发人员应该对用户输入的内容进行验证. ASP.NET提供了一系列输入验证控件,使用这些控件用户可以很方便地实现输入验证. ASP.NET还 ...

  6. 工具栏ToolStrip能触发焦点控件的Leave、Validating、DataError等事件以验证数据 z

    public class ToolStripEx : ToolStrip { protected override void OnClick(EventArgs e) { base.OnClick(e ...

  7. 如何:对 Windows 窗体控件进行线程安全调用

    http://msdn.microsoft.com/zh-cn/library/ms171728(VS.90).aspx http://msdn.microsoft.com/zh-cn/library ...

  8. Js表单验证控件(使用方便,无需编码)-01使用说明

    演示地址:http://weishakeji.net/Utility/Verify/Index.htm    开源地址:https://github.com/weishakeji/Verify_Js ...

  9. 验证性控件的使用--验证两个文本框至少有一个不为空CustomValidator

    转:http://blog.163.com/zhaowencong_2010/blog/static/20402815220122103155643/ 有时候我们在注册一个帐号时要求我们留下电话号码, ...

随机推荐

  1. 实现EventHandler的监测

    的监测", "category":"", "tags":"", "publish":&qu ...

  2. Spring Boot 2 实践记录之 条件装配

    实验项目是想要使用多种数据库访问方式,比如 JPA 和 MyBatis. 项目的 Service 层业务逻辑相同,只是具体实现代码不同,自然是一组接口,两组实现类的架构比较合理. 不过这种模式却有一个 ...

  3. 在循环中使用鼠标悬停时表示当前悬停选中,传入this关键字即可

    在前端循环中使用鼠标悬停事件 <div class="message-widget contact-widget"> <!-- Message --> {% ...

  4. winform 批量控件取值赋值

    以前写winform 最多写几个文本框,最近需要入录一个人员信息,那好几十个字段,一下子干蒙了,这要是一个个取值赋值都写到明天了,于是就自己写了个方法,也不是什么高大上的,就是很简单很普通很low的方 ...

  5. 使用FFMpeg命令行录屏推rtmp流

    最近在做局域网内屏幕分享方面的东西,要把录制一台设备的屏幕然后实时推送给内网的一个或多个用户. 做了很多实验,效果还没有达到要求,这里分享一下推rtmp流的实验. 实验使用到的各种工具:FFmpeg. ...

  6. ABP框架踩坑记录

    ABP框架踩坑记录 ASP.NET Boilerplate是一个专用于现代Web应用程序的通用应用程序框架. 它使用了你已经熟悉的工具,并根据它们实现最佳实践. 文章目录 使用MySQL 配置User ...

  7. Day 27 类的进阶-反射

    11. __new__ 和 __metaclass__ 阅读以下代码: 1 2 3 4 5 6 class Foo(object): def __init__(self): pass obj = Fo ...

  8. Python廖雪峰学习笔记——单元测试

    定义:对一个模块.一个类.一个函数进行进行正确性检验的测试性工作.当我们对函数或者模块等进行修改时,单元测试就显得尤为重要. 单元测试 = 测试用例(用来测试的数据)+测试模块

  9. Python3.5 学习十一

    关于消息队列 PY 中应用程序里对于消息队列的使用: 1 threading QUEUE 2 进程QUEUE 父进程.父进程下的子进程间进行交互 RabbitMQ 消息队列 :用于应用程序之间,可跨平 ...

  10. 刚才在windows下发现拖拽不了文件了

    百度了下  摁了两下esc就可以了.以下是百度得到的答案 按几下Esc目的是:没按前ESC键[接触不好]或[键不灵]或其他原因导致ESC处于[按下]状态,这样鼠标就会拖不了文件,点击菜单也会马上消失, ...