3

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

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

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

最终想换个班li。但是我似乎无法访问任何属性,就像我li直接引用了一样。我在这里做错了什么?是否有另一种方法可以li从代码隐藏中修改 的属性?

4

2 回答 2

3

当您在服务器端使用通用 html 元素时,您将HtmlGenericControl在访问<li>服务器上时获得一个实例。与大多数 .NET Web 控件一样,HtmlGenericControl该类不支持Classor属性。CssClass您仍然可以通过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>.

于 2013-11-04T14:12:01.933 回答
2

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

HtmlGenericControl li = (HtmlGenericControl)Page.FindControl("li" + i);
li.Attributes["onclick"] = "return null;"; 
于 2013-11-04T14:15:17.813 回答