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



我试图使用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时不使用指定的"值",而只是重复"名称"?我做错了什么?

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

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。

最新更新