Interazione con la pagina master dalla pagina di contenuto (C#)

di Scott Mitchell

Esamina come chiamare metodi, impostare proprietà e così via della pagina master dal codice nella pagina contenuto.

Introduzione

Nel corso delle ultime cinque esercitazioni abbiamo esaminato come creare una pagina master, definire le aree del contenuto, associare ASP.NET pagine a una pagina master e definire contenuti specifici della pagina. Quando un visitatore richiede una determinata pagina di contenuto, il markup del contenuto e delle pagine master viene fuso in fase di esecuzione, causando il rendering di una gerarchia di controllo unificata. Pertanto, abbiamo già visto un modo in cui la pagina master e una delle relative pagine di contenuto possono interagire: la pagina del contenuto specifica il markup per trasfusa nei controlli ContentPlaceHolder della pagina master.

Ciò che è ancora necessario esaminare è il modo in cui la pagina master e la pagina del contenuto possono interagire a livello di codice. Oltre a definire il markup per i controlli ContentPlaceHolder della pagina master, una pagina del contenuto può anche assegnare valori alle proprietà pubbliche della pagina master e richiamare i relativi metodi pubblici. Analogamente, una pagina master può interagire con le relative pagine di contenuto. Sebbene l'interazione a livello di codice tra un master e una pagina del contenuto sia meno comune dell'interazione tra i markup dichiarativi, esistono molti scenari in cui è necessaria tale interazione a livello di codice.

In questa esercitazione viene esaminato il modo in cui una pagina di contenuto può interagire a livello di codice con la relativa pagina master; nell'esercitazione successiva verrà illustrato come la pagina master può interagire in modo analogo con le pagine del contenuto.

Esempi di interazione a livello di codice tra una pagina contenuto e la relativa pagina master

Quando una determinata area di una pagina deve essere configurata in base a una pagina, viene usato un controllo ContentPlaceHolder. Ma quali sono le situazioni in cui la maggior parte delle pagine deve generare un determinato output, ma un numero ridotto di pagine deve personalizzarlo per visualizzare qualcos'altro? Uno di questi esempi, esaminato nell'esercitazione Su più ContentPlaceHolder e Contenuto predefinito , comporta la visualizzazione di un'interfaccia di accesso in ogni pagina. Anche se la maggior parte delle pagine deve includere un'interfaccia di accesso, deve essere eliminata per una manciata di pagine, ad esempio: la pagina di accesso principale (Login.aspx); la pagina Crea account e altre pagine accessibili solo agli utenti autenticati. L'esercitazione Su più ContentPlaceHolder e Contenuto predefinito ha illustrato come definire il contenuto predefinito per un ContentPlaceHolder nella pagina master e quindi come eseguirne l'override nelle pagine in cui il contenuto predefinito non era desiderato.

Un'altra opzione consiste nel creare una proprietà o un metodo pubblico all'interno della pagina master che indica se visualizzare o nascondere l'interfaccia di accesso. Ad esempio, la pagina master può includere una proprietà pubblica denominata ShowLoginUI il cui valore è stato usato per impostare la Visible proprietà del controllo Login nella pagina master. Tali pagine di contenuto in cui l'interfaccia utente di accesso deve essere eliminata potrebbero quindi impostare a livello di codice la ShowLoginUI proprietà su false.

Forse l'esempio più comune di interazione tra contenuto e pagina master si verifica quando i dati visualizzati nella pagina master devono essere aggiornati dopo che alcune azioni hanno traspirato nella pagina del contenuto. Si consideri una pagina master che include GridView che visualizza i cinque record aggiunti più di recente da una tabella di database specifica e che una delle relative pagine di contenuto include un'interfaccia per l'aggiunta di nuovi record alla stessa tabella.

Quando un utente visita la pagina per aggiungere un nuovo record, vede i cinque record aggiunti più di recente visualizzati nella pagina master. Dopo aver compilato i valori per le colonne del nuovo record, invia il modulo. Supponendo che GridView nella pagina master disponga della relativa EnableViewState proprietà impostata su true (impostazione predefinita), il relativo contenuto viene ricaricato dallo stato di visualizzazione e, di conseguenza, vengono visualizzati cinque stessi record anche se un record più recente è stato appena aggiunto al database. Questo può confondere l'utente.

Nota

Anche se si disabilita lo stato di visualizzazione di GridView in modo che venga ribinato all'origine dati sottostante in ogni postback, non verrà comunque visualizzato il record appena aggiunto perché i dati vengono associati a GridView in precedenza nel ciclo di vita della pagina rispetto al momento dell'aggiunta del nuovo record al database.

Per risolvere questo problema, in modo che il record appena aggiunto venga visualizzato nella pagina master di GridView nel postback, è necessario indicare a GridView di ribindare l'origine dati dopo l'aggiunta del nuovo record al database. Ciò richiede l'interazione tra il contenuto e le pagine master perché l'interfaccia per l'aggiunta del nuovo record (e i relativi gestori eventi) si trovano nella pagina del contenuto, ma GridView che deve essere aggiornata si trova nella pagina master.

Poiché l'aggiornamento della visualizzazione della pagina master da un gestore eventi nella pagina del contenuto è una delle esigenze più comuni per l'interazione tra contenuto e pagina master, verrà illustrato in modo più dettagliato questo argomento. Il download per questa esercitazione include un database di microsoft SQL Server 2005 Express Edition denominato NORTHWIND.MDF nella cartella del App_Data sito Web. Il database Northwind archivia le informazioni sul prodotto, sui dipendenti e sulle vendite per una società fittizia, Northwind Traders.

Passaggio 1 illustra come visualizzare i cinque prodotti aggiunti più di recente in una griglia nella pagina master. Il passaggio 2 crea una pagina di contenuto per l'aggiunta di nuovi prodotti. Il passaggio 3 illustra come creare proprietà e metodi pubblici nella pagina master e il passaggio 4 illustra come interfacciarsi a livello di codice con queste proprietà e metodi dalla pagina del contenuto.

Nota

Questa esercitazione non descrive le specifiche dell'uso dei dati in ASP.NET. I passaggi per configurare la pagina master per visualizzare i dati e la pagina del contenuto per l'inserimento dei dati sono ancora completi. Per un'analisi più approfondita della visualizzazione e dell'inserimento dei dati e dell'uso dei controlli SqlDataSource e GridView, consultare le risorse nella sezione Letture aggiuntive alla fine di questa esercitazione.

Passaggio 1: Visualizzazione dei cinque prodotti aggiunti più di recente nella pagina master

Aprire la Site.master pagina master e aggiungere un'etichetta e un controllo GridView all'oggetto leftContent<div>. Deselezionare la proprietà labelText, impostarne la EnableViewState proprietà su false e la ID relativa proprietà su ; impostare la proprietà gridView ID su GridMessageRecentProducts. Successivamente, dalla Designer, espandere lo smart tag di GridView e scegliere di associarlo a una nuova origine dati. In questo modo viene avviata la configurazione guidata origine dati. Poiché il database Northwind nella App_Data cartella è un database di Microsoft SQL Server, scegliere di creare sqlDataSource selezionando (vedere la figura 1); assegnare un nome a SqlDataSourceRecentProductsDataSource.

Associare GridView a un controllo SqlDataSource Denominato RecentProductsDataSource

Figura 01: Associare GridView a un controllo SqlDataSource denominato RecentProductsDataSource (Fare clic per visualizzare un'immagine a dimensioni complete)

Il passaggio successivo chiede di specificare il database a cui connettersi. Scegliere il NORTHWIND.MDF file di database dall'elenco a discesa e fare clic su Avanti. Poiché si tratta della prima volta che è stato usato questo database, la procedura guidata offrirà di archiviare il stringa di connessione in Web.config. Archiviare il stringa di connessione usando il nome NorthwindConnectionString.

Connettersi al database Northwind

Figura 02: Connettersi al database Northwind (Fare clic per visualizzare l'immagine full-size)

La procedura guidata Configura origine dati fornisce due mezzi per specificare la query usata per recuperare i dati:

  • Specificando un'istruzione SQL personalizzata o una stored procedure oppure
  • Selezionando una tabella o una vista e specificando le colonne da restituire

Poiché si vuole restituire solo i cinque prodotti aggiunti di recente, è necessario specificare un'istruzione SQL personalizzata. Usare la query SELECT seguente:

SELECT TOP 5 ProductName, UnitPrice FROM Products ORDER BY ProductID DESC

La TOP 5 parola chiave restituisce solo i primi cinque record della query. La Products chiave primaria della tabella, ProductID, è una IDENTITY colonna, che assicura che ogni nuovo prodotto aggiunto alla tabella avrà un valore maggiore rispetto alla voce precedente. Pertanto, l'ordinamento dei risultati in ProductID ordine decrescente restituisce i prodotti a partire da quelli creati più di recente.

Restituire i cinque prodotti aggiunti più di recente

Figura 03: Restituire i cinque prodotti aggiunti più di recente (fare clic per visualizzare l'immagine full-size)

Dopo aver completato la procedura guidata, Visual Studio genera due BoundFields per gridView per visualizzare i ProductName campi e UnitPrice restituiti dal database. A questo punto il markup dichiarativo della pagina master deve includere markup simile al seguente:

<asp:Label ID="GridMessage" runat="server" EnableViewState="false"></asp:Label>
<asp:GridView ID="RecentProducts" runat="server" AutoGenerateColumns="False"
 DataSourceID="RecentProductsDataSource">
 <Columns> 
 <asp:BoundField DataField="ProductName" HeaderText="ProductName" 
 SortExpression="ProductName"/> 
 <asp:BoundField DataField="UnitPrice" HeaderText="UnitPrice"
 SortExpression="UnitPrice"/> 
 </Columns> 
</asp:GridView> 

<asp:SqlDataSource ID="RecentProductsDataSource" runat="server" 
 ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
 SelectCommand="SELECT TOP 5 ProductName, UnitPrice FROM Products ORDER BY ProductID DESC"> 
</asp:SqlDataSource>

Come si può notare, il markup contiene: il controllo Web Label (GridMessage); GridView RecentProducts, con due BoundFields e un controllo SqlDataSource che restituisce i cinque prodotti aggiunti più di recente.

Con questo controllo GridView creato e il relativo controllo SqlDataSource configurato, visitare il sito Web tramite un browser. Come illustrato nella figura 4, verrà visualizzata una griglia nell'angolo inferiore sinistro che elenca i cinque prodotti aggiunti più di recente.

GridView visualizza i cinque prodotti aggiunti più di recente

Figura 04: GridView visualizza i cinque prodotti aggiunti più di recente (fare clic per visualizzare l'immagine full-size)

Nota

È possibile pulire l'aspetto di GridView. Alcuni suggerimenti includono la formattazione del valore visualizzato UnitPrice come valuta e l'uso di colori e tipi di carattere di sfondo per migliorare l'aspetto della griglia.

Passaggio 2: Creazione di una pagina contenuto per aggiungere nuovi prodotti

L'attività successiva consiste nel creare una pagina di contenuto da cui un utente può aggiungere un nuovo prodotto alla Products tabella. Aggiungere una nuova pagina di contenuto alla Admin cartella denominata AddProduct.aspx, assicurandosi di associarla alla Site.master pagina master. La figura 5 mostra la Esplora soluzioni dopo l'aggiunta di questa pagina al sito Web.

Aggiungere una nuova pagina ASP.NET alla cartella Amministrazione

Figura 05: Aggiungere una nuova pagina ASP.NET alla Admin cartella(Fare clic per visualizzare l'immagine a dimensioni complete)

Si ricordi che nell'esercitazione Specificare titolo, meta tag e altre intestazioni HTML nell'esercitazione Pagina master è stata creata una classe di pagina di base personalizzata denominata BasePage che ha generato il titolo della pagina se non è stata impostata in modo esplicito. Passare alla AddProduct.aspx classe code-behind della pagina e derivarla da BasePage (anziché da System.Web.UI.Page).

Aggiornare infine il Web.sitemap file in modo da includere una voce per questa lezione. Aggiungere il markup seguente sotto per la lezione Problemi di denominazione dell'ID <siteMapNode> di controllo:

<siteMapNode url="~/Admin/AddProduct.aspx" title="Content to Master Page Interaction" />

Come illustrato nella figura 6, l'aggiunta di questo <siteMapNode> elemento viene riflessa nell'elenco Lezioni.

Tornare a AddProduct.aspx. Nel controllo Contenuto per MainContent ContentPlaceHolder aggiungere un controllo DetailsView e assegnarne NewProductil nome . Associare DetailsView a un nuovo controllo SqlDataSource denominato NewProductDataSource. Come per SqlDataSource nel passaggio 1, configurare la procedura guidata in modo che usi il database Northwind e scegliere di specificare un'istruzione SQL personalizzata. Poiché DetailsView verrà usato per aggiungere elementi al database, è necessario specificare sia un'istruzione SELECT che un'istruzione INSERT . Usare la query seguente SELECT :

SELECT ProductName, UnitPrice FROM Products

Quindi, dalla scheda INSERT aggiungere l'istruzione seguente INSERT :

INSERT INTO Products(ProductName, UnitPrice) VALUES(@ProductName, @UnitPrice)

Dopo aver completato la procedura guidata, passare allo smart tag di DetailsView e selezionare la casella di controllo "Abilita inserimento". In questo modo viene aggiunto un commandField a DetailsView con la relativa ShowInsertButton proprietà impostata su true. Poiché questo detailsView verrà usato esclusivamente per l'inserimento DefaultMode dei dati, impostare la proprietà DetailsView su Insert.

Questo è tutto ciò che occorre fare. Testiamo questa pagina. Visitare AddProduct.aspx un browser, immettere un nome e un prezzo (vedere la figura 6).

Aggiungere un nuovo prodotto al database

Figura 06: Aggiungere un nuovo prodotto al database (fare clic per visualizzare l'immagine full-size)

Dopo aver digitato il nome e il prezzo per il nuovo prodotto, fare clic sul pulsante Inserisci. In questo modo il modulo viene postbackato. Al postback, l'istruzione del INSERT controllo SqlDataSource viene eseguita. I due parametri vengono popolati con i valori immessi dall'utente nei due controlli TextBox di DetailsView. Sfortunatamente, non esiste alcun feedback visivo che si è verificato un inserimento. Sarebbe bello visualizzare un messaggio, confermando che è stato aggiunto un nuovo record. Lascio questo come esercizio per il lettore. Dopo l'aggiunta di un nuovo record da DetailsView nella pagina master vengono comunque visualizzati gli stessi cinque record di prima; non include il record appena aggiunto. Si esaminerà come risolvere questo problema nei prossimi passaggi.

Nota

Oltre all'aggiunta di un feedback visivo che l'inserimento ha avuto esito positivo, è consigliabile aggiornare anche l'interfaccia di inserimento di DetailsView per includere la convalida. Attualmente non è disponibile alcuna convalida. Se un utente immette un valore non valido per il UnitPrice campo, ad esempio "Troppo costoso", verrà generata un'eccezione al postback quando il sistema tenta di convertire tale stringa in un decimale. Per altre informazioni sulla personalizzazione dell'interfaccia di inserimento, vedere l'esercitazione Personalizzazione dell'interfaccia di modifica dei dati dalla serie di esercitazioni Sull'uso dei dati.

Passaggio 3: Creazione di proprietà e metodi pubblici nella pagina master

Nel passaggio 1 è stato aggiunto un controllo Web etichetta denominato GridMessage sopra GridView nella pagina master. Questa etichetta è destinata facoltativamente a visualizzare un messaggio. Ad esempio, dopo aver aggiunto un nuovo record alla Products tabella, potrebbe essere necessario visualizzare un messaggio che legge: "ProductName è stato aggiunto al database". Anziché hard-code il testo per questa etichetta nella pagina master, potrebbe essere necessario che il messaggio sia personalizzabile dalla pagina del contenuto.

Poiché il controllo Etichetta viene implementato come variabile membro protetto all'interno della pagina master non può essere accessibile direttamente dalle pagine del contenuto. Per usare l'etichetta all'interno di una pagina master dalla pagina del contenuto (o, per tale motivo, qualsiasi controllo Web nella pagina master) è necessario creare una proprietà pubblica nella pagina master che espone il controllo Web o funge da proxy da cui è possibile accedere uno dei relativi proprietà. Aggiungere la sintassi seguente alla classe code-behind della pagina master per esporre la proprietà dell'etichetta Text :

public string GridMessageText 
{ 
    get
    { 
        return GridMessage.Text; 
    } 
    set 
    {
        GridMessage.Text = value; 
    }
}

Quando viene aggiunto un nuovo record alla Products tabella da una pagina del contenuto, RecentProducts GridView nella pagina master deve essere ribinato all'origine dati sottostante. Per ribinare il metodo DataBind GridView. Poiché GridView nella pagina master non è accessibile a livello di codice alle pagine del contenuto, è necessario creare un metodo pubblico nella pagina master che, quando chiamato, ribinta i dati in GridView. Aggiungere il metodo seguente alla classe code-behind della pagina master:

public void RefreshRecentProductsGrid() 
{ 
    RecentProducts.DataBind();
}

Con la proprietà e RefreshRecentProductsGrid il GridMessageText metodo sul posto, qualsiasi pagina del contenuto può impostare a livello di codice o leggere il valore della GridMessage proprietà dell'etichetta Text o ribinare i dati in RecentProducts GridView. Il passaggio 4 esamina come accedere alle proprietà e ai metodi pubblici della pagina master da una pagina del contenuto.

Nota

Non dimenticare di contrassegnare le proprietà e i metodi della pagina master come public. Se non si indicano in modo esplicito queste proprietà e metodi come public, non saranno accessibili dalla pagina del contenuto.

Passaggio 4: Chiamata dei membri pubblici della pagina master da una pagina contenuto

Ora che la pagina master ha le proprietà e i metodi pubblici necessari, è possibile richiamare queste proprietà e metodi dalla pagina del AddProduct.aspx contenuto. In particolare, è necessario impostare la proprietà della GridMessageText pagina master e chiamare RefreshRecentProductsGrid il relativo metodo dopo l'aggiunta del nuovo prodotto al database. Tutti i controlli Web dati ASP.NET generano eventi immediatamente prima e dopo il completamento di varie attività, che semplificano l'esecuzione di un'azione a livello di codice prima o dopo l'attività. Ad esempio, quando l'utente finale fa clic sul pulsante Inserisci di DetailsView, nel postback detailsView genera ItemInserting l'evento prima di iniziare il flusso di lavoro di inserimento. Inserisce quindi il record nel database. In seguito, DetailsView genera l'evento ItemInserted . Pertanto, per usare la pagina master dopo l'aggiunta del nuovo prodotto, creare un gestore eventi per l'evento ItemInserted DetailsView.

Esistono due modi in cui una pagina del contenuto può interfacciarsi a livello di codice con la relativa pagina master:

  • Uso della Page.Master proprietà, che restituisce un riferimento di tipo libero alla pagina master o
  • Specificare il tipo di pagina master della pagina o il percorso del file tramite una @MasterType direttiva. Questo aggiunge automaticamente una proprietà fortemente tipizzata alla pagina denominata Master.

Esaminiamo entrambi gli approcci.

Uso della proprietà di tipo genericoPage.Master

Tutte le pagine Web ASP.NET devono derivare dalla Page classe, che si trova nello System.Web.UI spazio dei nomi. La Page classe include una proprietà che restituisce un Master riferimento alla pagina master della pagina. Se la pagina non dispone di una pagina Master master, restituisce null.

La Master proprietà restituisce un oggetto di tipo MasterPage (situato anche nello System.Web.UI spazio dei nomi) che è il tipo di base da cui derivano tutte le pagine master. Pertanto, per usare proprietà o metodi pubblici definiti nella pagina master del sito Web, è necessario eseguire il MasterPage cast dell'oggetto restituito dalla Master proprietà al tipo appropriato. Poiché il file Site.masterdella pagina master è stato denominato , la classe code-behind è stata denominata Site. Di conseguenza, il codice seguente esegue il cast della Page.Master proprietà in un'istanza della classe Site.

// Cast the loosely-typed Page.Master property and then set the GridMessageText property 
Site myMasterPage = Page.Master as Site;

Dopo aver eseguito il cast della proprietà tipizzata Page.Master in modo libero al tipo, è possibile fare riferimento alle proprietà e ai Site metodi specifici del sito. Come illustrato nella figura 7, la proprietà GridMessageText pubblica viene visualizzata nell'elenco a discesa IntelliSense.

IntelliSense mostra le proprietà e i metodi pubblici della pagina master

Figura 07: IntelliSense mostra le proprietà e i metodi pubblici della pagina master (fare clic per visualizzare l'immagine full-size)

Nota

Se è stato denominato il file MasterPage.master della pagina master, il nome della classe code-behind della pagina master è MasterPage. Ciò può causare un codice ambiguo quando si esegue il cast dal tipo System.Web.UI.MasterPage alla MasterPage classe. In breve, è necessario qualificare completamente il tipo a cui si esegue il cast, che può essere un po ' difficile quando si usa il modello di progetto sito Web. Il mio suggerimento sarebbe quello di assicurarsi che quando si crea la pagina master si chiama qualcosa di diverso da MasterPage.master o, anche meglio, creare un riferimento fortemente tipizzato alla pagina master.

Creazione di un riferimento Strongly-Typed con la@MasterTypedirettiva

Se si guarda attentamente, è possibile notare che la classe code-behind di una pagina ASP.NET è una classe parziale (si noti la partial parola chiave nella definizione della classe). Le classi parziali sono state introdotte in C# e Visual Basic with.NET Framework 2.0 e, in un breve termine, consentono di definire i membri di una classe in più file. Il file di classe code-behind, AddProduct.aspx.csad esempio , contiene il codice creato dallo sviluppatore di pagine. Oltre al codice, il motore di ASP.NET crea automaticamente un file di classe separato con proprietà e gestori eventi in che convertono il markup dichiarativo nella gerarchia di classi della pagina.

La generazione automatica del codice che si verifica ogni volta che viene visitata una pagina di ASP.NET apre la strada per alcune possibilità piuttosto interessanti e utili. Nel caso di pagine master, se si indica al motore di ASP.NET quale pagina master viene usata dalla pagina del contenuto genera una proprietà fortemente tipizzata Master per noi.

Usare la direttiva per informare il @MasterType motore di ASP.NET del tipo di pagina master della pagina del contenuto. La @MasterType direttiva può accettare il nome del tipo della pagina master o il relativo percorso di file. Per specificare che la AddProduct.aspx pagina usa Site.master come pagina master, aggiungere la direttiva seguente all'inizio di AddProduct.aspx:

<%@ MasterType VirtualPath="~/Site.master" %>

Questa direttiva indica al motore di ASP.NET di aggiungere un riferimento fortemente tipizzato alla pagina master tramite una proprietà denominata Master. Con la @MasterType direttiva sul posto, è possibile chiamare le Site.master proprietà e i metodi pubblici della pagina master direttamente tramite la Master proprietà senza cast.

Nota

Se si omette la @MasterType direttiva, la sintassi Page.Master e Master restituisce la stessa cosa: un oggetto di tipo libero nella pagina master della pagina principale della pagina. Se si include la @MasterType direttiva, restituisce Master un riferimento fortemente tipizzato alla pagina master specificata. Page.Master, tuttavia, restituisce comunque un riferimento di tipo libero. Per un'analisi più approfondita del motivo per cui si tratta del caso e del modo in cui la Master proprietà viene costruita quando la @MasterType direttiva è inclusa, vedere la voce @MasterTypedi blog di K. Scott Allen in ASP.NET 2.0.

Aggiornamento della pagina master dopo l'aggiunta di un nuovo prodotto

Dopo aver appreso come richiamare le proprietà e i metodi pubblici di una pagina master da una pagina del contenuto, è possibile aggiornare la AddProduct.aspx pagina in modo che la pagina master venga aggiornata dopo l'aggiunta di un nuovo prodotto. All'inizio del passaggio 4 è stato creato un gestore eventi per l'evento del ItemInserting controllo DetailsView, che viene eseguito immediatamente dopo l'aggiunta del nuovo prodotto al database. Aggiungere il codice seguente al gestore eventi:

protected void NewProduct_ItemInserted(object sender, DetailsViewInsertedEventArgs e) 
{ 
    // Cast the loosely-typed Page.Master property and then set the GridMessageText property 
    Site myMasterPage = Page.Master as Site; 
    myMasterPage.GridMessageText = string.Format("{0} added to grid...", e.Values["ProductName"]); 
    // Use the strongly-typed Master property 
    Master.RefreshRecentProductsGrid();
}

Il codice precedente usa sia la proprietà tipizzata che la proprietà fortemente tipizzata Page.MasterMaster . Si noti che la GridMessageText proprietà è impostata su "ProductName aggiunto alla griglia..." I valori del prodotto appena aggiunti sono accessibili tramite la e.Values raccolta. Come si può notare, il valore appena aggiunto ProductName è accessibile tramite e.Values["ProductName"].

La figura 8 mostra la AddProduct.aspx pagina immediatamente dopo l'aggiunta di un nuovo prodotto - Scott's Soda - al database. Si noti che il nome del prodotto appena aggiunto è indicato nell'etichetta della pagina master e che GridView è stato aggiornato per includere il prodotto e il relativo prezzo.

Etichetta della pagina master e GridView Mostra il prodotto Just-Added

Figura 08: Etichetta della pagina master e GridView Mostra il prodotto Just-Added (Fare clic per visualizzare l'immagine full-size)

Riepilogo

Idealmente, una pagina master e le relative pagine di contenuto sono completamente separate tra loro e non richiedono alcun livello di interazione. Anche se le pagine master e le pagine del contenuto devono essere progettate con tale obiettivo, esistono diversi scenari comuni in cui una pagina del contenuto deve interfacciarsi con la relativa pagina master. Uno dei motivi più comuni è incentrato sull'aggiornamento di una particolare parte della visualizzazione della pagina master in base a un'azione che traspirò nella pagina del contenuto.

La buona notizia è che è relativamente semplice avere una pagina di contenuto a livello di codice con la relativa pagina master. Iniziare creando proprietà o metodi pubblici nella pagina master che incapsulano le funzionalità che devono essere richiamate da una pagina del contenuto. Nella pagina del contenuto accedere alle proprietà e ai metodi della pagina master tramite la proprietà tipizzata o usare la @MasterType direttiva per creare un riferimento fortemente tipizzato Page.Master alla pagina master.

Nell'esercitazione successiva viene esaminato come avere la pagina master a livello di codice con una delle relative pagine di contenuto.

Programmazione felice!

Altre informazioni

Per altre informazioni sugli argomenti illustrati in questa esercitazione, vedere le risorse seguenti:

Informazioni sull'autore

Scott Mitchell, autore di più libri ASP/ASP.NET e fondatore di 4GuysFromRolla.com, ha lavorato con le tecnologie Web Microsoft dal 1998. Scott lavora come consulente indipendente, allenatore e scrittore. Il suo ultimo libro è Sams Teach Yourself ASP.NET 3,5 in 24 ore. Scott può essere raggiunto all'indirizzo mitchell@4GuysFromRolla.com o tramite il suo blog all'indirizzo http://ScottOnWriting.NET.

Grazie speciali

Questa serie di esercitazioni è stata esaminata da molti revisori utili. Il revisore principale per questa esercitazione era Zack Jones. Interessati a esaminare i prossimi articoli MSDN? In tal caso, lasciami una riga in mitchell@4GuysFromRolla.com