lunedì 5 marzo 2012

ASP.NET: Empowering le pagine master

È possibile utilizzare le pagine master solo per strutturare le pagine. In alternativa è possibile integrare nella vostra applicazione con codice personalizzato che le vostre pagine di contenuti può accedere.
Oltre a utilizzare le pagine master per fornire una struttura comune per le vostre pagine, è anche possibile abilitare le pagine master con il codice. Nel caso più semplice, è possibile avere un controllo sulla vostra pagina master che riflette la pagina di contenuto che è attualmente visualizzato - un "Titolo pagina" box, per esempio, che visualizza un nome fissato dal contenuto della pagina corrente. Ma se si desidera aggiungere del codice al tuo sito per eseguire la stessa operazione su ogni pagina del sito (vagliare le voci ai controlli su ogni pagina, per esempio), un posto si potrebbe mettere che il codice si trova nella pagina master.
Da pagina master al contenuto della pagina 
primo luogo, la brutta notizia: Dal codice nella pagina master, non è possibile accedere alla pagina di contenuto attualmente visualizzato, almeno, non come un oggetto Page. È possibile, tuttavia, accedere ai controlli che la pagina di contenuto ha messo in ContentPlaceHolders della pagina master.


Il modo più semplice per accedere ai controlli aggiunti alla tua pagina master è attraverso un insieme di proprietà per la tua pagina master per ogni ContentPlaceHolder nella pagina master. Queste proprietà sono date un nome basato sul ContentControlId ContentPlaceHolder di. Se, per esempio, avete un ContentPlaceHolder chiamato messaggi sulla pagina, è possibile accedere ai controlli in esso contenuti con un codice come questo:
For Each ctrl In Me.Messages.Controls
    '... Il controllo dei processi ...
  Prossimo
Per elaborare tutti i controlli sulla pagina, si potrebbe essere tentati di utilizzare la raccolta ContentPlaceHolders della pagina master. Tuttavia, non contiene una raccolta di oggetti ContentPlaceHolder, contiene una raccolta dei nomi degli oggetti ContentPlaceHolder che sarà poi possibile utilizzare il metodo FindControl per elaborare tutti i ContentPlaceHolder reale.
Mettendo insieme per creare un metodo che elabora tutti i controlli che una pagina di contenuto aggiunto alla tua pagina master, è necessario scrivere codice simile al seguente:
  Public Sub ProcessAllControls
    Cph As ContentPlaceHolder
    Per ogni nome As String In Me.ContentPlaceHolders
      cph = Me.FindControl (Nome)
      For Each ctrl As Control In cph.Controls
        '... Il controllo dei processi ...
      Prossimo
    Prossimo
  End Sub
Non devi mettere quel codice in un metodo, naturalmente, si può inserire il codice negli eventi della pagina master come si farebbe con una pagina di contenuto standard. La pagina master genera gli stessi eventi come pagina di contenuto, con una sola eccezione: La pagina master non viene generato un evento PreInit. Eventi della pagina master sempre il fuoco dopo gli eventi della pagina di contenuto (ad esempio, viene generato l'evento Init della pagina di contenuto, quindi evento Init della pagina master). Vi è, ancora una volta, una sola eccezione: La pagina Master Unload viene generato l'evento, prima della pagina di contenuto Unload event.However, mettendo il codice in un metodo consente di controllare, dalla tua pagina di contenuto, quando questo codice viene eseguito.
Dalla pagina di contenuto a Pagina master 
Mentre non si può davvero accedere a una pagina di contenuto da una pagina master, è possibile accedere a una pagina master da una pagina di contenuto. Questo diventa utile se si aggiungono le proprietà e metodi per il MasterPage che è quindi possibile accedere dalle pagine di contenuti. Per esempio, questa proprietà personalizzata, aggiunto a una pagina master, aggiorna un controllo sulla pagina master:
  Proprietà PageTitle Public () As String
    Ottenere
      Torna Me.PageTitleLabel.Text
    End Get
    Set (ByVal value As String)
      Me.PageTitleLabel.Text = valore
    End Set
  End Property

  mp.PageTitle = "Customer immagine"
Per accedere a tale proprietà, il contenuto delle pagine deve innanzitutto accedere alla pagina master tramite la proprietà MasterPage della pagina di contenuto. Tuttavia, questo restituisce la classe generica per il Master Page, e la vostra pagina di contenuto viene visualizzato dalla pagina master specifica che contiene le proprietà personalizzate o metodi.Tuttavia, è possibile eseguire il cast dell'oggetto restituito dalla proprietà MasterPage al tipo di pagina master con codice come questo:
Mp As MyMaster 

mp = CType (Me.Master, MyMaster)
Dopo la fusione il riferimento MasterPage, è possibile aggiungere codice nella tua pagina di contenuto a utilizzare qualsiasi metodo o proprietà personalizzate nella pagina Master. Questo codice utilizza la proprietà personalizzata PageTitle per aggiornare il controllo PagetTitleLabel della pagina master:
mp.PageTitle = "My Page"
Allo stesso modo, il mio metodo personalizzato per elaborare tutti i controlli sul codice della pagina può essere eseguito dalla pagina di contenuto simile al seguente:
mp.ProcessAllControls
Come potete vedere, le pagine master non devono essere semplici repository per i controlli comuni. Invece, è possibile integrare il proprio codice nella tua pagina master di renderla parte integrante dei processi dell'applicazione.

Nessun commento:

Posta un commento