您好我正在使用自定义表单字段验证程序,似乎自定义验证程序正在工作,不允许它继续到下一页,但它不更新验证摘要也不显示星号和我看到的标签。我还在同一个字段上有其他验证器,如RequiredFieldValidator。设置了我的ValidationGroup,Text和IsValid也是如此。我甚至在javascript中编写并设置了一个虚拟客户端验证方法,正如一些解决方法所暗示的那样。
这是asp.net中的验证摘要代码
<asp:ValidationSummary ID="ValidatorSummary" runat="server" ValidationGroup="Step2" />
这是自定义验证器和必填字段
<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>
这是
背后代码中的自定义验证方法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;
}
请告知,谢谢。
编辑: 回答 - 正如bitxwise提到的那样。验证摘要也应放在更新面板中。谢谢!
像这样:
<asp:UpdatePanel ID="UpdatePanelValidationSummaryHome" ChildrenAsTriggers="false" UpdateMode="Conditional"
runat="server">
<ContentTemplate>
<asp:ValidationSummary ID="AddressHomeValidationSummary" runat="server" ValidationGroup="AddressHomeValidationGroup"
CssClass="errors" />
</ContentTemplate>
然后调用更新:
UpdatePanelValidationSummaryHome.Update();
答案 0 :(得分:6)
您在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" />
CS
protected void AddressVerification_ServerValidate(object source, ServerValidateEventArgs args) {
args.IsValid = !string.IsNullOrEmpty(txtMyTextBox.Text) && !txtMyTextBox.Text.Contains(' ');
}
请注意,调用回发的控件的验证组为CausesValidation="true"
,并且与验证程序具有相同的ValidationGroup
。
编辑2
如果你的回发控件在UpdatePanel
但ValidationSummary
没有,那么部分回发就不会刷新ValidationSummary
。从UpdatePanel
删除回发控件后,我想它会生成完整的回发,这会刷新您的ValidationSummary
。
我不知道你的UpdatePanel
还有其他内容,many people report having issues with their validators being in UpdatePanel
's。
查看MSDN,
使用ValidationSummary时 控制UpdatePanel控件, 确保验证器控件 和它相关的控制 在同一个小组中。更多 关于使用的信息 部分页面的UpdatePanel控件 更新,请参阅部分页面呈现 概述
以及此MSDN blog。
答案 1 :(得分:0)
确保正在验证的每个控件(文本框,复选框等),每个RequiredValidator,CustomValidator和ValidationSummary都具有相同的 ValidationGroup 值。
即
<asp:CustomValidator ID="CustomValidator6" runat="server" ErrorMessage="The field is required"
ValidationGroup="myValGroup">*</asp:CustomValidator>
当然,只有当所有控件都在同一个面板或父控件中时,这才有效。
答案 2 :(得分:0)
在我的情况下,由于提交按钮位于单独的更新面板中,因此未显示验证摘要。
<Triggers>
<asp:PostBackTrigger ControlID="ButtonSubmit" />
</Triggers>
添加以上代码后,摘要就会出现。