2

嘿伙计们,

我使用查找控件从内容页面中查找母版页内的无序列表的列表项,

Control home = this.Page.Master.FindControl("list").FindControl("home");

现在我必须将控件主页的 id 更改为“当前”,因为要为其应用 css....

4

2 回答 2

1

是的,在 asp.net 中使用 css id 是一个大问题。首先,您可以将服务器控件的 id 更改为您想要的,但是,这将由 ASP.NET 重新生成,具体取决于控件在页面控件树中的位置。

我的建议是使用控件的 cssclass 属性,并将 css id 替换为 class。

于 2009-11-19T12:13:56.003 回答
1

您知道您要查找的控件的类型吗?ControlListItem都没有公开 CssClass 属性,但是 ListItem 确实公开了它的 Attributes 属性。

根据评论和其他问题更新:

你应该使用System.Web.UI.HtmlControls.HtmlGenericControl

所以这样的事情应该适合你:

HtmlGenericControl home = 
                    this.Page.Master.FindControl("list").FindControl("home")
                                                         as HtmlGenericControl;

string cssToApply = "active_navigation";

if (null != home) {
  home.Attributes.Add("class", cssToApply);
}

如果您认为可能已经分配了一个需要附加的类,则可以执行以下操作:

if (null != home) {
  if (home.Attributes.ContainsKey("class")) {
    if (!home.Attributes["class"].Contains(cssToApply)){
      // If there's already a class attribute, and it doesn't already
      // contain the class we want to add:
      home.Attributes["class"] += " " + cssToApply;
    }
  }
  else {
    // Just add the new class
    home.Attributes.Add("class", cssToApply);
  }
}

如果它们不是 ListItem,则将它们转换为正确的类型,并像以前一样修改属性集合,除非该类型有 CssClass 属性。

于 2009-11-19T13:47:35.047 回答