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 を選択) 以外のすべてのフィールドに入力すると、それらが空であることをキャッチせずにフォームが送信されます。
上記の例のように、カスタム バリデータにクライアント側とサーバー側の両方の検証を指定すると、バリデータは起動されず、フォームが送信されます。
これは長くて紛らわしい投稿かもしれませんが、どこが間違っているのかについて何か考えはありますか?