2

Country (ドロップダウン)、Address (テキスト ボックス)、City (テキスト ボックス)、State (ドロップダウン)、Zip (テキスト ボックス) のフォーム フィールドを持つユーザー コントロールを作成する必要があります。ドロップダウンリストから「米国」が選択された場合にのみ、都市、州、および郵便番号を検証したいと考えています。「検証」とは、長さをチェックすることを意味します-それだけです。

カスタムバリデーターを使用してみましたが、機能するはずのコードが何もしていないため、何かが欠けています。例:

<asp:CustomValidator ErrorMessage="City, State, and Zip are required fields" 
Display="None" ID="LocationValidator" 
runat="server" ClientValidationFunction="validateLocation" 
onservervalidate="LocationValidator_ServerValidate">
</asp:CustomValidator>

次に、ここに私の検証コードがあります

クライアント側の検証:

function validateLocation(sender, args) {
    var country = jQuery("#main_2_MailingAddress_Country").val();
    var city = jQuery("#main_2_MailingAddress_City").val();
    if (city.Length() > 0)
    {
        args.IsValid = true;
    }
    else
    {
        args.IsValid = country != "United States";
    }
}

サーバー側の検証:

protected void LocationValidator_ServerValidate(object source, ServerValidateEventArgs args)
    {
        if (City.Text.Length > 0)
        {
            args.IsValid = true;
        }
        else //nothing was entered for "City"
        {
            args.IsValid = Country.SelectedValue != "United States";
        }
        //similar functions for State and Zip go here
    }

サーバー側の検証のみを行い、フォームに何も入力しない場合 (アドレス フィールド以外に他の必須フィールドがあります)、それらの他のフィールド用に持っている RequiredFieldValidators が起動します。ただし、City、State、Zip (国に US を選択) 以外のすべてのフィールドに入力すると、それらが空であることをキャッチせずにフォームが送信されます。

上記の例のように、カスタム バリデータにクライアント側とサーバー側の両方の検証を指定すると、バリデータは起動されず、フォームが送信されます。

これは長くて紛らわしい投稿かもしれませんが、どこが間違っているのかについて何か考えはありますか?

4

1 に答える 1

3

RequiredFieldValidators は例に含まれていないため、何が問題だったのかはわかりませんが (検証するコントロールを指定しましたか?)、うまくいけば役立つ例を次に示します。

protected void LocationValidator_ServerValidate(object source, ServerValidateEventArgs args)
        {
            args.IsValid = IsCountryValid();
        }

        private bool IsCountryValid()
        {
            if (Country.SelectedValue == "US")
            {
                if (String.IsNullOrEmpty(City.Text))
                    return false;

                if (String.IsNullOrEmpty(State.SelectedValue))
                    return false;

                if (String.IsNullOrEmpty(Zip.Text))
                    return false;
            }
            else if (String.IsNullOrEmpty(Country.SelectedValue))
            {
                return false;
            }

            return true;
        }

メッセージを表示できるように、表示を「動的」に変更しました。

<asp:CustomValidator ID="LocationValidator" runat="server" 
            ErrorMessage="City, State, and Zip are required fields" Display="Dynamic" 
            OnServerValidate="LocationValidator_ServerValidate"></asp:CustomValidator>

ドロップダウンに空の文字列の代わりに値がある場合は、それらの検証を明らかに変更しますが、これが役立つことを願っています!

于 2011-02-01T18:04:23.083 に答える