C# 如何使用C向下拉菜单添加数据属性#
我有一个标准的下拉列表,能够数据绑定到列表C# 如何使用C向下拉菜单添加数据属性#,c#,asp.net,linq,entity-framework,C#,Asp.net,Linq,Entity Framework,我有一个标准的下拉列表,能够数据绑定到列表 <asp:DropDownList runat="server" ID="ddlMake" ClientIDMode="Static" DataTextField="Name" DataValueField="URL" AppendDataBoundItems="true"> <asp:ListItem>Select Make</asp:ListItem> </asp:DropDownList>
<asp:DropDownList runat="server" ID="ddlMake" ClientIDMode="Static" DataTextField="Name" DataValueField="URL" AppendDataBoundItems="true">
<asp:ListItem>Select Make</asp:ListItem>
</asp:DropDownList>
选择Make
我想向选项添加一个数据属性,如下所示:
<asp:ListItem data-siteid="<%# DataBinder.Eval(Container.DataItem, "SiteID") %>">Select Make</asp:ListItem>
选择Make
很明显,我遇到了一个错误,因为它无法识别数据站点ID
列表是数据绑定的。
任何提示都很方便您可以在代码隐藏中执行此操作。我不确定这是否是最优雅的方法,但它应该有效
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
此外,如果这只是一个不带数据的东西,您可以考虑使用同样应该工作的HTMLSELL控件:
<select id="drp2" runat="server">
<option data-siteId="2">ABC</option>
<option data-siteId="3">123</option>
<option data-siteId="4">@*!&</option>
</select>
基础知识
123
@*!&
如果不需要事件处理,您可以使用纯html重写它:
<select>
<%foreach (var item in DataSource){%>
<option data-siteid="<%=item.SiteID%>" value="<%=item.Value%>"><%=item.Name%> </option>
<%}%>
</select>
我最终使用了一个转发器,因为页面不需要重新发布。这使我不必处理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>
选择Make
我最终这样做了(其中ds
是数据集):
for(int row=0;row,如果您将DropDownList绑定到某个集合(比如List)和存储在此集合中的对象(在本例中是)拥有属性SiteID那么您应该能够使用您已有的代码访问此属性。您可以为部分代码提供数据绑定吗?您可以提供一个示例吗?我确实可以通过列表访问数据,但是我不确定如何分配它,因为它不是有效值。抱歉,我搞错了。因此,您正在尝试添加数据绑定吗ListItem的自定义属性,对吗?也许你可以使用这个?还有你到底想实现什么?也许有其他方法可以获得相同的结果?是的,我只是构建了一个转发器,感谢tipThanks的回答!这正是我想要的!!
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"));
}