检查下拉列表是否包含值的最佳方法?

当用户导航到一个新的页面时,这个ddl的select索引是由一个cookie来确定的,但是如果ddl没有包含这个cookie的值,那么我希望它被设置为0.我将使用什么方法DDL? 循环是最好的方式,还是有一个简单的if语句我可以执行?

这是我所尝试的,但它不会返回一个布尔值。

if ( !ddlCustomerNumber.Items.FindByText( GetCustomerNumberCookie().ToString() ) ) ddlCustomerNumber.SelectedIndex = 0; 

有两种方法可以想到:

你可以像这样使用Contains:

 if (ddlCustomerNumber.Items.Contains(new ListItem(GetCustomerNumberCookie().ToString()))) { // ... code here } 

或修改您当前的策略:

 if (ddlCustomerNumber.Items.FindByText( GetCustomerNumberCookie().ToString()) != null) { // ... code here } 

编辑:还有一个DropDownList.Items.FindByValue工作方式与FindByText相同,除了它基于值而不是search。

这将返回一个项目。 只需更改为:

 if (ddlCustomerNumber.Items.FindByText( GetCustomerNumberCookie().ToString()) != null) ddlCustomerNumber.SelectedIndex = 0; 

如果0是您的默认值,则可以使用简单的赋值:

 ddlCustomerNumber.SelectedValue = GetCustomerNumberCookie().ToString(); 

这会自动select适当的列表项,如果DDL包含cookie的值。 如果它不包含它,这个调用不会改变select,所以它保持默认的select。 如果后者与0值相同,那么这对你来说是完美的解决scheme。

我使用这个机制相当多,发现它非常方便。

那这个呢:

 ListItem match = ddlCustomerNumber.Items.FindByText( GetCustomerNumberCookie().ToString()); if (match == null) ddlCustomerNumber.SelectedIndex = 0; //else // match.Selected = true; // you'll probably select that cookie value 

你可以尝试检查这个方法是否返回null:

 if (ddlCustomerNumber.Items.FindByText(GetCustomerNumberCookie().ToString()) != null) ddlCustomerNumber.SelectedIndex = 0; 

在C#这个作品:

  if (DDLAlmacen.Items.Count > 0) { if (DDLAlmacen.Items.FindByValue("AlmacenDefectoAndes").Value == "AlmacenDefectoAndes") { DDLAlmacen.SelectedValue = "AlmacenDefectoAndes"; } } 

更新:

上面的代码转换为Visual Basic不起作用。 它抛出“System.NullReferenceException:对象引用未设置为对象的实例..”

所以。 为了在Visual Basic上工作,我必须像这样更改代码:

  If DDLAlmacen.Items.Count > 0 Then If DDLAlmacen.Items.Contains(New ListItem("AlmacenDefectoAndes")) Then DDLAlmacen.SelectedValue = "AlmacenDefectoAndes" End If End If 

//你可以使用? 运算符而不是if

 ddlCustomerNumber.SelectedValue = ddlType.Items.FindByValue(GetCustomerNumberCookie().ToString()) != null ? GetCustomerNumberCookie().ToString() : "0"; 
 ListItem item = ddlComputedliat1.Items.FindByText("Amt D"); if (item == null) { ddlComputedliat1.Items.Insert(1, lblnewamountamt.Text); }