【问题标题】:How to add a data-attribute to a dropdown menu with C#如何使用 C# 将数据属性添加到下拉菜单
【发布时间】:2012-08-03 19:35:00
【问题描述】:

我有一个标准的下拉列表,并且能够将数据绑定到该列表。

<asp:DropDownList runat="server" ID="ddlMake" ClientIDMode="Static" DataTextField="Name" DataValueField="URL" AppendDataBoundItems="true">
    <asp:ListItem>Select Make</asp:ListItem>
</asp:DropDownList>

我想为选项添加一个数据属性,如下所示:

<asp:ListItem data-siteid="<%# DataBinder.Eval(Container.DataItem, "SiteID") %>">Select Make</asp:ListItem>

我显然遇到了错误,因为它无法识别数据站点 ID。

列表是数据绑定的。

任何提示都会很方便

【问题讨论】:

  • 如果您将 DropDownList 绑定到某个集合(例如 List)并且存储在此集合中的对象(在本例中为 Thing)具有属性 SiteID,那么您应该能够使用您的代码访问此属性已经有。能否提供部分代码与数据绑定?
  • 您能举个例子吗?我确实可以使用列表访问数据,但是我不确定如何分配它,因为它不是 的有效值
  • 对不起,我弄错了。那么您是否尝试将自定义属性添加到 ListItem,对吗?也许你可以使用这个msdn.microsoft.com/en-us/library/…
  • 另外,您到底想完成什么?也许还有其他方法可以获得相同的结果?
  • 是的,我最终只是构建了一个中继器,感谢您的提示

标签: c# asp.net linq entity-framework


【解决方案1】:

您可以在代码隐藏中执行此操作。我不确定这是否是最优雅的方法,但它应该可以工作。

Dim dataSrc() As String = {"ABC", "123", "!@*#"}
drp.DataSource = dataSrc
drp.DataBind()
For i = 0 To drp.Items.Count - 1
    drp.Items(i).Attributes.Add("data-siteId", dataSrc(i))
Next

另外,如果这只是没有数据绑定的东西,您可以考虑使用 HtmlSelect 控件,它应该也可以工作:

<select id="drp2" runat="server">
  <option data-siteId="2">ABC</option>
  <option data-siteId="3">123</option>
  <option data-siteId="4">@*!&</option>
</select>

【讨论】:

    【解决方案2】:

    如果不需要事件处理,你可以用纯 html 重写它:

        <select>
          <%foreach (var item in DataSource){%>
            <option data-siteid="<%=item.SiteID%>" value="<%=item.Value%>"><%=item.Name%> </option>
          <%}%>
        </select>
    

    【讨论】:

      【解决方案3】:

      我最终使用了转发器,因为该页面不需要重新发布。这让我不必处理 ondatabound 事件。

      <asp:Repeater runat="server" ID="rptDropDown">
          <HeaderTemplate>
              <select id="ddlMake">
                  <option value="">Select Make</option>
          </HeaderTemplate>
          <ItemTemplate>
              <option data-siteid="<%# DataBinder.Eval(Container.DataItem, "SiteID") %>" value="<%# DataBinder.Eval(Container.DataItem, "URL") %>"><%# DataBinder.Eval(Container.DataItem, "Name") %></option>
          </ItemTemplate>
          <FooterTemplate>
              </select>
          </FooterTemplate>        
      </asp:Repeater>
      

      【讨论】:

      • 感谢您的回答!这正是我想要的!
      【解决方案4】:

      我最终这样做了(ds 是数据集):

      for (int row = 0; row <= ds.Tables(0).Rows.Count - 1; row++) {
          ddl.Items(row).Attributes.Add("data-siteid", ds.Tables(0).Rows(row)("SiteID"));
      }
      

      【讨论】:

        猜你喜欢
        • 2011-08-23
        • 1970-01-01
        • 2020-09-06
        • 2022-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-30
        相关资源
        最近更新 更多