与<li> </li>一起使用的FindControl()的等价物

时间:2013-11-04 14:04:35

标签: c# asp.net .net-4.0 controls

我的页面上有<li>。它有runat="server"。我现在可以直接在代码隐藏中引用此li。但是,正如我对页面上的其他控件所做的那样,我需要根据与其ID匹配的字符串值来查找它。

作为循环的一部分,我有:

var li = Page.FindControl("li" + i);

最终想要改变li的类。但是我似乎没有像我直接引用li那样访问任何属性。我在这做错了什么?是否有另一种方法可以修改代码隐藏中的li属性?

2 个答案:

答案 0 :(得分:2)

当您在服务器端使用通用html元素时,在访问服务器上的HtmlGenericControl时,您将获得<li>的实例。与大多数.NET Web控件一样,HtmlGenericControl类不支持ClassCssClass属性。您仍然可以通过Attributes集合更改课程:

var li = (HtmlGenericControl) Page.FindControl("li" + i);
li.Attributes["class"] = "myCssClass";

Page.FindControl("li" + i)方法需要有效的控件ID 。因此,您还需要为<li>元素添加ID:

<li runat="server" id="li1">...</li>

但是,如果要在转发器或列表视图控件中创建动态列表,这可能对您不起作用,因为id将以父控件为前缀。您应该挂钩到转发器/列表视图控件的相应项目创建事件,以便以编程方式访问<li>

答案 1 :(得分:2)

在HtmlGenericControl中投射控件以添加属性

HtmlGenericControl li = (HtmlGenericControl)Page.FindControl("li" + i);
li.Attributes["onclick"] = "return null;";