2010-11-29 17 views
3

こんにちは私はカスタムフォームフィールドバリデーターで作業しています。カスタムバリデーターは次のページに進むことを許可しないで作業していますが、バリデーションサマリーでも、アスタリスクと、私が見た目にしたラベルは表示されません。私は同じフィールドにRequiredFieldValidatorのような他のバリデータを持っています。 My ValidationGroupが設定され、TextおよびIsValidも設定されます。私はさらに、いくつかの回避策が示唆するように、javascriptにダミーのクライアント側検証メソッドを記述して設定しました。ここ カスタムバリデーターは起動しますが、ValidationSummaryは更新されません

背後にあるコードでカスタム検証メソッドカスタムバリデータと必要なフィールドここ1

<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> 

ここ

<asp:ValidationSummary ID="ValidatorSummary" runat="server" ValidationGroup="Step2" /> 

asp.netでの検証要約コードされています

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

+0

とボタンのデフォルトではCausesValidationはtrueです。 – genericuser

+0

私はあなたの質問に答えると信じていますので、質問を更新してUpdatePanelの関与を反映し、おそらく私の答えを反映させていただければ幸いです。 – bitxwise

答えて

6

あなたはCustomValidatorのあなたの宣言でControlToValidateが欠けているように見えます。あなたのCustomValidatorは、複数のコントロールを集約した場合

EDIT

、これを試してみてください。

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

あなたのポストバックコントロールがUpdatePanelにあったが、ValidationSummaryが、その後、部分ポストバックがValidationSummaryをリフレッシュしていないだろうされていなかった場合。 UpdatePanelからポストバックコントロールを削除すると、完全なポストバックが生成され、ValidationSummaryが更新されると思います。

UpdatePanelに他に何が含まれているかわかりませんが、many people report having issues with their validators being in UpdatePanel'sです。

チェックアウトMSDN

あなたはUpdatePanelコントロール内にValidationSummary コントロールを使用

、 が検証コントロール 、それは に関連付けられているコントロールが同じパネルであることを確認してください。詳細 部分ページ の更新プログラムのUpdatePanelコントロールの使用については、部分ページレンダリング の概要を参照してください。

と同様にMSDN blog

+1

私は、CustomValidatorにControlToValidateが必要ではないことを読んでいます。また、私のCustomValidatorは、複数のTextBoxコントロールからのデータを集約します。また、このコードは、現在、私の頭で本当に乱れている別のページで動作することにも注意してください。ああ、多分私は何かを逃した。 – David

+0

これは正しいです。私はあなたのCustomValidatorで検証するための複数のコントロールがあり、それを反映するために私の答えを更新したことを知らなかった。私は私のポストでコードをテストして、それは私のために働く。 – bitxwise

+0

私もそれをしました。バリデーションがうまくいくと、私はそれに踏み込むことができますValidationSummaryを更新しないことだけです。何が起こっているのかについての要約を更新しない場合、すべてを検証し、良いUXを提供しません。他のバリデーターは、バリデーション要約を更新します。私は回避策として更新パネルを設定できますが、要約やラベルが更新されない理由はありません。 ...多分それはポストバックと関係がありますか?私はコードが動作することを知っているので、私は狂っている、私はあなたのコードの動作を知っている。 errrr – David

0

検証されるすべてのコントロール(テキストボックス、チェックボックスなど)、すべてのRequiredValidator、CustomValidator、およびValidationSummaryが同じValidationGroupの値を持つことを確認してください。

ie。

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

もちろん、すべてのコントロールが同じパネルまたは親コントロール内にある場合にのみ有効です。

関連する問題