【问题标题】:Multiple ValidationSummary and RequiredFieldValidators多个 ValidationSummary 和 RequiredFieldValidators
【发布时间】:2014-07-02 14:47:34
【问题描述】:

我的页面上有两个验证组,分别称为“登录”和“注册”。每个组都有自己的 ValidationSummary 控件,并且还有许多RequiredFieldValidators。我遇到的问题是表单正在验证两个组,而不仅仅是一个。

这里是代码(为了简化,我省略了很多 HTML):

<div id="divRegisterBox">

  <asp:ValidationSummary ID="ValidationSummary1" runat="server" ValidationGroup="register" />

  <asp:TextBox ID="tbRegisterEmail" runat="server" CssClass="form-control" placeholder="Required" ValidationGroup="register" />
  <asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="tbRegisterEmail" runat="server" Text="" ErrorMessage="Please enter your email address." ValidationGroup="register" />
  <asp:RegularExpressionValidator ID="RegularExpressionValidator1" CssClass="errorMsg" ControlToValidate="tbRegisterEmail" runat="server" Text="" ErrorMessage="Please enter a valid email address." ValidationExpression="^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$" ValidationGroup="register" />

  <asp:TextBox ID="tbRegisterPassword" name="result-password" runat="server" CssClass="form-control" placeholder="Required" TextMode="Password" ValidationGroup="register" />
  <asp:RequiredFieldValidator ID="RequiredFieldValidator2" CssClass="errorMsg" ControlToValidate="tbRegisterPassword" runat="server" Text="" ErrorMessage="Please enter your password." ValidationGroup="register" />

  <asp:Button ID="btnMobileRegister" runat="server" Text="Register" OnClick="btnMobileRegister_Click" ValidationGroup="register" />

</div>

<div id="divLoginBox">

  <asp:ValidationSummary ID="ValidationSummary2" runat="server" ValidationGroup="login" />

  <asp:TextBox CssClass="form-control" name="result-email" ID="tbResultEmail" placeholder="Required" runat="server" ValidationGroup="login"></asp:TextBox>
  <asp:RequiredFieldValidator ID="RequiredFieldValidator3" ControlToValidate="tbResultEmail" runat="server" Text="" ErrorMessage="Please enter your email address." ValidationGroup="login" CssClass="errorMsg" />
  <asp:RegularExpressionValidator ID="RegularExpressionValidator2" CssClass="errorMsg" ControlToValidate="tbResultEmail" runat="server" Text="" ErrorMessage="Please enter a valid email address." ValidationExpression="^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$" ValidationGroup="login" />

  <asp:TextBox CssClass="form-control" name="result-password" ID="tbResultPassword" placeholder="Required" TextMode="Password" runat="server" ValidationGroup="login"></asp:TextBox>
  <asp:RequiredFieldValidator ID="RequiredFieldValidator4" CssClass="errorMsg" ControlToValidate="tbResultPassword" runat="server" Text="" ErrorMessage="Please enter your password." ValidationGroup="login" />

  <asp:Button ID="btnLoginMobile" runat="server" CssClass="btn btn-primary btn-block" Text="Login" OnClientClick="return MobileLoginSubmit();" ValidationGroup="login" OnClick="btnLoginMobile_Click" />

</div>

当我单击任一 Button 控件时,ValidationSummary 控件会显示页面上所有验证控件的验证消息。就好像它们都是同一个验证组的一部分。

我尝试将 CausesValidation="true" 和 "false" 添加到按钮,但似乎没有效果。

【问题讨论】:

    标签: asp.net


    【解决方案1】:

    在您的 CodeBehind 上,您可以执行类似...

    Page.Validate("register");
    if (Page.IsValid)
      {
          //Keep calm and carry on
      }
    
    else
       {
           foreach (BaseValidator invalidField in validators)
                {  
                  //Do something with the invalid fields 
                }
        }
    

    这样,您只需验证您指定的组。

    有道理吗?

    【讨论】:

    • 回发没有被触发,所以没有使用 CodeBehind。 RequiredFieldValidators 似乎在客户端工作。
    • 请注意,您可以将每个区域包装在 UpdatePanel 元素中以将它们彼此隔离吗?
    【解决方案2】:

    您的问题是Display="None"

    在您的divRegisterBox div 中,您的验证器都有Display="None",但您在divLoginBox div 中的验证器没有。

    Display="None" 不会显示内联消息。当您单击登录按钮时,您看到的不是两个摘要都显示,而是相同的错误消息以两种不同的方式显示。

    【讨论】:

    • 我删除了 display="none" 但没有任何区别。
    • 你需要将它添加到没有它的验证器中,而不是从那些有它的验证器中删除它。
    • 好的,我尝试将它添加到所有验证控件,但结果仍然相同。
    • 好的,我照原样复制了您的代码,将 Display="None" 添加到验证器中,它按预期工作。您是否 100% 确定显示所有验证消息?如...如果没有填写任何字段并单击一个按钮,您会在一个摘要中看到总共四条消息?
    猜你喜欢
    • 2011-02-11
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多