У меня есть сайт 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
}