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

时间:2010-01-05 15:58:01

标签: c# asp.net drop-down-menu

当用户导航到新页面时,此ddl的选定索引由cookie确定,但如果ddl不包含该cookie的值,那么我希望将其设置为0.我将采用什么方法用于ddl?循环是最好的方法,还是我可以执行简单的if语句?

这是我尝试过的,但它不会返回一个bool。

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

10 个答案:

答案 0 :(得分:117)

有两种方法可以想到:

你可以使用像这样的包含:

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

或修改您当前的策略:

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

编辑:还有一个DropDownList.Items.FindByValue与FindByText的工作方式相同,只不过它会根据值进行搜索。

答案 1 :(得分:9)

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

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

答案 2 :(得分:5)

如果0是您的默认值,您只需使用简单的赋值:

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

如果DDL包含cookie的值,则会自动选择正确的列表项。如果它不包含它,则此调用不会更改选择,因此它将保持默认选择。如果后者与值0相同,那么它就是您的完美解决方案。

我使用这种机制非常方便,并且非常方便。

答案 3 :(得分:1)

这个怎么样:

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

答案 4 :(得分:1)

APE_F

答案 5 :(得分:0)

您可以尝试检查此方法是否返回null:

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

答案 6 :(得分: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

答案 7 :(得分:0)

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

ddlCustomerNumber.SelectedValue = ddlType.Items.FindByValue(GetCustomerNumberCookie().ToString()) != null ? GetCustomerNumberCookie().ToString() : "0";

答案 8 :(得分:0)

如果函数返回Nothing,您可以尝试以下

if (ddlCustomerNumber.Items.FindByText(
    GetCustomerNumberCookie().ToString()) != Nothing)
{
...
}

答案 9 :(得分:0)

有时,该值需要修剪空白或不匹配,在这种情况下,可以使用此附加步骤(source):

if(((DropDownList) myControl1).Items.Cast<ListItem>().Select(i => i.Value.Trim() == ctrl.value.Trim()).FirstOrDefault() != null){}