Le MasterPages sono una delle funzionalità che più apprezzo dei ASP.NET 
2.0, ancora più che i vari Membership / Profile / Whatever provider.
Le apprezzo perchè ma maggior parte dei lavori che mi trovo a fare sono siti 
"consumer" con centinaia di pagine: le masterpages riducuno notevolmente il 
lavoro, soprattutto dei web designer, ogni volta che si deve cambiare anche solo 
minimamente la gabbia grafica di impaginazione.
Ma come fare per modificare a run-time un controllo che è stato inserito 
nella pagina all'interno di un ContentPlaceHolder della MasterPage?
/* Ottengo il ContentPlaceHolder che contiene il controllo da accedere */
ContentPlaceHolder footerHolder = (ContentPlaceHolder)Page.Master.FindControl("footer");
/* Lancio la FindControl dal ContentPlaceHolder appena recuperato*/
controls.footer footer = (controls.footer)footerHolder.FindControl("footerCtl");
Questo codice si applica ad una master page con la seguente struttura:
<%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Main.master.cs" Inherits="Main" %>
<%@ Register Src="~/controls/footer.ascx" TagName="footer" TagPrefix="esp" %>
<head runat="server">
  <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />
  <link rel="stylesheet" href="css/main.css" type="text/css" />
</head>
<body>
    <form id="form1" runat="server">
    <div id="Container">
        <asp:ContentPlaceHolder ID="maincontent" runat="server">
        </asp:ContentPlaceHolder>
    </div>
    
    <hr />
    
    <asp:ContentPlaceHolder ID="footer" runat="server">
        <esp:footer runat="server" id="footerCtl" />
    </asp:ContentPlaceHolder>
    </form>
</body>
</html>
Non è Rocket Science, ma mi ci è voluto un po' (forse anche colpa 
dei 29° che ci sono in ufficio) per capire il percorso giusto per accedere 
al contollo da una pagina basata sulla Main.Master
powered by IMHO 1.3
		
			posted @ mercoledì 26 luglio 2006 14:35