zoukankan      html  css  js  c++  java
  • .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

  • 相关阅读:
    数据库中计算值的更新方法
    多语言系统的数据库设计
    深蓝词库转换2.0发布——支持仓颉、注音、五笔、郑码、二笔等
    数据库SQL开发的一些要点
    最近工作有点累
    IPv6地址争夺中国再落后 申请量仅全球1.8%
    Nantpad 1.0 has been released!
    又丢了一辆自行车
    搬到新家了.
    我和我的好友的计算机之路.希望能给你的计算机生活点一盞明灯
  • 原文地址:https://www.cnblogs.com/guanjie20/p/1555938.html
Copyright © 2011-2022 走看看