C# ASP.NET下拉列表自定义属性

C# ASP.NET下拉列表自定义属性,c#,asp.net,C#,Asp.net,我在下拉列表中添加了一个自定义属性,如下所示 <asp:DropDownList ID="ddlFirst" runat="server" ClientIDMode="Static"></asp:DropDownList> int rottenM = Convert.ToInt32(ddlFirst.SelectedItem.Attributes["data-IsMangoRotten"].ToString()); 现在,当我试图像这样找回价值时 <asp

我在下拉列表中添加了一个自定义属性,如下所示

 <asp:DropDownList ID="ddlFirst" runat="server" ClientIDMode="Static"></asp:DropDownList>
 int rottenM = Convert.ToInt32(ddlFirst.SelectedItem.Attributes["data-IsMangoRotten"].ToString());
现在,当我试图像这样找回价值时

 <asp:DropDownList ID="ddlFirst" runat="server" ClientIDMode="Static"></asp:DropDownList>
 int rottenM = Convert.ToInt32(ddlFirst.SelectedItem.Attributes["data-IsMangoRotten"].ToString());
它抛出的对象为空期望值


在调试过程中,我发现ddlFirst的属性计数为0,但是在HTML中,我可以使用开发人员工具看到属性,您的示例本身运行良好

我怀疑您试图在将deleteMeLi添加到ddl之前获取SelectedItem的属性,因此,您尝试获取null对象的属性并获取异常


在页面生命周期中添加ListItem以及尝试获取属性值时进行检查。

问题在于,
DropDownList
s在客户端呈现为
元素,因此,您不能在HTML中向
元素添加属性并在服务器端检索它,因为它们没有发布。当然,您可以通过纯Javascript在客户端访问它们,但不要期望它们被发布到服务器。

-1。这是不正确的。选项元素的自定义属性未发布到服务器。抱歉,情况并非如此。。当我获取文本和值+时,我在加载和单击事件尝试获取values@Icarus,如果OP将它们添加到标记中,它们就不会出现,但它们是添加到服务器端的。我自己测试过,效果很好。@spongessuck是的,正如我所说,它们添加正确,但没有发布。你不可能把它们读回。@Icarus我明白你的意思了-在下一次回发时,它们将丢失。@CustomizedName我可以想出几个备选方案:1。不要使用
DrowpDownList
,而是编写支持此功能的自定义服务器控件-易于实现,但需要一些时间-2。只需在客户端获取属性值,将其粘贴到
input type=“hidden”
元素,然后在服务器端读取该
input type=“hidden”
元素的值。这有点像黑客,但很快就能实现。