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
}