验证摘要消息会弹出两次

时间:2011-05-18 17:54:22

标签: javascript asp.net validationsummary

我的页面中有验证控件,我使用验证摘要消息框来显示验证消息,下面显示的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
        }

    }

4 个答案:

答案 0 :(得分:2)

这是预期的行为。

由于您在PleaseWaitShow方法中显式调用而触发了Page_ClientValidate,其次是PostBack按钮单击所做的隐式调用。

所以你看到两次ValidationSummary消息框。

我没有办法解决这个问题,但如果发生了什么事情会更新。

注意:我想指出的一件事是,由于您在提交按钮上有 ValidationGroup =“Cases”,因此您应该将其传递给Page_ClientValidate方法。< / p>

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

1:OnClientClick="return PleaseWaitShow();"

2:从PleaseWaitShow()返回isPageValid:

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

答案 1 :(得分:0)

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

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;
    }
}

....

答案 2 :(得分:0)

如果使用Page_ClientValidate方法,则应将causevalidation设置为false。 CausesValidation="false"

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

答案 3 :(得分:0)

请删除Button的ValidationGroup。 ValidationSummary的唯一用户 喜欢:

<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" />

谢谢

相关问题