繁体   English   中英

Page_ClientValidate多次验证。

[英]Page_ClientValidate is validating multiple times.

问题是,验证摘要消息(警报)显示两次。 我无法弄清楚原因。

请帮忙。 这是代码

function validate() //javascript function
{
    if (typeof(Page_ClientValidate) == 'function') 
    {
        var isPageValid = Page_ClientValidate();
        if(isPageValid)
        {
        }
    }
}

<asp:Button ID="btn1" runat="server" OnClientClick="validate()" Text="button"
                    ValidationGroup="ContactGroup" />

<asp:ValidationSummary ID="ValidationSummary1" runat="server" DisplayMode="List" 
                    ShowMessageBox="true" ShowSummary="false" ValidationGroup="ContactGroup" />

问题是函数Page_ClientValidate接受一个输入参数,如果你没有指定输入,那么validationsummary每个groupname触发一次。

在您的情况下,该函数触发两次:一次用于groupname =“ContactGroup”,另一次用于groupname =“”

你应该改变

var isPageValid = Page_ClientValidate();

var isPageValid = Page_ClientValidate('');

如果您不想指定ValidationGroup,或者如果要指定组名,则需要像这样调用Page_ClientValidate:

var isPageValid = Page_ClientValidate('ContactGroup');

嘿那里。首先,您应该从按钮中松开ValidationGroup =“ContactGroup”,因为其中的验证组将首先调用页面上的验证,然后是包含validate函数的OnClientClick事件,该函数将再次调用页面验证。

然后,您应该将验证组“ContactGroup”传递给Page_ClientValidate()函数,以便它知道要验证哪些控件,因为只需调用Page_ClientValidate()将验证所有控件,而不管其验证组如何(并且它可能会多次显示验证消息,取决于您拥有的验证组数量)。

总之这样做:

function validate() //javascript function
{
    if (typeof(Page_ClientValidate) == 'function') 
    {
        var isPageValid = Page_ClientValidate('ContactGroup');
        if(isPageValid)
        {
          //your custom code
        }
    }
}    

<asp:textbox id="txtMyBox" runat="server"/>
<asp:requiredFieldValidator Id="rfv1" runat="server" ControlToValidate="txtMyBox"
ValidationGroup="ContactGroup" ErrorMessage="Bad!"/>

<asp:Button ID="btn1" runat="server" OnClientClick="validate()" Text="button"/>

<asp:ValidationSummary ID="ValidationSummary1" runat="server" DisplayMode="List" 
                    ShowMessageBox="true" ShowSummary="false" ValidationGroup="ContactGroup" />

只需从函数返回false并更改OnClientClick,如下所示:

<asp:Button ID="btn1" runat="server" OnClientClick="return validate();" Text="button" 
                        ValidationGroup="ContactGroup" /> 

        function validate() //javascript function   
        {   
            if (typeof(Page_ClientValidate) == 'function')    
            {   
                var isPageValid = Page_ClientValidate();   
                if(isPageValid)   
                {   
                }   
            }   
        return false;

} 

您可以在没有显示消息的情况下进行验证,使用以下代码段,然后使用isPageValid变量:

 if (Page_ValidationSummaries && Page_ValidationSummaries[0] && Page_ValidationSummaries[0].showmessagebox) {
            var showMessagesOption = Page_ValidationSummaries[0].showmessagebox;
            Page_ValidationSummaries[0].showmessagebox = "False";
            isPageValid = Page_ClientValidate();
            Page_ValidationSummaries[0].showmessagebox = showMessagesOption;
        }

除非您希望在回发尝试之外进行验证,否则无需手动调用Page_ClientValidate函数。

将按钮CausesValidation设置为true 那将进行验证。

删除按钮的单击事件,这会强制我认为第二次验证。

我知道这是一个老帖子,但这里的解决方案可能更灵活。 与其他用户建议类似,此解决方案接受asp.net验证控件默认传递的验证组。 这样您就不需要在Button控件上添加OnClientClick="validate()"

//Make sure the Page_ClientValidate function exists
if (typeof (Page_ClientValidate) == "function") {
    //Stash the old implementation in a temp variable
    Page_ClientValidateOld = Page_ClientValidate;

    //Create a new implementation and store it
    //in Page_ClientValidate. Callers will now get
    //this implementation.
    Page_ClientValidate = function (validationGroup) {
        var isValid;

        //Call the old implementation first…
        isValid = Page_ClientValidateOld(validationGroup);

        //and then call our extension
        if (!isValid) {
            // Do something
        }

        return isValid;
    }
}

如果您想了解更多有关此方法的信息,我建议您查看此博客文章: http//hyperthink.net/blog/interception-patterns-in-javascript/

删除按钮的onclientclick事件没有必要

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM