2012-08-06 75 views
3

我有一个标准的下拉列表,并且能够将数据绑定到列表。如何使用C#向下拉菜单添加数据属性

<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> 

我显然得到一个错误,因为它不能识别数据SITEID。

该列表是数据绑定。

任何提示将方便

+0

如果绑定DropDownList的一些集合(比如列表)和对象存储在此集合(在这种情况下的东西)有财产SiteID那么你应该能够访问此属性与你已经有的代码。你能用数据绑定提供部分代码吗? – wlabaj 2012-08-06 20:15:57

+0

你能提供一个例子吗?我确实有访问与列表的数据,但我不知道如何分配它,因为它不是一个有效的值为 2012-08-06 20:18:43

+0

对不起,我错了。那么你是否试图将自定义属性添加到ListItem中,对吗?也许你可以使用这个http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listitem.attributes.aspx? – wlabaj 2012-08-06 20:32:34

回答

15

你可以在代码隐藏做到这一点。我不确定这是否是最优雅的方法,但它应该起作用。

Dim dataSrc() As String = {"ABC", "123", "[email protected]*#"} 
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> 
+0

雅,它看起来不高雅,但在大多数地方工作。 – Shashank 2014-06-02 09:59:51

0

你可以用纯HTML改写它,如果没有事件处理是需要的:

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

我结束了使用中继器,因为该页面不需要重新发布。这让我不必去参加一个有趣的活动。

<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> 
+0

感谢您的回答!这正是我正在寻找的! – Dragan 2012-12-10 00:51:25

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")); 
}