C# ASP.NET下拉列表返回SelectedText而不是SelectedValue的值

C# ASP.NET下拉列表返回SelectedText而不是SelectedValue的值,c#,asp.net,C#,Asp.net,我错过了什么? 我正在从代码隐藏构建下拉列表,如下所示: ListItemCollection oL = new ListItemCollection(); foreach (var item in edata) { ListItem oListItem = new ListItem(); oListItem.Text = item.StatusName; //"StatusName" oL

我错过了什么? 我正在从代码隐藏构建下拉列表,如下所示:

 ListItemCollection oL = new ListItemCollection();
        foreach (var item in edata)
        {
            ListItem oListItem = new ListItem();
            oListItem.Text = item.StatusName; //"StatusName"
            oListItem.Value  = item.Id.ToString(); // "StatusId"

            if(item.Id == statusid)
            {
                oListItem.Selected = true;
            }
            oL.Add(oListItem);

        }
但当我尝试选择SelectedItem.Value时,它应该返回StatusId,但返回的是StatusName。我错过了什么

EventStatusDropDownList1.SelectedItem.Value
edata在这里代表什么?如果是DataTable或泛型列表,则可以使用DataSource和DataBind成员。请参阅下面的代码:

var edata = SomeMethodReturnngDataTable();
EventStatusDropDownList1.DataSource = edata;
EventStatusDropDownList1.DataTextField = "StatusName";
EventStatusDropDownList1.DataValueField = "StatusId";
EventStatusDropDownList1.DataBind();

现在您可以使用EventStatusDropDownList1.SelectedItem.Value来获取ID。

我以前使用过这个,但现在我必须使用我提到的方法。Yed edata是一个反对列表,请慢慢来,重新措辞。这真的很难理解你的推理。例如,你说你必须改变你的实现,从这个,到你原来的问题。为什么?@uzmagerani-mmmm,在上面再加一件事。数据绑定后,写入EventStatusDropDownList 1.SelectedValue=statusId.ToString;整个代码将首先绑定下拉列表,然后将值设置为datasource。需要记住的一点是,此类数据绑定控件支持IEnumerable集合进行数据绑定。以使现有正确答案无效的方式更新帖子是一种不好的方式。请在发帖前仔细考虑你的问题,并在发帖前加入你的限制。在Amit已经花时间编写并发布了他的解决方案之后,将其排除在外是不公平的。您是否检查了ID和Name在列表中是否是不同的值而不是相同的值?是的,两者都有不同的值