我正在尝试更改从母版页继承其css的内容页面的css。 我尝试了以下但由于某种原因我得到“对象引用没有设置为对象的实例”错误。
以下是我的cs代码:
protected void Page_Load(object sender, EventArgs e)
{
HtmlGenericControl mycontrol = (HtmlGenericControl)this.Page.Master.FindControl("ul1").FindControl("li1") as HtmlGenericControl;
mycontrol.Attributes.Add("class", "newCSS");
}
在此处查找主页内容:
<div id="menu">
<ul id="ul1" runat="server">
<li id="li1" runat="server">
<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl ="home.aspx">Home</asp:HyperLink></li>
<li id="li2" runat="server">
<asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl ="AboutUs.aspx">About Us</asp:HyperLink></li>
<li id="li3" runat="server">
<asp:HyperLink ID="HyperLink3" runat="server" NavigateUrl="~/courses.aspx" >Courses</asp:HyperLink></li>
<li id="li4" runat="server">
<asp:HyperLink ID="HyperLink4" runat="server" NavigateUrl="~/News.aspx" >News</asp:HyperLink></li>
<li id="li5" runat="server">
<asp:HyperLink ID="HyperLink5" runat="server" NavigateUrl="ContactInfo.aspx" >Contact Us</asp:HyperLink></li>
</ul>
</div>
css如下:
#menu a:hover
{
background-color: white;
color: #bee2f1;
}
.newCSS
{
background-color: black;
color: #fff;
}
我尝试将.FindControl ID作为HyperLink ID而不是如上所示的ul,li Id,但这也不起作用。
编辑: 在cs页面中尝试了以下内容:
protected void Page_Load(object sender, EventArgs e)
{
HtmlGenericControl mycontrol = (HtmlGenericControl)Master.FindControl("ul1").FindControl("li1");
mycontrol.Attributes.Add("class", "newCSS");
}
没有编译器错误,但代码无效。
答案 0 :(得分:0)
我有一个递归函数用于这种情况。当您需要从内容页面查找/编辑母版页上的内容时,它总是很棘手。这个功能帮了我很多忙。在示例中,我使用它来通过传递按钮的ID来查找名为Menu2
的母版页上的菜单的返回按钮。
*的 方法 强>
public static Control FindControlRecursive(Control root, string id)
{
if (id == string.Empty)
return null;
if (root.ID == id)
return root;
foreach (Control c in root.Controls)
{
Control t = FindControlRecursive(c, id);
if (t != null)
{
return t;
}
}
return null;
}
*的 用法 强>
Menu menu2 = (Menu)FindControlRecursive(Master.Page, "ReturnButton");
使用此方法,我现在可以从内容页面访问主页面的菜单。
我希望这有帮助!