3

作成する必要があるシナリオがいくつかあります。

1) ドロップダウンに特定の値がある場合は、特定のテキスト ボックスを必須フィールドにします。

2) 特定のテキストボックスにデータがある場合、別のテキストボックスを必須にする (住所フィールドが入力されている場合は、都市、州、および郵便番号が必要)

正しく見える CustomValidators のペアから呼び出すコードがあります。

<asp:CustomValidator ID="cvtxt_pat_id" runat="server" 
     OnServerValidate="txt_pat_idValidate" ControlToValidate="txt_pat_id"
     ErrorMessage="Text must be 8 or more characters." Display="Dynamic"/>

protected void txt_pat_idValidate(object sender, ServerValidateEventArgs e)
{
    if (ddl_addl_pat_info.SelectedValue.ToString() == "2")
    {
        e.IsValid = (e.Value.Length > 1);
    }
    else
    {
        e.IsValid = true;
    }
}

<asp:CustomValidator ID="cvtxt_pat_id" runat="server" 
     OnServerValidate="addresspartsValidate" ControlToValidate="txt_city"
     ErrorMessage="Complete address must be entered." Display="Dynamic"/>

protected void addresspartsValidate(object sender, ServerValidateEventArgs e)
{
    if (txt_pat_address.Text.Length > 1)
    {
        e.IsValid = (e.Value.Length > 1);
    }
    else
    {
        e.IsValid = true;
    }
}

しかし、私が理解しているように、テストしているテキストボックスが空の場合、ボックスは検証されないため、空白の場合は起動せず、必須フィールドを確認するのが難しくなります. それで...考え?

また、テストのクライアント バージョンとサーバー バージョンの両方を用意する必要があるかどうかについて、矛盾する話が寄せられています。おそらく、古いバージョンでは必要でしたが、現在はそうではありませんか?

4

1 に答える 1

3

少し後ろ向きに考える必要があります。カスタムバリデーターは、エラーを表示する必要があるアイテム (特定のテキストボックス) にある必要があります。テキストボックスのカスタムバリデーターは、ドロップダウンをチェックして、テキストボックスの必須条件をトリガーするために必要な特定の条件がドロップダウンにあるかどうかを確認する必要があります。true であることが判明した場合は、テキスト ボックスに入力があるかどうかを確認し、それに応じて args.IsValid を返します。

protected void cvTimeOfDay_ServerValidate(object source, ServerValidateEventArgs args)
{
    if(ddlTimeOfDay.SelectedValue == "1" && txtbAddress.Text.Length == 0)
       args.IsValid = false;
    else
       args.IsValid = true;
}

var MyValidation = {
    DropdownValidation: function (sender, eventArgs) {
        var isValid;
        if (eventArgs && $('#ddlTimeOfDay').val() == '1') {
            isValid = false;
        }
        else
            isValid = true;
        eventArgs.IsValid = isValid; }
   }

<asp:DropDownList ID="ddlTimeOfDay" runat="server" ClientIDMode="Static">
<asp:ListItem Text="-Select-" Value="0"></asp:ListItem>
<asp:ListItem Text="PM" Value="1"></asp:ListItem>
<asp:ListItem Text="AM" Value="2"></asp:ListItem>
</asp:DropDownList>
 <br />
<asp:TextBox Text="" ID="txtbAddress" runat="server"  ClientIDMode="Static"></asp:TextBox>
<asp:CustomValidator ID="cvTimeOfDay" runat="server" 
    ErrorMessage="MustSelectValue" 
    ClientValidationFunction="MyValidation.DropdownValidation" 
    ControlToValidate="txtbAddress"  ValidationGroup="group1" 
    onservervalidate="cvTimeOfDay_ServerValidate" ValidateEmptyText="true"></asp:CustomValidator>
<asp:Button ID="Button1" runat="server" Text="Button"  ValidationGroup="group1"/>

カスタムバリデーターで空のテキストボックスを検証するには、ValidateEmptyText 属性を「true」に設定する必要があります。

通常、サイトで JavaScript が有効になっていない場合は、両方を使用してもかまいません。一部のブラウザーでは、JavaScript をオフにすることができます。JavaScript がオフになっていると、検証がバイパスされます。クライアント側の検証を使用すると、入力を検証するたびにポストバックするのではなく、クライアント上で正しく行われるため、適切です。

于 2011-04-01T22:55:12.243 に答える