c # - ошибка при использовании FindControl на div id
У меня есть сайт ASP.NET, который я пытаюсь получить доступ к элементам div по их идентификатору из кода C # позади файла. По сути, я хочу увидеть, существует ли элемент div, и если да, изменить его свойства.
Я нашел много ресурсов, которые указывают на дюжину различных решений, и ни одно из них, похоже, не работает.
HTML on ASP.Net Page:
<div class="contentArea">
<div class="block" id="button1" runat="server">
Some Content Here
</div>
<div class="block" id="button2" runat="server">
Some Content Here
</div>
<div class="block" id="button3" runat="server">
Some Content Here
</div>
</div>
C# Code Behind (examples I've tried):
System.Web.UI.HtmlControls.HtmlGenericControl div1 = (System.Web.UI.HtmlControls.HtmlGenericControl)this.FindControl("button1");
div1.Attributes["class"] = "classNameHere";
или же
Control div1 = this.FindControl("button1");
div1.GetType();
Когда код попадает во вторую строку каждого из приведенных выше примеров, я получаю сообщение об ошибке:
Object reference not set to an instance of an object.
Если я попробую следующее:
if (div1 != null)
{
// Do Something;
}
Ничего не происходит, потому что div1 всегда имеет значение null. По иронии судьбы, если я посмотрю на окно «Местные жители» и проверим это, то смогу увидеть идентификаторы кнопок в листинге, поэтому я знаю, что они есть, но система действует так, как будто не находит элемент управления.
Моя конечная цель состоит в том, чтобы найти максимальный id # кнопки div (глядя на мой пример HTML, максимальный id будет 3 (button3). Может быть, есть лучший способ сделать это, но в любом случае, как только у меня будет мой max id, я хочу иметь возможность касаться каждого div и изменять некоторые свойства CSS.
Хотя я мог бы легко сделать все это через jQuery, в этом случае мне нужно сделать это в C #.
Буду признателен за любую оказанную помощь. Если вам нужна дополнительная информация, дайте мне знать.
UPDATE Я создал новый веб-проект на C # с нуля. После добавления мастер-страницы (а не ее изменения) и добавления веб-формы с использованием мастер-страницы я добавил только одну строку в веб-форму под Content ID = & quot; Content2 & quot ;:
<div id="button1"></div>
Из-за кода на C # я все еще сталкиваюсь с той же самой проблемой, что и раньше.
FINAL UPDATE AND ANSWER Я в шоке, что никто (включая меня) не поймал мою ошибку из вышеприведенного обновления. Я никогда не ставлю runat = & quot; сервер & quot; когда я создал новый проект с нуля под div. Вот как я исправил свою проблему в новом проекте с нуля:
Добавить runat = & quot; сервер & quot; разделить:
<div id="button1" runat="server"></div>
Затем я сделал FindControl для ContentPlaceHolder под MasterPage:
ContentPlaceHolder myPlaceHolder = (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1");
Примечание. Вот как выглядит код ContentPlaceHolder на странице Site.Master, созданной по умолчанию:
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
После нахождения этого ContentPlaceHolder в коде позади, я затем искал в этом заполнителе для button1:
using System.Web.UI.HtmlControls;
HtmlControl myControl = (HtmlControl)myPlaceHolder.FindControl("button1");
Наконец, я проверяю, имеет ли myControl значение null:
if (myControl != null)
{
\\ Do Something
}
Когда я запустил этот код, он нашел div, который искал. Вот полный код всего этого:
using System.Web.UI.HtmlControls;
ContentPlaceHolder myPlaceHolder = (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1");
HtmlControl myControl = (HtmlControl)myPlaceHolder.FindControl("button1");
if (myControl != null)
{
// Do Something
}