2012-04-10 4 views
0

Ich habe eine Masterseite, dort gibt es nur ein Menüelement und einen ContentPlaceholder. Ich habe ein anderes Webformular, das diese Masterseite erbt. Wie immer habe ich alle meine Kontrollen in den contentplaceholder gesetzt. Auf dem Formular__Load-Ereignis möchte ich Enabled = false aller Dropdown-Listensteuerelemente festlegen. Zu diesem Zweck schreibe ich:ASP.NET - Zugriff auf die Steuerelemente in untergeordneten Seite

 foreach (Control control in Page.Controls) 
    { 
     if (control is DropDownList) 
     { 
      DropDownList ddl = (DropDownList)control; 
      ddl.Enabled = false; 
     } 
    } 

Aber alle Dropdown-Listen bleiben aktiviert. Wenn ich nach der Anzahl der Page.Control suche, sehe ich nur ein Steuerelement und es ist der Menüeintrag der Masterpage des Formulars. Was muss ich tun, um die Liste der Steuerelemente in meiner aktuellen Form zu erhalten?

Antwort

1

Ihre Foreach-Schleife wird nicht funktionieren, da Ihre Steuerung Kindersteuerung haben kann und sie auch Kindersteuerung und dann DDL haben können.

Was ich bevorzuge ist, eine Liste von Steuerelementen zuerst zu erstellen und dann durch die Liste zu iterieren, die mit Ihren DDL-Steuerelementen gefüllt ist.

Später können Sie foundSofar direkt durchlaufen und es ist sicher, dass es alle DDL-Steuerelemente darin enthalten wird.

1

Hier ist der Code, der für mich arbeitete. Sie haben Recht, auf die Inhaltskontrolle kann nicht von der Seite aus zugegriffen werden, daher verwenden Sie den Master.FindControl ... -Code. Stellen Sie sicher, dass Sie das Argument ContentPlaceHolderID in den Ausdruck Master.FindControl ("righthere") einfügen.

ContentPlaceHolder contentPlaceHolder = (ContentPlaceHolder)Master.FindControl("MainContent"); 
if(contentPlaceHolder != null) 
{ 
    foreach (Control c in contentPlaceHolder.Controls) 
    { 
     DropDownList d = c as DropDownList; 
     if (d != null) 
      d.Enabled = false; 
    } 
} 
+0

Und wie bekomme ich die Inhaltskontrolle? Wenn es Inhalt Inhalt ist = (Inhalt) Page.FindControl ("ContentMain"); dann gibt dies null zurück. –

+0

Sie können es nicht mit seinem Namen nennen? Wenn es ContentMain heißt, wäre das ContentMain.Controls – Eugene

+0

, aber wenn ich ContentMain eintippe, wird es nicht im IntelliSense-Menü angezeigt. –