c # - błąd przy użyciu FindControl na div id

Mam witryny ASP.NET, które próbuję uzyskać dostęp do elementów div przez ich identyfikator z kodu C # za pliku. Zasadniczo chcę zobaczyć, czy istnieje element div, a jeśli tak, zmień jego właściwości.

Znalazłem wiele zasobów, które wskazują na kilkanaście różnych rozwiązań i żaden z nich nie działa.

HTML na stronie 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 (przykłady, których próbowałem):

System.Web.UI.HtmlControls.HtmlGenericControl div1 = (System.Web.UI.HtmlControls.HtmlGenericControl)this.FindControl("button1");
div1.Attributes["class"] = "classNameHere";

lub

Control div1 = this.FindControl("button1");
div1.GetType();

Gdy kod dociera do drugiej linii każdego z powyższych przykładów, pojawia się błąd:

Odwołanie do obiektu nie jest ustawione na wystąpienie obiektu.

Jeśli spróbuję:

if (div1 != null)
{
    // Do Something;
}

Nic się nie dzieje, ponieważ div1 ma zawsze wartość null. Jak na ironię, jeśli spojrzę na okno Locals i sprawdzę to, widzę przyciski # na liście, więc wiem, że są tam, ale system działa tak, jakby nie znalazł kontroli.

Moim nadrzędnym celem jest znalezienie max id # przycisku div (patrząc na mój przykład HTML, max id będzie wynosić 3 (button3). Może jest lepszy sposób, aby to zrobić, ale tak czy inaczej, gdy już mam mój max id, chcę móc dotknąć każdego div i zmienić niektóre właściwości css.

Chociaż mogłem łatwo zrobić to wszystko za pomocą jQuery, w tym przypadku muszę to zrobić w C #.

Każda pomoc jest bardzo ceniona. Jeśli potrzebujesz więcej informacji, daj mi znać.

AKTUALIZACJA Stworzyłem nowy projekt WWW C # od podstaw. Po dodaniu strony głównej (i niezmienianiu jej) i dodaniu formularza internetowego za pomocą strony głównej, dodałem tylko jeden wiersz do formularza internetowego pod ID treści = „Treść2”:

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

Z kodu c # za wciąż wciąż napotykam ten sam problem, co poprzednio.

KOŃCOWA AKTUALIZACJA I ODPOWIEDŹ Jestem zszokowany, że nikt (łącznie ze mną) nie złapał mojego błędu z powyższej aktualizacji. Nigdy nie umieszczałem runat = "server", kiedy stworzyłem nowy projekt od podstaw w div. Oto, jak naprawiłem mój problem w moim nowym projekcie od podstaw:

Dodaj runat = "serwer" do div:

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

Następnie zrobiłem FindControl na ContentPlaceHolder pod MasterPage:

ContentPlaceHolder myPlaceHolder = (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1");

Uwaga: Tak wygląda kod ContentPlaceHolder na stronie Site.Master utworzonej domyślnie:

<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">

</asp:ContentPlaceHolder>

Po znalezieniu tego kodu ContentPlaceHolder za mną, przeszukałem go w tym symbolu zastępczym dla przycisku1:

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

Wreszcie sprawdzam, czy myControl ma wartość null:

if (myControl != null)
{
    \\ Do Something
}

Kiedy uruchomiłem ten kod, znalazł div, którego szukałem. Oto kompletny kod za wszystkimi razem:

using System.Web.UI.HtmlControls;

ContentPlaceHolder myPlaceHolder = (ContentPlaceHolder)Master.FindControl("ContentPlaceHolder1");
HtmlControl myControl = (HtmlControl)myPlaceHolder.FindControl("button1");

if (myControl != null)
{
    // Do Something
}

questionAnswers(4)

yourAnswerToTheQuestion