Page_ClientValidate 正在验证多次。

IT技术 asp.net javascript validation
2021-03-21 12:03:53

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

请帮忙。这是代码

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" />
6个回答

问题在于函数 Page_ClientValidate 接受一个输入参数,如果您不指定输入,则validationsummary 每个组名触发一次。

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

你应该改变

var isPageValid = Page_ClientValidate();

var isPageValid = Page_ClientValidate('');

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

var isPageValid = Page_ClientValidate('ContactGroup');

首先,您应该丢失ValidationGroup="ContactGroup"from 按钮,因为其中包含验证组将首先调用页面上的验证,然后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;

} 

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

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

您可以在不显示消息的情况下进行验证,使用以下代码段,然后使用 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;
        }