在asp.net中更改服务器控件的id

时间:2009-11-19 11:56:23

标签: asp.net master-pages findcontrol

Hai guys,

我使用find控件在内容页面中使用它来查找母版页内的unoreder列表的列表项,

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

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

2 个答案:

答案 0 :(得分:1)

是的,在asp.net中使用css id是个大问题。首先,您可以将服务器控件的id更改为您想要的但是,ASP.NET将根据控件树中控件的位置重新生成它。

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

答案 1 :(得分:1)

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

根据评论和other question

进行更新

您应该使用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);
  }
}

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