0

ドロップダウンリストの選択された値が 0 より大きいかどうかをチェックする場合に正常に動作する次のコードがあります。

ただし、値ではなく、ドロップダウンリストの選択されたインデックスに対してチェックする必要があります。

Sub selectValidation(source As Object, args As ServerValidateEventArgs)
   Try
       args.IsValid = args.Value > 0
   Catch ex As Exception
       args.IsValid = False
   End Try
End Sub

.Value を .SelectedIndex に変更すると、次のエラーが発生します。

BC30456: 'SelectedIndex' is not a member of 'System.Web.UI.WebControls.ServerValidateEventArgs'.

編集:バリデーターコードは次のとおりです...

<asp:DropDownList runat="server" ID="Adults" AutoPostBack="true" />

<asp:CustomValidator id="Req_Adults"
     ControlToValidate="Adults"
     ClientValidationFunction="selectValidation"
     OnServerValidate="selectValidation"
     runat="server"
     CssClass="errorAsterisk"
     Text="*" 
     ErrorMessage="Select number of adults" />

<asp:DropDownList runat="server" ID="Children" AutoPostBack="true" />

<asp:CustomValidator id="Req_Children"
     ControlToValidate="Children"
     ClientValidationFunction="selectValidation"
     OnServerValidate="selectValidation"
     runat="server"
     CssClass="errorAsterisk"
     Text="*" 
     ErrorMessage="Select number of children" />

クライアント側の検証 (正常に動作):

function selectValidation(source, arguments)
   {
        var selectedValue = $(source).siblings("select").prop("selectedIndex");
        if (selectedValue > 0 ){
            arguments.IsValid = true;
        } else {
            arguments.IsValid = false;
        }
   }
4

1 に答える 1

0

DropDownListハンドラーから直接アクセスできる場合、これは機能します。

Sub selectValidation(source As Object, args As ServerValidateEventArgs)
    args.IsValid = Me.DropDownList1.SelectedIndex <> -1
End Sub

それ以外の場合は、それがどこにあるかを示す必要があります。sourceまたはから参照を取得できませんargs

ACustomValidatorは、 を持つ必要のない唯一のバリデーターControlToValidateです。複数のコントロールを検証できるため、コントロールを渡すことは意味がありません。

アップデート

私はこのアプローチが好きではありません。ただし、本当に同じハンドラーを使用したい場合は、ValidationGroup関連するすべてに a を割り当て、次のDropDownListsようなクエリを使用してそれらを見つけることができます。

Dim ddlNumZero = From ddl In Me.Controls.OfType(Of DropDownList)()
           Where ddl.ValidationGroup = "NumberValidation" _
           AndAlso ddl.SelectedIndex <= 0
args.IsValid = Not ddlNumZero.Any()
于 2013-03-07T10:27:38.027 に答える