Dav*_*vid 3 c# asp.net validation customvalidator validationsummary
嗨我正在使用自定义表单字段验证器,似乎自定义验证器正在工作,不允许它继续到下一页,但它不更新验证摘要也不显示星号和标签,我已经变得可见了.我还在同一个字段上有其他验证器,如RequiredFieldValidator.设置了我的ValidationGroup,Text和IsValid也是如此.我甚至在javascript中编写并设置了一个虚拟客户端验证方法,正如一些解决方法所暗示的那样.
这是asp.net中的验证摘要代码
<asp:ValidationSummary ID="ValidatorSummary" runat="server" ValidationGroup="Step2" />
Run Code Online (Sandbox Code Playgroud)
这是自定义验证器和必填字段
<asp:CustomValidator ID="AddressVerification" runat="server" ErrorMessage="Please enter a valid address." Display="Dynamic" ValidationGroup="Step2" OnServerValidate="AddressVerification_ServerValidate" ClientValidationFunction="CustomValidatorDummy" Text="*" Enabled="true" EnableClientScript="true"></asp:CustomValidator>
<asp:RequiredFieldValidator ID="RFValidatorHomeAddress" runat="server" ErrorMessage="Please enter home address." Text="*" Display="Dynamic" ValidationGroup="Step2" ControlToValidate="txtHomeAddress"></asp:RequiredFieldValidator>
Run Code Online (Sandbox Code Playgroud)
这是后面代码中的自定义验证方法
protected void AddressVerification_ServerValidate(object sender, ServerValidateEventArgs e)
{
//lets just say it doesn't validate and sets the IsValid to false
lblUspsValidatorResHomeCity.Visible = true;
lblUspsValidatorResHomeState.Visible = true;
lblUspsValidatorResHomeZip.Visible = true;
e.IsValid = false;
}
Run Code Online (Sandbox Code Playgroud)
请指教,谢谢.
编辑:回答 - 按照bitxwise提到.验证摘要也应放在更新面板中.谢谢!
像这样:
<asp:UpdatePanel ID="UpdatePanelValidationSummaryHome" ChildrenAsTriggers="false" UpdateMode="Conditional"
runat="server">
<ContentTemplate>
<asp:ValidationSummary ID="AddressHomeValidationSummary" runat="server" ValidationGroup="AddressHomeValidationGroup"
CssClass="errors" />
</ContentTemplate>
Run Code Online (Sandbox Code Playgroud)
然后调用更新:
UpdatePanelValidationSummaryHome.Update();
Run Code Online (Sandbox Code Playgroud)
你ControlToValidate的声明中似乎缺少了CustomValidator.
编辑
如果您的CustomValidator聚合多个控件,请尝试以下操作:
ASPX
<asp:TextBox ID="txtMyTextBox" runat="server" />
<asp:CustomValidator ID="AddressVerification" runat="server"
Display="Dynamic"
ErrorMessage="Please enter a valid address."
OnServerValidate="AddressVerification_ServerValidate"
Text="*"
ValidationGroup="Step2" />
<asp:RequiredFieldValidator ID="rfvAddress" runat="server"
ControlToValidate="txtMyTextBox"
Display="Dynamic"
ErrorMessage="Please enter an address"
Text="*"
ValidationGroup="Step2" />
...
<asp:ValidationSummary ID="ValidatorSummary" runat="server"
ValidationGroup="Step2" />
...
<asp:Button ID="btnCheckAddresses" runat="server"
CausesValidation="true"
Text="Check Addresses"
ValidationGroup="Step2" />
Run Code Online (Sandbox Code Playgroud)
CS
protected void AddressVerification_ServerValidate(object source, ServerValidateEventArgs args) {
args.IsValid = !string.IsNullOrEmpty(txtMyTextBox.Text) && !txtMyTextBox.Text.Contains(' ');
}
Run Code Online (Sandbox Code Playgroud)
请注意,调用回发的控件的验证组具有CausesValidation="true"并且ValidationGroup与验证器相同.
编辑2
如果您的回发控件在UpdatePanel但ValidationSummary不是,那么部分回发将不会刷新ValidationSummary.一旦你从中删除了回发控件UpdatePanel,我想它会生成一个完整的回发,这将刷新你的ValidationSummary.
我不知道是你的还有什么UpdatePanel,但很多人用自己的验证报告是有问题UpdatePanel的.
查看MSDN,
在UpdatePanel控件中使用ValidationSummary控件时,请确保验证器控件及其关联的控件位于同一面板中.有关将UpdatePanel控件用于部分页面更新的详细信息,请参阅部分页面呈现概述.
以及这个MSDN博客.
| 归档时间: |
|
| 查看次数: |
18442 次 |
| 最近记录: |