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
}

Ответы на вопрос(4)

Ваш ответ на вопрос