Svar til http://www.eksperten.dk/spm/879173
Ved hjælp af en lille rekursiv metode, kan du meget nemt finde lige præcis den eller de kontroller du måtte have brug for. Også selvom de ligger i en masterpage.
Her er et udsnit af vores masterpage:
<form id="form1" runat="server">
<div>
<asp:PlaceHolder runat="server" ID="ph1" />
<asp:PlaceHolder runat="server" ID="ph2" />
<asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
<asp:PlaceHolder runat="server" ID="ph3" />
</div>
</form>
Lad os forsøge at finde alle de placeholders der findes i den masterpage.
Vi kan enten tilgå vores masterpage fra dens egen code-behind til eller evt. gøre det fra en side der arver fra den pågældende masterpage. I dette tilfælde gør vi det med sidstnævnte metode hvilket kræver at du kalder nedenstående kode fra din WebForms page og ikke dine WebForms masterpage.
public partial class WebForm1 : System.Web.UI.Page {
protected void Page_Load( object sender, EventArgs e ) {
FindPlaceHolders( Master.Controls );
foreach ( var item in _placeHolders ) {
Response.Write( item.ID );
}
}
private IList<PlaceHolder> _placeHolders = new List<PlaceHolder>();
private void FindPlaceHolders( ControlCollection controls ) {
foreach ( Control item in controls ) {
if ( item is PlaceHolder ) {
_placeHolders.Add( (PlaceHolder)item );
}
if ( item.HasControls() ) {
FindPlaceHolders( item.Controls );
}
}
}
}
Ease peasy