将 ListItem 的 ASP.NET 列表数据绑定到 DropDownList 问题
Posted
技术标签:
【中文标题】将 ListItem 的 ASP.NET 列表数据绑定到 DropDownList 问题【英文标题】:Databind ASP.NET List of ListItem to DropDownList issue 【发布时间】:2010-11-18 22:21:42 【问题描述】:我刚刚遇到这个奇怪的事情,我希望以不同的(逻辑)方式工作,但事实并非如此。是错误还是“功能”?
所以我在代码隐藏中填充了一个 DropDownList,其中包含一个 ListItem 列表。每个新的 ListItem 都有 2 个参数,根据智能感知提供的文档,它们对应于它的文本和值:
List<ListItem> users = new List<ListItem>();
foreach (SubscriptionUser su in subscriptionDetails.UserList)
users.Add(new ListItem(su.FirstName + " " + su.LastName, su.EmailAddress));
ddlPrimaryContact.DataSource = users;
ddlPrimaryContact.DataBind();
现在,有人可以解释一下为什么数据绑定的 DropDownList 的 Text 和 Value 都设置为完全相同(ListItem 文本),而不是使用 ListItem.Text 作为 Text 和 ListItem.Value 作为 Value?
ARGH!! http://www.freeimagehosting.net/uploads/fe65d0e7d5.jpg
还是我做错了什么?
【问题讨论】:
既然您已经在循环构建列表,为什么不直接将每个列表项添加到下拉列表中? 【参考方案1】:有一种方法可以将 ListItem 项添加到 DropDownList 并让 .NET 自动将 ListItem 的文本与 DropDownList 的文本匹配,对于值也是如此:
List<ListItem> users = new List<ListItem>();
// fill in list
ddlUsers.Items.AddRange(users.ToArray());
【讨论】:
【参考方案2】:您也可以直接将 listitem 添加到下拉列表中..
List<ListItem> users = new List<ListItem>();
for (int count = 0; count < 10; count++)
ListItem li = new ListItem("List " + count.ToString(), count.ToString());
ddl.Items.Add(li);
【讨论】:
【参考方案3】:或者,您也可以通过这种方式绑定它。 (假设您可以向 SubscriptionUser 添加一个名为 FullName 的 readOnly 属性(返回 su.FirstName + " " + su.LastName)
ddlPrimaryContact.DataSource = subscriptionDetails.UserList;
ddlPrimaryContact.DataBind();
然后,在您的 ASPX 页面中输入:
<asp:DropDownList id="ddlPrimaryContact" runat="server" DataTextField="FullName" DataValueField="EmailAddress" />
【讨论】:
这是一个相当干净的方法,它更直观且可维护。我最终使用了这个方法,因为它遵循了每个下拉列表项的现有类对象的结构。【参考方案4】:您应该将下拉列表绑定为:
ddlPrimaryContact.DataSource = users;
ddlPrimaryContact.DataTextField = "Value";
ddlPrimaryContact.DataValueField = "Text";
ddlPrimaryContact.DataBind();
如果您问为什么,据我所知,数据绑定控件通过为数据源集合中的每个项目调用 ToString 方法来获取文本和值(如果它们没有像上面那样提供)。所以你的集合中的每个 ListItem 通过 ToString 方法返回它的 Text 属性。
【讨论】:
【参考方案5】:您好,当数据绑定(到任何东西)时,您需要设置 DropDownList 的 DataTextField 和 DataValueField。在您的情况下,您应该使用以下代码
List<ListItem> users = new List<ListItem>();
foreach (SubscriptionUser su in subscriptionDetails.UserList)
users.Add(new ListItem(su.FirstName + " " + su.LastName, su.EmailAddress));
ddlPrimaryContact.DataTextField = "Text";
ddlPrimaryContact.DataValueField = "Value";
ddlPrimaryContact.DataSource = users;
ddlPrimaryContact.DataBind();
【讨论】:
以上是关于将 ListItem 的 ASP.NET 列表数据绑定到 DropDownList 问题的主要内容,如果未能解决你的问题,请参考以下文章
如何将属性添加到输入标签 asp.net 内的 RadioButtonList 项
WCF 服务将数据填充到 ASP.net 下拉列表(学习 WCF 服务)
ASP.NET SignalR - 无法将存储在数据库中的消息列表发送给用户