3

こんにちは私はカスタムフォームフィールドバリデーターに取り組んでいます。カスタムバリデーターは次のページに進むことを許可しないことで機能しているようですが、検証の概要は更新されず、アスタリスクとラベルも表示されません。目に見えるようにしました。同じフィールドにRequiredFieldValidatorのような他のバリデーターもあります。TextとIsValidと同様に、私のValidationGroupが設定されます。いくつかの回避策が示唆するように、私は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();
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

ポストバックコントロールが含まれてUpdatePanelいても含まれてValidationSummaryいなかった場合、部分的なポストバックはを更新しませんでしたValidationSummary。からポストバックコントロールを削除するUpdatePanelと、完全なポストバックが生成され、が更新されると思いますValidationSummary

あなたの中に他に何があるのか​​わかりませんがUpdatePanel多くの人がバリデーターがにあることに問題があると報告していUpdatePanelます

MSDNをチェックしてください。

UpdatePanelコントロール内でValidationSummaryコントロールを使用する場合は、バリデーターコントロールとそれに関連付けられているコントロールが同じパネルにあることを確認してください。部分ページの更新にUpdatePanelコントロールを使用する方法の詳細については、「部分ページレンダリングの概要」を参照してください。

このMSDNブログと同様に。

于 2010-11-29T22:02:03.877 に答える
0

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

すなわち。

<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 に答える