The Dark Side of .NET Programming

Il blog di Michele Aponte
posts - 212, comments - 145, trackbacks - 16

Tipizzare la MasterPage

Quanti di voi hanno avuto la necessità di accedere dal code-behind di una pagina aspx ad un controllo presente nella masterpage legata alla pagina? Immagino molti. La soluzione più intuitiva è sicuramente il FindControl sulla proprietà Master, che non tradisce mai:

   1: using System;
   2: using System.Web.UI.WebControls;
   3:  
   4: namespace WebApplication6
   5: {
   6:     public partial class _Default : System.Web.UI.Page
   7:     {
   8:         protected void Page_Load(object sender, EventArgs e)
   9:         {
  10:             Menu masterMenu = this.Master.FindControl("NavigationMenu") as Menu;
  11:         }
  12:     }
  13: }

Esiste però una tecnica che vi permette di accedere in maniera semplice al contenuto della master page: il MasterType.

image

Impostando questa direttiva potete istruire la vostra pagina sull’identità (il tipo) della masterpage collegata, tipizzandone la visibilità ed evitando così eventuali cast. Comunque se volete accedere ai controlli della Master (che hanno visibilità protected) dovrete comunque esporli con una property. Prendendo ad esempio il menu della master page del template web di asp.net 4 ci basta esporlo con una property pubblica:

   1: using System;
   2: using System.Web.UI.WebControls;
   3:  
   4: namespace WebApplication6
   5: {
   6:     public partial class SiteMaster : System.Web.UI.MasterPage
   7:     {
   8:         public Menu MainMenu { get { return this.NavigationMenu; } }
   9:  
  10:         protected void Page_Load(object sender, EventArgs e)
  11:         {
  12:         }
  13:     }
  14: }

A quel punto aggiungere una voce al menu dalle vostre pagine diventa banalmente:

   1: using System;
   2: using System.Web.UI.WebControls;
   3:  
   4: namespace WebApplication6
   5: {
   6:     public partial class _Default : System.Web.UI.Page
   7:     {
   8:         protected void Page_Load(object sender, EventArgs e)
   9:         {
  10:             this.Master.MainMenu.Items.Add(new MenuItem("Nuova Voce Menu"));
  11:         }
  12:     }
  13: }

Con l’ovvio risultato:

image

-- Michele

Print | posted on domenica 25 luglio 2010 00:26 |

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET