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