验证摘要消息弹出两次

Validation summary message pops up twice

本文关键字:两次 消息 验证      更新时间:2023-09-26

我的页面中有验证控件,我正在使用验证摘要消息框来显示验证消息,下面显示的javascript函数对我有用,但问题是我在按钮的OnClientClick事件上使用此javascript函数,当我单击带有表单控件的按钮时,它按预期显示验证摘要消息框,但是当我关闭摘要框时,它会显示同样,我需要关闭消息框才能消失,这意味着我每次都必须单击两次。有人可以纠正我做错了什么吗?

这是我正在做的:-

 <asp:Button ID="SubmitButtonOne" runat="server" Text="Submit" OnClick="SubmitButtonOne_Click"
                         ValidationGroup="Cases" ClientIDMode="Static" OnClientClick="PleaseWaitShow()" />

这是javascript函数:

function PleaseWaitShow() {
                var isPageValid = true;
                // Do nothing if client validation is not active
                if (typeof (Page_Validators) != "undefined") {
                    if (typeof (Page_ClientValidate) == 'function') {
                        isPageValid = Page_ClientValidate();                       
                    } 
                } 
                if (isPageValid) {                  
                    document.getElementById('SubmitButtonOne').value = "Processing...";
                }            
                }

代码隐藏:

protected void SubmitButtonOne_Click(object sender, EventArgs e)
    {       
        try
        {              
          // some functionality                   
        }
        catch (Exception)
        {
           //show errror message
        }
    }
这是

预期行为。

一旦由于您在 PleaseWaitShow 方法中的显式调用而触发Page_ClientValidate,第二个是通过回发按钮单击进行的隐式调用。

因此,您会看到两次"验证摘要"消息框。

我没有规避此问题的解决方案,但如果发生某些事情,我会更新。

注意:我想指出的一件事是,由于提交按钮上有 ValidationGroup="Cases",您应该将其传递给您的Page_ClientValidate方法。

更新1:我能想到的一种方法是尝试这样的事情:

1: OnClientClick="return PleaseWaitShow();"

2: 返回 isPageValid from PleaseWaitShow():

function PleaseWaitShow() {
            var isPageValid = true;
            ....
            ....
            ....
            return isPageValid;
        }

不,这不是预期的行为。相反,这是验证JS代码 ASP.NET 错误。

ValidationSummaryOnSubmit 函数遍历所有摘要,对于每个摘要,循环遍历所有验证器。如果未指定 group,则附加每个验证器的消息,导致 2 (3, 4, 5?) 重复相同的消息。

我通过修复函数解决了这个问题(盯着第 53 行左右):

....
for (i = 0; i < Page_Validators.length; i++)
{
    var validator = Page_Validators[i];
    if (validator.validationGroup != null && summary.validationGroup != null)
    {
        if (validator.validationGroup != summary.validationGroup) continue;
    }
    if (!validator.isvalid && typeof (validator.errormessage) == "string")
    {
        s += pre + validator.errormessage + post;
    }
}
....

如果使用Page_ClientValidate方法,则应将原因验证设置为false。 CausesValidation="false"

因为Page_ClientValidate已经为您验证的按钮或控件执行此操作

请删除按钮的验证组。验证摘要的唯一用户喜欢:

<asp:TextBox ID="txtName" runat="server"></asp:TextBox>
    
<asp:RequiredFieldValidator ID="rqvName" runat="server" ControlToValidate="txtName" ErrorMessage="Please enter Name" ValidationGroup="SaveName"> </asp:RequiredFieldValidator>
    
<asp:Button ID="btnSave" runat="server" OnClientClick="DisableButton();" Text="Save this Name" ></asp:Button>
    
 <asp:ValidationSummary ID="valSaveName" runat="server" ValidationGroup="SaveName" ShowMessageBox="true" ShowSummary="false" />

谢谢