当前位置: 首页 > news >正文

.net 验证控件和javaScript的冲突问题

在做东西的时候偶尔同时用到javascript的事件和.net的验证控件,具体细节如下:
<head runat="server">
    <title>Untitled Page</title>
    <script language="javascript" type="text/javascript">
    var IsDetailsModifed = true
    function SubmitDetailModified()
        ...{
            var retvalue;
            if (IsDetailsModifed == true)
            ...{
               retvalue = confirm("Do you want to save?);
            }
            else
            ...{
            alert("No need to save because of no field modified.");
            retvalue = false
            }
            return retvalue;
           
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:TextBox ID="txtTest" runat="server" Width="80px"></asp:TextBox>
    <asp:RegularExpressionValidator ID="RegularExpressionValidator4" runat="server" ControlToValidate="txtTest"
            ErrorMessage="Test must be Numeric"  ValidationExpression="^[0-9]{1,28}.?[0-9]{0,4}$">*</asp:RegularExpressionValidator>
        <asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="return SubmitDetailModified()" />
        <asp:ValidationSummary ID="ValidationSummary1" runat="server" ShowMessageBox="true" ShowSummary="false" />
    </div>
    </form>
</body>
上面的意图是,在点击按钮的时候弹出一个确认框,如果选择是则继续回传,否则阻止回传。在回传过程中如果某个字段的验证不通过,ValidationSummary 应该弹出消息框来阻止该回传.
但是事与愿违,当我单击按钮的时候,如果选择‘否’,阻止回传,正常。
但当我选择‘是’的时候,有两种情况:
1. 所有字段的验证都通过,然后点击‘是’,页面继续回传,一切正常。
2. 当有字段的验证不通过的时候,点击‘是’,验证消息不会弹出来,而且页面会继续回传,导致操作数据不正确。
为什么验证消息框会弹不出来呢?
后来,了解到.net验证控件的机制就是通过javascript来返回true或false来控制页面是否回传的。在上面的代码中,如果选择‘是’,直接在按钮的点击事件中返回true,页面当然要回传了。后来发现验证控件是通过给event.returnValue=true/false来实现阻止与否的。于是我改写了我的代码如下:
<head runat="server">
    <title>Untitled Page</title>
    <script language="javascript" type="text/javascript">
    var IsDetailsModifed = true
    function SubmitDetailModified()
        ...{
            var retvalue;
            if (IsDetailsModifed == true)
            ...{
               retvalue = confirm("Do you want to save ?");
            }
            else
            ...{
            alert("No need to save because of no field modified.");
            retvalue = false
            }
            if (retvalue == false)
            ...{
              event.returnValue = retvalue;
            }
           
        }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <asp:TextBox ID="txtTest" runat="server" Width="80px"></asp:TextBox>
    <asp:RegularExpressionValidator ID="RegularExpressionValidator4" runat="server" ControlToValidate="txtTest"
            ErrorMessage="Test must be Numeric"  ValidationExpression="^[0-9]{1,28}.?[0-9]{0,4}$">*</asp:RegularExpressionValidator>
        <asp:Button ID="Button1" runat="server" Text="Button" OnClientClick="SubmitDetailModified()" />
        <asp:ValidationSummary ID="ValidationSummary1" runat="server" ShowMessageBox="true" ShowSummary="false" />
    </div>
    </form>
</body>
如果我选择'是',我什么都不做,那就是默认的继续回传,但是如果有验证不通过的字段,验证控件通过event.returnValue=false来阻止页面继续回传,这样页面就会跳出验证不通过的对话框。如果我选择‘否’,我也用event.returnValue=false的方法来阻止页面回传。这样的话,就达到了最初的目的。

总结:
在使用.net的验证控件的时候,不要再事件中直接return true or false,而是通过event.returnValue=true/false来实现页面的回传阻止。

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/kucool/archive/2008/02/27/2124024.aspx

相关文章:

  • 关于gcc、glibc和binutils的关系
  • VGA_HS,VS,DOTCLOCK和分辨率之间的计算
  • 图灵近期新书精彩不断,让你应接不暇
  • 远古vod5.0的安装!
  • 烫发
  • 理解T-SQL:数据库表的创建、修改、删除
  • 关于战略 - 杰克韦尔奇的5张PPT
  • Autodesk 2011系列新产品DevDay将于12月在北京/上海举行
  • Producer Consumer
  • DMZ基础及应用
  • Oracle编程高手箴言:位图索引(Bitmap Index)的故事
  • 一生有你做朋友
  • Linux+Svn+apache2安装与配置
  • sql 中要求现实数据保留两位小数
  • Forefront Security For Exchange的反病毒测试
  • php的引用
  • 2017前端实习生面试总结
  • CODING 缺陷管理功能正式开始公测
  • JavaScript函数式编程(一)
  • Laravel 实践之路: 数据库迁移与数据填充
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Linux中的硬链接与软链接
  • maven工程打包jar以及java jar命令的classpath使用
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • OSS Web直传 (文件图片)
  • PAT A1120
  • PHP面试之三:MySQL数据库
  • Promise初体验
  • Python进阶细节
  • Rancher如何对接Ceph-RBD块存储
  • SpringBoot 实战 (三) | 配置文件详解
  • Spring思维导图,让Spring不再难懂(mvc篇)
  • 持续集成与持续部署宝典Part 2:创建持续集成流水线
  • 构建二叉树进行数值数组的去重及优化
  • 聚簇索引和非聚簇索引
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 前嗅ForeSpider采集配置界面介绍
  • 收藏好这篇,别再只说“数据劫持”了
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • #、%和$符号在OGNL表达式中经常出现
  • #pragam once 和 #ifndef 预编译头
  • #stm32驱动外设模块总结w5500模块
  • (2022 CVPR) Unbiased Teacher v2
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (Java数据结构)ArrayList
  • (附源码)springboot 个人网页的网站 毕业设计031623
  • (附源码)springboot 校园学生兼职系统 毕业设计 742122
  • (附源码)ssm失物招领系统 毕业设计 182317
  • (生成器)yield与(迭代器)generator
  • (四)鸿鹄云架构一服务注册中心
  • (推荐)叮当——中文语音对话机器人
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • (转)Oracle存储过程编写经验和优化措施