C# 自定义验证器启动,但不更新ValidationSummary

C# 自定义验证器启动,但不更新ValidationSummary,c#,asp.net,validation,customvalidator,validationsummary,C#,Asp.net,Validation,Customvalidator,Validationsummary,您好,我正在使用一个自定义表单字段验证程序,它似乎不允许自定义验证程序继续到下一页,但它不会更新验证摘要,也不会显示星号和我设置的可见标签。我在同一字段上还有其他验证器,如RequiredFieldValidator。My ValidationGroup已设置,文本和IsValid也已设置。我甚至按照一些变通方法的建议,用javascript编写并设置了一个虚拟客户端验证方法 以下是asp.net中的验证摘要代码 <asp:ValidationSummary ID="ValidatorSu

您好,我正在使用一个自定义表单字段验证程序,它似乎不允许自定义验证程序继续到下一页,但它不会更新验证摘要,也不会显示星号和我设置的可见标签。我在同一字段上还有其他验证器,如RequiredFieldValidator。My ValidationGroup已设置,文本和IsValid也已设置。我甚至按照一些变通方法的建议,用javascript编写并设置了一个虚拟客户端验证方法

以下是asp.net中的验证摘要代码

<asp:ValidationSummary ID="ValidatorSummary" runat="server" ValidationGroup="Step2" />
请告知,谢谢

编辑: 已回答-如bitxwise所述。验证摘要也应该放在更新面板中。谢谢

像这样:

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

您的
CustomValidator
声明中似乎缺少
ControlToValidate

编辑

如果CustomValidator聚合了多个控件,请尝试以下操作:

ASPX

请注意,调用回发的控件的验证组具有
CausesValidation=“true”
,并且与验证程序具有相同的
ValidationGroup

编辑2

如果回发控件位于
UpdatePanel
中,但
ValidationSummary
不在其中,则部分回发将不会刷新
ValidationSummary
。一旦您从
UpdatePanel
中删除回发控件,我想它将生成一个完整的回发,这将刷新您的
ValidationSummary

我不知道您的
更新面板中还有什么内容,但是

退房

当您使用ValidationSummary时 UpdatePanel控件中的控件, 确保验证程序控件 以及与之关联的控件 在同一面板中。更多 有关使用 部分页面的UpdatePanel控件 更新,请参见部分页面呈现 概述

除此之外。

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

*

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

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

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


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

我了解到CustomValidator不需要ControlToValidate。此外,我的CustomValidator从多个TextBox控件聚合数据。还要注意的是,这段代码在另一个页面上工作,这真的让我头疼。哈,也许我错过了什么。没错。我不知道您在CustomValidator中有多个控件要验证,并更新了我的答案以反映这一点。我已经在我的帖子中测试了代码,它对我很有效。我也做了。验证有效,我可以介入。只是它没有更新ValidationSummary。它验证了一切,只是如果它不更新关于出错原因的摘要,就不能提供良好的用户体验。另一个验证器会更新验证摘要。我可以设置一个更新面板作为解决方案,但没有理由不更新摘要或标签。。。也许跟回邮有关?这让我发疯,因为我知道代码是有效的,我知道你的代码是有效的。errr请尝试将代码简化为更简单的部分。将验证代码放在它自己的页面上,并确保它只与文本框、验证程序和回发控件一起工作。然后开始在页面上添加其他元素,看看是什么破坏了它。你看到我在代码下面写的注释了吗?我修复了它,很明显,传给我的代码在更新面板中有一个按钮控件,我看到它没有理由应该在更新面板中,并且它没有在代码后面或其他任何地方被使用或调用,所以我删除了它。瞧,它起作用了!现在又出现了另一个问题,为什么在更新面板中有一个按钮会破坏一切。很可能您的按钮标签中缺少ValidationSummary。(你还没有发布的代码)。button的CausesValidation默认为true。我相信我已经回答了你的问题,因此如果你能更新你的问题以正确反映UpdatePanel的参与,我将不胜感激,也许可以相信我的回答……非常感谢,我相应地更新了原始帖子。
<asp:UpdatePanel ID="UpdatePanelValidationSummaryHome" ChildrenAsTriggers="false" UpdateMode="Conditional"
runat="server">
<ContentTemplate>
    <asp:ValidationSummary ID="AddressHomeValidationSummary" runat="server" ValidationGroup="AddressHomeValidationGroup"
        CssClass="errors" /> 
</ContentTemplate>
UpdatePanelValidationSummaryHome.Update();
<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" />
protected void AddressVerification_ServerValidate(object source, ServerValidateEventArgs args) {
    args.IsValid = !string.IsNullOrEmpty(txtMyTextBox.Text) && !txtMyTextBox.Text.Contains(' ');
}
<asp:CustomValidator ID="CustomValidator6" runat="server" ErrorMessage="The field is required"
ValidationGroup="myValGroup">*</asp:CustomValidator>
<Triggers>                        
<asp:PostBackTrigger ControlID="ButtonSubmit" />
</Triggers>