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

  • 相关阅读:
    Sample XPS Documents Download
    触发器中的inserted表和deleted表
    Using freewheel.labs.autodesk.com to auto generate preview images of DWF files on your web site
    解除SQL对组件"Ad Hoc Distributed Queries"的"STATEMENT'OpenRowset OpenDatasource"的访问
    读写xps
    XPS文件,在Windows XP下的打开查看阅读和打印方法。
    Learning to Reference Inserted and Deleted Tables
    Get value from updated, inserted and deleted
    Reinstall Microsoft Helper Viewer
    如何查找文件的IFilter
  • 原文地址:https://www.cnblogs.com/guanjie20/p/1555938.html
Copyright © 2011-2022 走看看