0

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

4 回答 4

2

这是预期的行为。

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

因此,您会看到两次 ValidationSummary 消息框。

我没有解决方案来规避这个问题,但如果出现问题,我会更新。

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

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

1:OnClientClick="return PleaseWaitShow();"

2:从 PleaseWaitShow() 返回 isPageValid:

function PleaseWaitShow() {
            var isPageValid = true;
            ....
            ....
            ....
            return isPageValid;
        }
于 2011-05-18T20:12:51.420 回答
0

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

ValidationSummaryOnSubmit函数循环遍历所有摘要,并且对于每个摘要,循环遍历所有验证器。如果未指定组,则附加每个验证者的消息,从而导致相同消息的 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;
    }
}

....
于 2014-04-02T15:04:03.653 回答
0

请移除 ValidationGroup 的 Button。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" />

谢谢

于 2020-07-14T05:16:53.980 回答
0

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

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

于 2017-03-20T08:53:53.240 回答