Fehler bei der Verwendung von FindControl für Div-ID

Ich habe eine ASP.NET-Site, auf die ich versuche, anhand ihrer ID aus dem C # -Code hinter der Datei auf div-Elemente zuzugreifen. Im Wesentlichen möchte ich sehen, ob ein div-Element vorhanden ist, und in diesem Fall seine Eigenschaften ändern.

Ich habe viele Ressourcen gefunden, die auf ein Dutzend verschiedener Lösungen verweisen, und keine davon scheint zu funktionieren.

HTML auf der ASP.Net-Seite:

<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 (Beispiele, die ich ausprobiert habe):

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

oder

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

Wenn der Code in die zweite Zeile jedes der obigen Beispiele gelangt, erhalte ich eine Fehlermeldung:

Der Objektverweis wurde nicht auf eine Instanz eines Objekts festgelegt.

Wenn ich folgendes versuche:

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

Es passiert nie etwas, weil div1 immer auf null gesetzt ist. Ironischerweise sehe ich, wenn ich das Fenster "Locals" betrachte und dies untersuche, die Schaltflächen-IDs in der Auflistung, sodass ich weiß, dass sie vorhanden sind, aber das System verhält sich so, als würde es das Steuerelement nicht finden.

Mein ultimatives Ziel ist es, die maximale ID der Schaltflächendivs zu finden (in meinem HTML-Beispiel wäre die maximale ID 3 (button3). Vielleicht gibt es einen besseren Weg, dies zu tun, aber so oder so, sobald ich meine habe max id, ich möchte in der Lage sein, jedes div zu berühren und einige CSS-Eigenschaften zu ändern.

Obwohl ich all dies problemlos über jQuery ausführen kann, muss dies in diesem Fall in C # erfolgen.

Jede Hilfe wird sehr geschätzt. Wenn Sie weitere Informationen benötigen, lassen Sie es mich wissen.

AKTUALISIEREN Ich habe ein neues C # -Webprojekt von Grund auf erstellt. Nachdem ich eine Masterseite hinzugefügt (und nicht geändert) und ein Webformular über die Masterseite hinzugefügt habe, habe ich dem Webformular unter Content ID = "Content2" nur eine Zeile hinzugefügt:

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

Von C # -Code dahinter stoße ich immer noch auf dasselbe Problem wie zuvor.

ENDGÜLTIGE AKTUALISIERUNG UND ANTWORT Ich bin schockiert, dass niemand (auch ich selbst) meinen Fehler aus dem obigen Update mitbekommen hat. Ich habe nie runat = "server" angegeben, als ich ein neues Projekt von Grund auf unter dem div erstellt habe. So habe ich mein Problem unter meinem neuen Projekt von Grund auf behoben:

Füge runat = "server" zu div hinzu:

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

Dann habe ich ein FindControl auf dem ContentPlaceHolder unter der MasterPage gemacht:

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

Hinweis: So sieht der ContentPlaceHolder-Code auf der standardmäßig erstellten Site.Master-Seite aus:

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

</asp:ContentPlaceHolder>

Nachdem ich diesen ContentPlaceHolder im Code dahinter gefunden hatte, suchte ich in diesem Platzhalter nach button1:

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

Schließlich überprüfe ich, ob myControl null ist:

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

Als ich diesen Code ausführte, fand er den Div, nach dem ich gesucht hatte. Hier ist der komplette Code, der hinter allem steckt:

using System.Web.UI.HtmlControls;

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

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

Antworten auf die Frage(4)

Ihre Antwort auf die Frage