2012-08-06 80 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")); 
}