如何以编程方式将ListItems添加到ASP.NET中的DropDownList?

时间:2012-03-21 15:02:20

标签: asp.net drop-down-menu generic-list

我正在尝试使用ListItems列表将项目添加到下拉列表中,但它没有获取值(仅文本)。

代码如下(从我实际使用的代码中简化):

    PositionDropDown.DataSource = GetPositionOptions();
    PositionDropDown.DataBind();


    private List<ListItem> GetPositionOptions() 
    {
        List<ListItem> items = new List<ListItem>();
        items.Add(new ListItem("",""));
        items.Add(new ListItem("Top (main)", "TOP"));
        items.Add(new ListItem("Bottom (full width)", "BTM"));
        items.Add(new ListItem("Bottom Left", "MIL"));
        items.Add(new ListItem("Bottom Middle", "MID"));
        return items;
    }

但是,呈现的HTML缺少ListItem构造函数的第二个参数中指定的值:

<option value=""></option>
<option value="Top (main)">Top (main)</option>
<option value="Bottom (full width)">Bottom (full width)</option>
<option value="Bottom Left">Bottom Left</option>
<option value="Bottom Middle">Bottom Middle</option>

为什么它不使用指定的“值”而只是在呈现HTML时重复“名称”?我做错了什么?

1 个答案:

答案 0 :(得分:10)

尝试使用此代码。您手动将项目添加与数据绑定混合。

private void SetPositionOptions() 
{
    PositionDropDown.Items.Add(new ListItem("",""));
    PositionDropDown.Items.Add(new ListItem("Top (main)", "TOP"));
    PositionDropDown.Items.Add(new ListItem("Bottom (full width)", "BTM"));
    PositionDropDown.Items.Add(new ListItem("Bottom Left", "MIL"));
    PositionDropDown.Items.Add(new ListItem("Bottom Middle", "MID"));
}

我会说,如果你想保留你的代码,你应该添加这2行

PositionDropDown.DataSource = GetPositionOptions();
PositionDropDown.DataTextField = "Text";
PositionDropDown.DataValueField = "Value";
PositionDropDown.DataBind();

但是没有意义,你不应该绑定ListItems。