【问题标题】:Databind ASP.NET List of ListItem to DropDownList issue将 ListItem 的 ASP.NET 列表数据绑定到 DropDownList 问题
【发布时间】: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

还是我做错了什么?

【问题讨论】:

  • 既然您已经在循环构建列表,为什么不直接将每个列表项添加到下拉列表中?

标签: asp.net data-binding list drop-down-menu listitem


【解决方案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();
        

        【讨论】:

          猜你喜欢
          • 2011-04-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-13
          • 1970-01-01
          • 1970-01-01
          • 2010-09-13
          相关资源
          最近更新 更多