HtmlGenericControl выдает мне ошибку "Ссылка на объект не установлена на экземпляр объекта"
Я пытаюсь изменить 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 в качестве идентификатора HyperLink вместо идентификатора ul, li, как показано выше, но это тоже не сработало.
Изменить: Попробовал следующее на странице CS:
protected void Page_Load(object sender, EventArgs e)
{
HtmlGenericControl mycontrol = (HtmlGenericControl)Master.FindControl("ul1").FindControl("li1");
mycontrol.Attributes.Add("class", "newCSS");
}
Нет ошибки компилятора, но код не работает.
1 ответ
Для таких ситуаций я использую рекурсивную функцию. Когда вам нужно найти / отредактировать контент на главной странице со страницы контента, это всегда сложно. Эта функция мне очень помогла. В этом примере я использую его, чтобы найти кнопку возврата моего меню на главной странице, которая называется 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");
Используя этот метод, я теперь могу получить доступ к Меню моей главной страницы со страницы содержимого.
Надеюсь, это поможет!