2014-05-02 153 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