2010-11-29 60 views
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; 
} 

请指教,谢谢。编号: 回答 - 如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

很可能您在按钮标记中缺少ValidationSummary。 (你没有发布的代码)。 – genericuser 2010-11-29 22:26:52

+0

和CausesValidation对于按钮默认为true。 – genericuser 2010-11-29 22:32:15

回答

6

你似乎在你的CustomValidator宣告失踪ControlToValidate

编辑

如果您的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

EDIT 2

如果您的回传控制是在UpdatePanelValidationSummary没有,那么局部回传也不会刷新ValidationSummary。一旦您从UpdatePanel中删除了回发控件,我想它会生成一个完整的回传,这会刷新您的ValidationSummary

我不知道你的UpdatePanel还有什么,但是many people report having issues with their validators being in UpdatePanel's

退房MSDN

当您使用UpdatePanel控件内部的ValidationSummary 控制, 确保验证控制 并且它与 相关的控制都在同一个小组。欲了解更多 有关使用 UpdatePanel控件更新部分页面 的信息,请参阅部分页面呈现 概述。

以及这个MSDN blog

0

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

即。

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

当然,如果所有的控件都在同一面板或父控件内,这才会起作用。