2014-05-02 150 views
0

我添加自定義屬性下拉列表這樣的,ASP.NET下拉列表自定義屬性

<asp:DropDownList ID="ddlFirst" runat="server" ClientIDMode="Static"></asp:DropDownList> 

在後面的代碼我添加自定義屬性,

ListItem deleteMeLi = new ListItem("Mango", ""); 
deleteMeLi.Attributes.Add("data-IsMangoRotten", "0"); 
ddlFirst.Items.Add(deleteMeLi); 

現在當我試圖讓值回這個樣子,

int rottenM = Convert.ToInt32(ddlFirst.SelectedItem.Attributes["data-IsMangoRotten"].ToString()); 

它拋出對象爲空厚望,

在調試我想通了,ddlFirst的屬性計數爲0,但在HTML我可以使用的開發工具

回答

2

的問題是,DropDownList s的呈現爲在客戶端<select>元素,正因爲如此,你不能一個屬性在HTML添加到<option>元素和檢索它的服務器端,因爲他們沒有公佈。當然,您可以通過簡單的Javascript在客戶端訪問它們,但不要期望它們被髮布到服務器。

+0

+1,但是有沒有什麼工作:( – Mathematics

+0

@CustomizedName我可以想到幾個替代方案:1.不要使用DrowpDownList,而是編寫一個支持此功能的自定義服務器控件 - 容易實現,但需要一些時間 - 2.簡單地在客戶端獲取屬性值,將其粘貼到一個'input type =「hidden」'元素,然後讀取這個'input type ='hidden'元素在服務器端,這有點破綻,但很快實現。 – Icarus

0

你的榜樣正常工作自身看attrbutes。

我懷疑你試圖在將deleteMeLi添加到ddlFirst之前獲取SelectedItem的屬性,因此,然後嘗試獲取空對象的屬性並獲取異常。

檢查何時在頁面生命週期中添加ListItem,以及何時嘗試獲取屬性值。

+1

-1。這是不正確的。自定義屬性到選項元素不會發布到服務器。 – Icarus

+0

對不起,但事實並非如此..因爲我得到的文本和價值+我加載時加載和單擊事件試圖獲得值 – Mathematics

+0

@Icarus,他們不會是如果OP加入他們在標記,但它們被添加到服務器端。我自己測試它,它工作正常。 – spongessuck