c# - erreur à l'aide de FindControl sur les div id

J'ai un ASP.NET site que je suis en train d'essayer d'accéder à des éléments div, par leur ID dans le code C# de fichier. Essentiellement, je veux voir si un élément div existe, et si oui, de modifier ses propriétés.

J'ai trouvé beaucoup de ressources sur ce point à une douzaine de différentes solutions et aucun d'eux ne semble fonctionner.

HTML sur ASP.Net Page:

<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>

Code C# Derrière (les exemples que j'ai essayé):

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

ou

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

Lorsque le code arrive à la deuxième ligne de chacun des exemples ci-dessus, j'obtiens une erreur:

Objet de référence non définie à une instance d'un objet.

Si j'essaie suivantes:

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

Il n'arrive jamais rien parce que div1 est toujours la valeur null. Ironiquement, si je regarde la fenêtre variables locales et d'examiner cette question, je peux voir le bouton# id dans la liste, donc je sais qu'ils sont là, mais le système agit comme il n'est pas de trouver le contrôle.

Mon but ultime est de trouver le max id # du bouton de divs (en regardant mon exemple de code html, le max id serait de 3 (bouton3). Peut-être il ya une meilleure façon d'aller à ce sujet, mais de toute façon, une fois que j'ai mon max id, je veux être en mesure de toucher chaque div et de modifier certaines propriétés css.

Bien que je pourrais facilement faire tout cela via jQuery, dans ce cas j'ai besoin de faire cela en C#.

Toute aide est très appréciée. Si vous avez besoin de plus d'info, laissez-moi savoir.

Mise à JOUR
J'ai créé un nouveau C# projet web à partir de zéro. Après l'ajout d'une masterpage (et de ne pas l'altérer) et l'ajout d'un formulaire en ligne à l'aide de masterpage, j'ai seulement ajouté une ligne à webform en vertu de Content ID="Contenu2":

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

Partir de code c# derrière, j'ai encore fonctionner dans exactement le même problème qu'avant.

DERNIÈRE MISE À JOUR ET DE RÉPONDRE À
Je suis choqué personne (y compris moi-même) a attiré mon erreur à partir de ci-dessus mise à jour. Je n'ai jamais mis runat="server" quand je créé un nouveau projet à partir de zéro en vertu de la div. Voici comment j'ai résolu mon problème en vertu de mon nouveau projet à partir de zéro:

Ajouter runat="server" à la div:

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

Puis j'ai fait une FindControl sur le ContentPlaceHolder en vertu de la MasterPage:

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

Note: c'est Ce que le ContentPlaceHolder à quoi ressemble le code sur le Site.Page maître par défaut:

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

</asp:ContentPlaceHolder>

Après avoir découvert cette ContentPlaceHolder dans le code derrière, j'ai alors cherché dans cet espace réservé pour button1:

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

Enfin je vérifier pour voir si myControl est nulle:

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

Quand j'ai couru ce code, il a trouvé le div que je cherchais. Voici le code complet derrière tous mis ensemble:

using System.Web.UI.HtmlControls;

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

if (myControl != null)
{
    //Do Something
}
FindControl ne fonctionne que pour l'immédiat descendant de contrôle actuel (probablement de la page). Si la div est à l'intérieur d'un panneau en règle générale, vous devrez appeler findcontrol sur le panneau, ou écrire une méthode récursive.
Votre divs sont ID avais bodyDiv1, bodyDiv2, bodyDiv3, mais vous êtes à la recherche pour un contrôle avec l'ID button1? Il ya quelque chose que vous n'avez pas inclus dans l'exemple de code?
Les divs sont pas dans n'importe quel type de contrôle.
Je m'excuse, j'ai attrapé la mauvaise section de HTML à partir de mon fichier, j'ai mis à jour ci-dessus. La seule différence dans ce que je vous ai donné par rapport à ce que j'ai est qu'il y a plus de divs alors ce que j'ai donné.
Pouvez-vous préciser comment votre code HTML est en cours de création? Si c'est vraiment le HTML pour la page aspx, puis je ne suis pas sûr de savoir pourquoi vous aiic pas seulement ondonneacces button1 directement, sans l'aide de findControl. Je suppose que il y a quelque chose de plus qui se passe ici, mais ou il serait inutile... je suppose que les divs sont générées dynamiquement sur le serveur ou le client, mais il est très important de savoir qui. Si le client, alors vous devez faire somethign de dire au serveur d'eux ou de ne pas savoir (et donc de ne pas les trouver). Donc, veuillez inclure le code qui génère, si elle existe...

OriginalL'auteur JasonH | 2012-07-10