如何以编程方式将ListItems添加到ASP.NET中的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构造函数的第2个参数中指定的值:

<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.

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...