我的页面上有两个验证组,分别叫做"login“和"register”。每个组都有自己的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>当我单击这两个按钮控件中的任何一个时,ValidationSummary控件都会显示页面上所有验证控件的验证消息。这就好像它们都是同一个验证组的一部分。
我尝试在按钮中添加CausesValidation="true“和"false”,但似乎没有效果。
发布于 2014-07-02 23:11:35
在你的CodeBehind上,你可以这样做...
Page.Validate("register");
if (Page.IsValid)
{
//Keep calm and carry on
}
else
{
foreach (BaseValidator invalidField in validators)
{
//Do something with the invalid fields
}
}这样,您只需验证您指定的组。
合乎道理?
发布于 2014-07-02 23:16:38
你的问题是Display="None"。
在您的divRegisterBox div中,您的验证器都有Display="None",但是divLoginBox div中的验证器没有。
Display="None"不会以内联方式显示消息。单击登录按钮时,您看到的不是显示两个摘要,而是以两种不同的方式显示相同的错误消息。
https://stackoverflow.com/questions/24534219
复制相似问题