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. 它可以验证多个控件,因此传递控件没有意义。

更新

我不喜欢这种方法。但是,如果您真的想使用相同的处理程序,您可以将 a 分配ValidationGroup给所有相关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 回答