в#-ошибка при использовании FindControl для идентификатора div

У меня есть сайт ASP.NET, к которому я пытаюсь получить доступ к элементам div по их идентификатору из кода C #позади файла. По сути, я хочу увидеть, существует ли элемент div, и если да, то изменить его свойства.

Я нашел много ресурсов, которые указывают на дюжину различных решений, и ни одно из них не работает.

HTML на странице ASP.Net:

<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 (примеры, которые я пробовал):

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. По иронии судьбы, если я посмотрю на окно Locals и изучу его, я увижу идентификаторы кнопок #в списке, поэтому я знаю, что они там есть, но система ведет себя так, как будто не находит элемент управления.

Моя конечная цель - найти максимальный идентификатор #кнопок div (, глядя на мой пример html, максимальный идентификатор будет 3 (button3 ). Возможно, есть лучший способ сделать это, но в любом случае, как только у меня будет максимальный идентификатор, я хочу иметь возможность коснуться каждого div и изменить некоторые свойства css.

Хотя я мог бы легко сделать все это с помощью jQuery, в данном случае мне нужно сделать это на C #.

Любая помощь горячо приветствуется. Если вам нужна дополнительная информация, дайте мне знать.

ОБНОВЛЕНИЕ Я создал новый веб-проект C #с нуля. После добавления мастер-страницы (без ее изменения )и добавления веб-формы с использованием мастер-страницы я добавил только одну строку в веб-форму в разделе Content ID="Content2" :

<div id="button1"></div>

. Из кода c #я все еще сталкиваюсь с той же проблемой, что и раньше.

ПОСЛЕДНЕЕ ОБНОВЛЕНИЕ И ОТВЕТ Я в шоке, что никто (, в том числе и я сам ), не заметил мою ошибку в приведенном выше обновлении. Я никогда не ставил runat="server" при создании нового проекта с нуля под div. Вот как я исправил свою проблему в своем новом проекте с нуля:

Добавьте runat="server" в div:

<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 в коде позади, я затем искал внутри этого заполнителя кнопку1:

using System.Web.UI.HtmlControls;
HtmlControl myControl = (HtmlControl)myPlaceHolder.FindControl("button1");

Наконец, я проверяю, является ли myControl нулевым:

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
}
8
задан JasonH 11 July 2012 в 14:03
поделиться