【问题标题】:Validation summary message pops up twice验证摘要消息弹出两次
【发布时间】:2011-08-28 06:46:21
【问题描述】:

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

    }

【问题讨论】:

    标签: javascript asp.net validationsummary


    【解决方案1】:

    这是预期的行为。

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

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

    我没有解决方案来规避这个问题,但如果有什么事情发生,我会更新。

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

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

    1:OnClientClick="return PleaseWaitShow();"

    2:从 PleaseWaitShow() 返回 isPageValid:

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

    【讨论】:

      【解决方案2】:

      不,这不是预期的行为。相反,这是 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;
          }
      }
      
      ....
      

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

          请移除 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" />
          

          谢谢

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-09-25
            • 2013-07-19
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-06-08
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多