我有一个标准下拉列表,可以将数据绑定到列表中。
<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>
我显然收到错误,因为它无法识别data-siteid。
该列表是数据绑定。
任何提示都会很方便
答案 0 :(得分:16)
您可以在代码隐藏中执行此操作。我不确定这是否是最优雅的方法,但它应该有用。
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>
答案 1 :(得分:4)
我最终使用了转发器,因为页面不需要重新发布。这使我不必使用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>
答案 2 :(得分:0)
如果不需要处理事件,您可以使用纯HTML重写它:
<select>
<%foreach (var item in DataSource){%>
<option data-siteid="<%=item.SiteID%>" value="<%=item.Value%>"><%=item.Name%> </option>
<%}%>
</select>
答案 3 :(得分:0)
我最终这样做了(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"));
}