3

嗨,我正在开发自定义表单字段验证器,似乎自定义验证器正在工作,不允许它继续到下一页,但它不会更新验证摘要,也不会显示星号和我的标签已经看得见了。我在同一个字段上还有其他验证器,例如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;
}

请指教,谢谢。

编辑:已回答 - 正如按位提到的那样。验证摘要也应该放在更新面板中。谢谢!

像这样:

<asp:UpdatePanel ID="UpdatePanelValidationSummaryHome" ChildrenAsTriggers="false" UpdateMode="Conditional"
runat="server">
<ContentTemplate>
    <asp:ValidationSummary ID="AddressHomeValidationSummary" runat="server" ValidationGroup="AddressHomeValidationGroup"
        CssClass="errors" /> 
</ContentTemplate>

然后调用更新:

UpdatePanelValidationSummaryHome.Update();
4

3 回答 3

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

如果您的回发控件在UpdatePanelValidationSummary不在,则部分回发不会刷新ValidationSummary. UpdatePanel一旦您从ValidationSummary.

我不知道您的 . 文件中还有什么UpdatePanel,但许多人报告说他们的验证器在UpdatePanel's中存在问题。

查看MSDN

在 UpdatePanel 控件中使用 ValidationSummary 控件时,请确保验证器控件和与之关联的控件位于同一面板中。有关使用 UpdatePanel 控件进行部分页面更新的详细信息,请参阅部分页面呈现概述。

以及这个MSDN 博客

于 2010-11-29T22:02:03.877 回答
0

确保正在验证的每个控件(文本框、复选框等)、每个 RequiredValidator、CustomValidator 和 ValidationSummary 都具有相同的ValidationGroup值。

IE。

<asp:CustomValidator ID="CustomValidator6" runat="server" ErrorMessage="The field is required"
ValidationGroup="myValGroup">*</asp:CustomValidator>

当然,这只有在所有控件都在同一个面板或父控件内时才有效。

于 2013-10-30T01:31:24.813 回答
0

在我的情况下,验证摘要没有显示,因为提交按钮位于单独的更新面板中。

<Triggers>                        
<asp:PostBackTrigger ControlID="ButtonSubmit" />
</Triggers>

一旦我添加了上面的代码,就会出现摘要。

于 2019-08-08T16:13:51.200 回答