Impostazione di titolo, metatag e altre intestazioni HTML nella pagina master (VB)

di Scott Mitchell

Scarica il PDF

Esamina diverse tecniche per definire elementi head> assortiti <nella pagina master dalla pagina del contenuto.

Introduzione

Le nuove pagine master create in Visual Studio 2008 hanno, per impostazione predefinita, due controlli ContentPlaceHolder: uno denominato e situato nell'elemento e uno denominato headContentPlaceHolder1, inserito all'interno del <head> Web Form. Lo scopo di ContentPlaceHolder1 è definire un'area nel Web Form che può essere personalizzata in base a una pagina. head ContentPlaceHolder consente alle pagine di aggiungere contenuto personalizzato alla <head> sezione. (Naturalmente, questi due ContentPlaceHolder possono essere modificati o rimossi e altri ContentPlaceHolder possono essere aggiunti alla pagina master. La pagina master, , Site.masterattualmente include quattro controlli ContentPlaceHolder.

L'elemento HTML <head> funge da repository per informazioni sul documento della pagina Web che non fa parte del documento stesso. Sono incluse informazioni come il titolo della pagina Web, le meta-informazioni usate dai motori di ricerca o dai crawler interni e i collegamenti alle risorse esterne, ad esempio feed RSS, JavaScript e file CSS. Alcune di queste informazioni possono essere pertinenti a tutte le pagine del sito Web. Ad esempio, è possibile importare a livello globale gli stessi file CSS e JavaScript per ogni pagina ASP.NET. Tuttavia, esistono parti dell'elemento <head> che sono specifiche della pagina. Il titolo della pagina è un esempio primo.

In questa esercitazione viene illustrato come definire il markup di sezione globale e specifico <head> della pagina nella pagina master e nelle relative pagine di contenuto.

Esame della sezione della<head>pagina master

Il file di pagina master predefinito creato da Visual Studio 2008 contiene il markup seguente nella relativa <head> sezione:

<head runat="server">
 <title>Untitled Page</title>
 <asp:ContentPlaceHolder id="head" runat="server">
 </asp:ContentPlaceHolder>
</head>

Si noti che l'elemento <head> contiene un attributo, che indica che è un runat="server" controllo server (anziché HTML statico). Tutte le pagine ASP.NET derivano dalla Page classe, che si trova nello System.Web.UI spazio dei nomi. Questa classe contiene una Header proprietà che fornisce l'accesso all'area della <head> pagina. Usando la Header proprietà è possibile impostare il titolo di una pagina ASP.NET o aggiungere un markup aggiuntivo alla sezione di cui è stato eseguito <head> il rendering. È quindi possibile personalizzare l'elemento di una pagina del <head> contenuto scrivendo un bit di codice nel gestore eventi della Page_Load pagina. Viene esaminato come impostare a livello di codice il titolo della pagina nel passaggio 1.

Il markup illustrato nell'elemento <head> precedente include anche un controllo ContentPlaceHolder denominato head. Questo controllo ContentPlaceHolder non è necessario, poiché le pagine del contenuto possono aggiungere contenuto personalizzato all'elemento a livello di <head> codice. Tuttavia, in situazioni in cui una pagina del contenuto deve aggiungere markup statico all'elemento <head> perché il markup statico può essere aggiunto dichiarativo al controllo Contenuto corrispondente anziché a livello di codice.

Oltre all'elemento e head ContentPlaceHolder, l'elemento <title> della <head> pagina master deve contenere qualsiasi <head>markup a livello comune a tutte le pagine. Nel nostro sito Web tutte le pagine usano le regole CSS definite nel Styles.css file. Di conseguenza, è stato aggiornato l'elemento nell'esercitazione <head>Creazione di un layout Site-Wide con pagine master per includere un elemento corrispondente <link> . Di Site.master seguito è riportato il markup corrente <head> della pagina master.

<head runat="server">
 <title>Untitled Page</title>
 <asp:ContentPlaceHolder id="head" runat="server">
 </asp:ContentPlaceHolder>
 <link href="Styles.css" rel="stylesheet" type="text/css" />
</head>

Passaggio 1: Impostazione del titolo di una pagina contenuto

Il titolo della pagina Web viene specificato tramite l'elemento <title> . È importante impostare il titolo di ogni pagina su un valore appropriato. Quando si visita una pagina, il titolo viene visualizzato nella barra titolo del browser. Inoltre, quando si segnalibra una pagina, i browser usano il titolo della pagina come nome suggerito per il segnalibro. Inoltre, molti motori di ricerca mostrano il titolo della pagina durante la visualizzazione dei risultati della ricerca.

Nota

Per impostazione predefinita, Visual Studio imposta l'elemento <title> nella pagina master su "Pagina senza titolo". Analogamente, anche le nuove pagine ASP.NET sono <title> impostate su "Pagina senza titolo". Poiché può essere facile dimenticare di impostare il titolo della pagina su un valore appropriato, ci sono molte pagine su Internet con il titolo "Pagina senza titolo". La ricerca di pagine Web con questo titolo restituisce circa 2.460.000 risultati. Anche Microsoft è soggetto alla pubblicazione di pagine Web con il titolo "Pagina senza titolo". Al momento della scrittura, una ricerca Google ha segnalato 236 pagine Web nel dominio Microsoft.com.

Una pagina ASP.NET può specificare il titolo in uno dei modi seguenti:

  • Posizionando il valore direttamente all'interno dell'elemento <title>
  • Uso dell'attributo Title<%@ Page %> nella direttiva
  • Impostare a livello di codice la proprietà della Title pagina usando il codice come Page.Title="title" o Page.Header.Title="title".

Le pagine del contenuto non dispongono di un <title> elemento, come viene definito nella pagina master. Pertanto, per impostare il titolo di una pagina del contenuto, è possibile usare l'attributo <%@ Page %> della direttiva o impostarlo a livello di Title codice.

Impostazione del titolo della pagina in modo dichiarativo

Il titolo di una pagina del contenuto può essere impostato in modo dichiarativo tramite l'attributo Title della <%@ Page %> direttiva. Questa proprietà può essere impostata modificando direttamente la direttiva o tramite il <%@ Page %> Finestra Proprietà. Di seguito vengono esaminati entrambi gli approcci.

Nella visualizzazione Origine individuare la <%@ Page %> direttiva, che si trova nella parte superiore del markup dichiarativo della pagina. Direttiva <%@ Page %> per Default.aspx quanto segue:

<%@ Page Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" Title="Untitled Page" %>

La <%@ Page %> direttiva specifica gli attributi specifici della pagina usati dal motore di ASP.NET durante l'analisi e la compilazione della pagina. Include il file di pagina master, il percorso del file di codice e il relativo titolo, tra le altre informazioni.

Per impostazione predefinita, quando si crea una nuova pagina di contenuto Visual Studio imposta l'attributo Title su "Pagina senza titolo". Modificare Default.aspxl'attributo da Title "Pagina senza titolo" a "Esercitazioni pagina master" e quindi visualizzare la pagina tramite un browser. La figura 1 mostra la barra del titolo del browser, che riflette il nuovo titolo della pagina.

La barra del titolo del browser mostra ora

Figura 01: La barra del titolo del browser mostra ora "Esercitazioni pagina master" anziché "Pagina senza titolo"

Il titolo della pagina può essere impostato anche dal Finestra Proprietà. Nella Finestra Proprietà selezionare DOCUMENT nell'elenco a discesa per caricare le proprietà a livello di pagina, che include la Title proprietà. La figura 2 mostra la Finestra Proprietà dopo Title essere stata impostata su "Esercitazioni pagina master".

È possibile configurare il titolo dalla finestra Proprietà, troppo

Figura 02: è possibile configurare il titolo dalla finestra Proprietà, troppo

Impostazione del titolo della pagina a livello di codice

Il markup della pagina master viene convertito in un'istanza HtmlHead di <head runat="server"> classe quando la pagina viene eseguita dal motore di ASP.NET. La HtmlHead classe ha una Title proprietà il cui valore viene riflesso nell'elemento di cui è stato eseguito <title> il rendering. Questa proprietà è accessibile dalla classe Page.Header.Titlecode-behind di una pagina di ASP.NET tramite . Questa stessa proprietà può anche essere accessibile tramite Page.Title.

Per praticare l'impostazione del titolo della pagina a livello di codice, passare alla About.aspx classe code-behind della pagina e creare un gestore eventi per l'evento della Load pagina. Impostare quindi il titolo della pagina su "Esercitazioni pagina master :: Informazioni su :: data", dove la data è la data corrente. Dopo aver aggiunto questo codice, il Page_Load gestore eventi dovrebbe essere simile al seguente:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 Page.Title = String.Format("Master Page Tutorials :: About :: {0:d}", DateTime.Now)
End Sub

La figura 3 mostra la barra del titolo del browser quando si visita la About.aspx pagina.

Il titolo della pagina è impostato a livello di codice e include la data corrente

Figura 03: il titolo della pagina è impostato a livello di codice e include la data corrente

Passaggio 2: Assegnazione automatica di un titolo di pagina

Come illustrato nel passaggio 1, il titolo di una pagina può essere impostato in modo dichiarativo o a livello di codice. Se si dimentica di modificare in modo esplicito il titolo in un elemento più descrittivo, tuttavia, la pagina avrà il titolo predefinito "Pagina senza titolo". Idealmente, il titolo della pagina verrà impostato automaticamente per noi nel caso in cui non si specifica in modo esplicito il relativo valore. Ad esempio, se in fase di esecuzione il titolo della pagina è "Pagina senza titolo", è possibile che il titolo venga aggiornato automaticamente come il nome della pagina ASP.NET. La buona notizia è che con un po ' di lavoro iniziale è possibile avere automaticamente assegnato il titolo.

Tutte le pagine Web ASP.NET derivano dalla Page classe nello spazio dei nomi System.Web.UI. La Page classe definisce la funzionalità minima necessaria da una pagina ASP.NET ed espone proprietà essenziali come IsPostBack, IsValid, Requeste Response, tra molti altri. Spesso, ogni pagina in un'applicazione Web richiede funzionalità o funzionalità aggiuntive. Un modo comune per fornire questa operazione consiste nel creare una classe di pagina di base personalizzata. Una classe di pagina di base personalizzata è una classe creata che deriva dalla Page classe e include funzionalità aggiuntive. Dopo aver creato questa classe di base, è possibile avere le pagine ASP.NET derivate da essa (anziché dalla Page classe), offrendo così la funzionalità estesa alle pagine ASP.NET.

In questo passaggio viene creata una pagina di base che imposta automaticamente il titolo della pagina sul nome file della pagina ASP.NET se il titolo non è stato impostato in modo esplicito. Il passaggio 3 esamina l'impostazione del titolo della pagina in base alla mappa del sito.

Nota

Un esame approfondito della creazione e dell'uso di classi di pagina di base personalizzate è oltre l'ambito di questa serie di esercitazioni.

Creazione della classe pagina di base

La prima attività consiste nel creare una classe di pagina di base, ovvero una classe che estende la Page classe. Iniziare aggiungendo una App_Code cartella al progetto facendo clic con il pulsante destro del mouse sul nome del progetto nella Esplora soluzioni, scegliendo Aggiungi ASP.NET Cartella e quindi selezionando App_Code. Fare quindi clic con il pulsante destro del mouse sulla App_Code cartella e aggiungere una nuova classe denominata BasePage.vb. La figura 4 mostra la Esplora soluzioni dopo l'aggiunta della cartella e BasePage.vb della App_Code classe.

Aggiungere una cartella App_Code e una classe denominata BasePage

Figura 04: Aggiungere una App_Code cartella e una classe denominata BasePage

Nota

Visual Studio supporta due modalità di gestione dei progetti: Progetti siti Web e progetti applicazione Web. La App_Code cartella è progettata per essere usata con il modello di progetto sito Web. Se si usa il modello progetto applicazione Web, inserire la BasePage.vb classe in una cartella denominata diversa da App_Code, ad esempio Classes. Per altre informazioni su questo argomento, vedere Migrazione di un progetto di sito Web a un progetto applicazione Web.

Poiché la pagina di base personalizzata funge da classe di base per le classi code-behind delle pagine ASP.NET, deve estendere la Page classe.

Public Class BasePage
 Inherits System.Web.UI.Page

End Class

Ogni volta che viene richiesta una pagina ASP.NET, viene eseguita una serie di fasi, che culmina nella pagina richiesta di cui viene eseguito il rendering in HTML. È possibile accedere a una fase eseguendo l'override Page del metodo della OnEvent classe. Per la LoadComplete pagina di base viene impostato automaticamente il titolo se non è stato specificato in modo esplicito dalla fase (che, come si potrebbe aver indovinato, si verifica dopo la Load fase).

A questo scopo, eseguire l'override del metodo e immettere il OnLoadComplete codice seguente:

Protected Overrides Sub OnLoadComplete(ByVal e As EventArgs)
 ' Set the page's title, if necessary
 If String.IsNullOrEmpty(Page.Title) OrElse Page.Title = "Untitled Page" Then
 ' Determine the filename for this page
 Dim fileName As String = System.IO.Path.GetFileNameWithoutExtension(Request.PhysicalPath)

 Page.Title = fileName
 End If

 MyBase.OnLoadComplete(e)
End Sub

Il OnLoadComplete metodo inizia determinando se la Title proprietà non è ancora stata impostata in modo esplicito. Se la Title proprietà è Nothing, una stringa vuota o ha il valore "Pagina senza titolo", viene assegnato al nome file della pagina di ASP.NET richiesta. Il percorso fisico della pagina di ASP.NET richiesta, C:\MySites\Tutorial03\Login.aspxad esempio , è accessibile tramite la Request.PhysicalPath proprietà . Il Path.GetFileNameWithoutExtension metodo viene usato per estrarre solo la parte del nome file e questo nome file viene quindi assegnato alla Page.Title proprietà.

Nota

Vi invito a migliorare questa logica per migliorare il formato del titolo. Ad esempio, se il nome del file della pagina è Company-Products.aspx, il codice precedente produrrà il titolo "Company-Products", ma idealmente il trattino verrebbe sostituito con uno spazio, come in "Prodotti aziendali". Si consideri anche l'aggiunta di uno spazio ogni volta che è presente una modifica del caso. Vale a dire, è consigliabile aggiungere codice che trasforma il nome del file OurBusinessHours.aspx in un titolo di "Le nostre ore di lavoro".

Avere le pagine contenuto ereditano la classe pagina di base

È ora necessario aggiornare le pagine ASP.NET nel sito per derivare dalla pagina di base personalizzata (BasePage) anziché dalla Page classe. Per eseguire questa operazione, passare a ogni classe code-behind e modificare la dichiarazione di classe da:

Partial Class About
 Inherits System.Web.UI.Page
   ...
End Class

Con:

Partial Class About
 Inherits BasePage
   ...
End Class

Dopo aver eseguito questa operazione, visitare il sito tramite un browser. Se si visita una pagina il cui titolo è impostato in modo esplicito, ad esempio Default.aspx o About.aspx, viene usato il titolo specificato in modo esplicito. Se, tuttavia, si visita una pagina il cui titolo non è stato modificato dal valore predefinito ("Pagina senza titolo"), la classe pagina di base imposta il titolo sul nome del file della pagina.

La figura 5 mostra la MultipleContentPlaceHolders.aspx pagina visualizzata tramite un browser. Si noti che il titolo è esattamente il nome del file della pagina (meno l'estensione), "MultipleContentPlaceHolder".

Se un titolo non è specificato in modo esplicito, viene usato automaticamente il nome file della pagina

Figura 05: se un titolo non è specificato in modo esplicito, il nome file della pagina viene usato automaticamente (fare clic per visualizzare l'immagine a dimensioni complete)

Passaggio 3: Base del titolo della pagina nella mappa del sito

ASP.NET offre un framework affidabile della mappa del sito che consente agli sviluppatori di pagine di definire una mappa siti gerarchica in una risorsa esterna (ad esempio un file XML o una tabella di database) insieme ai controlli Web per visualizzare informazioni sulla mappa del sito,ad esempio i controlli SiteMapPath, Menu e TreeView.

La struttura della mappa del sito può essere accessibile a livello di codice anche dalla classe code-behind di una pagina di ASP.NET. In questo modo è possibile impostare automaticamente il titolo di una pagina sul titolo del nodo corrispondente nella mappa del sito. È possibile migliorare la BasePage classe creata nel passaggio 2 in modo da offrire questa funzionalità. Ma prima di tutto è necessario creare una mappa del sito per il sito.

Nota

Questa esercitazione presuppone che il lettore abbia già familiarità con ASP. Funzionalità della mappa del sito di NET. Per altre informazioni sull'uso della mappa del sito, consultare la serie di articoli multi-part esaminando ASP. Spostamento del sito di NET.

Creazione della mappa del sito

Il sistema della mappa del sito viene compilato in cima al modello del provider, che separa l'API mappa del sito dalla logica che serializza le informazioni sulla mappa del sito tra memoria e un archivio permanente. .NET Framework viene fornito con la classe, ovvero il XmlSiteMapProviderprovider predefinito della mappa del sito. Poiché il nome implica, XmlSiteMapProvider usa un file XML come archivio mappa del sito. Verrà usato questo provider per definire la mappa del sito.

Iniziare creando un file della mappa del sito nella cartella radice del sito Web denominata Web.sitemap. A tale scopo, fare clic con il pulsante destro del mouse sul nome del sito Web in Esplora soluzioni, scegliere Aggiungi nuovo elemento e selezionare il modello Mappa siti. Assicurarsi che il file sia denominato Web.sitemap e fare clic su Aggiungi.

Aggiungere un file denominato Web.sitemap alla cartella radice del sito Web

Figura 06: Aggiungere un file denominato Web.sitemap alla cartella radice del sito Web (fare clic per visualizzare l'immagine full-size)

Aggiungere il codice XML seguente al Web.sitemap file:

<?xml version="1.0" encoding="utf-8" ?>
<siteMap xmlns="http://schemas.microsoft.com/AspNet/SiteMap-File-1.0" >
 <siteMapNode url="~/Default.aspx" title="Home">
 <siteMapNode url="~/About.aspx" title="About the Author" />
 <siteMapNode url="~/MultipleContentPlaceHolders.aspx" title="Using Multiple ContentPlaceHolder Controls" />
 </siteMapNode>
</siteMap>

Questo XML definisce la struttura gerarchica della mappa del sito illustrata nella figura 7.

La mappa del sito è attualmente costituita da tre nodi mappa siti

Figura 07: La mappa del sito è attualmente composta da tre nodi mappa siti

Verrà aggiornata la struttura della mappa del sito nelle esercitazioni future quando si aggiungono nuovi esempi.

Aggiornamento della pagina master per includere controlli Web di spostamento

Dopo aver definito una mappa del sito, aggiornare la pagina master in modo da includere i controlli Web di spostamento. In particolare, aggiungere un controllo ListView alla colonna sinistra nella sezione Lezioni che esegue il rendering di un elenco non ordinato con un elemento elenco per ogni nodo definito nella mappa del sito.

Nota

Il controllo ListView è nuovo a ASP.NET versione 3.5. Se si usa una versione precedente di ASP.NET, usare invece il controllo Repeater.

Iniziare rimuovendo il markup elenco non ordinato esistente dalla sezione Lezioni. Trascinare quindi un controllo ListView dalla casella degli strumenti e rilasciarlo sotto l'intestazione Lezioni. ListView si trova nella sezione Dati della casella degli strumenti, insieme agli altri controlli di visualizzazione: GridView, DetailsView e FormView. Impostare la proprietà di ID ListView su LessonsList.

Dalla Configurazione guidata origine dati scegliere di associare ListView a un nuovo controllo SiteMapDataSource denominato LessonsDataSource. Il controllo SiteMapDataSource restituisce la struttura gerarchica dal sistema della mappa del sito.

Associare un controllo SiteMapDataSource al controllo LessonsList ListView

Figura 08: Associare un controllo SiteMapDataSource al controllo ListView LessonsList (fare clic per visualizzare un'immagine full-size)

Dopo aver creato il controllo SiteMapDataSource, è necessario definire i modelli di ListView in modo che venga eseguito il rendering di un elenco non ordinato con un elemento di elenco per ogni nodo restituito dal controllo SiteMapDataSource. Questa operazione può essere eseguita usando il markup del modello seguente:

<asp:ListView ID="LessonsList" runat="server" DataSourceID="LessonsDataSource">
 <LayoutTemplate>
 <ul>
 <asp:PlaceHolder runat="server" ID="itemPlaceholder" />
 </ul>
 </LayoutTemplate>
 
 <ItemTemplate>
 <li><asp:HyperLink runat="server" ID="lnkLesson" NavigateUrl='<%# Eval("Url") %>'
 Text='<%# Eval("Title") %>' /></li>
 </ItemTemplate>
</asp:ListView>

Genera LayoutTemplate il markup per un elenco non ordinato () mentre il ItemTemplate rendering di ogni elemento restituito da SiteMapDataSource come elemento di elenco (<ul>...</ul><li>) che contiene un collegamento alla lezione specifica.

Dopo aver configurato i modelli di ListView, visitare il sito Web. Come illustrato nella figura 9, la sezione Lezioni contiene un singolo elemento puntato, Home. Dove sono le lezioni Informazioni e uso di più controlli ContentPlaceHolder? SiteMapDataSource è progettato per restituire un set gerarchico di dati, ma il controllo ListView può visualizzare solo un singolo livello della gerarchia. Di conseguenza, viene visualizzato solo il primo livello di nodi della mappa del sito restituiti da SiteMapDataSource.

La sezione Lezioni contiene un singolo elemento elenco

Figura 09: La sezione Lezioni contiene un singolo elemento elenco (fare clic per visualizzare l'immagine full-size)

Per visualizzare più livelli, è possibile annidare più ListView all'interno di ItemTemplate. Questa tecnica è stata esaminata nell'esercitazione Master Pages and Site Navigation della serie di esercitazioni Sull'uso dei dati. Tuttavia, per questa serie di esercitazioni la mappa del sito conterrà solo due livelli: Home (il livello superiore); e ogni lezione come figlio di Home. Anziché creare un oggetto ListView annidato, è invece possibile indicare a SiteMapDataSource di non restituire il nodo iniziale impostandone la ShowStartingNode proprietà su False. L'effetto netto è che SiteMapDataSource inizia restituendo il secondo livello dei nodi della mappa del sito.

Con questa modifica, ListView visualizza gli elementi elenco per le lezioni About and Using Multiple ContentPlaceHolder Controls, ma omette un elemento puntato per Home. Per risolvere questo problema, è possibile aggiungere in modo esplicito un elemento puntato per Home in LayoutTemplate:

<LayoutTemplate>
 <ul>
 <li><asp:HyperLink runat="server" ID="lnkLesson"
 NavigateUrl="~/Default.aspx" Text="Home" /></li>
 <asp:PlaceHolder runat="server" ID="itemPlaceholder" />
 </ul>
</LayoutTemplate>

Configurando SiteMapDataSource per omettere il nodo iniziale e aggiungendo in modo esplicito un elemento elenco Home, la sezione Lezioni visualizza ora l'output previsto.

La sezione Lezioni contiene un elemento puntato per home e ogni nodo figlio

Figura 10: La sezione Lezioni contiene un elemento puntato per home e ogni nodo figlio (fare clic per visualizzare l'immagine full-size)

Impostazione del titolo in base alla mappa del sito

Con la mappa del sito sul posto, è possibile aggiornare BasePage la classe per usare il titolo specificato nella mappa del sito. Come abbiamo fatto nel passaggio 2, vogliamo usare solo il titolo del nodo della mappa del sito se il titolo della pagina non è stato impostato in modo esplicito dallo sviluppatore di pagina. Se la pagina richiesta non dispone di un titolo di pagina impostato in modo esplicito e non viene trovata nella mappa del sito, verrà eseguito il fallback all'uso del nome file della pagina richiesta (meno l'estensione), come illustrato nel passaggio 2. La figura 11 illustra questo processo decisionale.

In assenza di un titolo di pagina impostato in modo esplicito, viene usato il titolo del nodo mappa del sito corrispondente

Figura 11: in assenza di un titolo di pagina impostato in modo esplicito, viene usato il titolo del nodo mappa del sito corrispondente

Aggiornare il metodo della OnLoadComplete classe per includere il BasePage codice seguente:

Protected Overrides Sub OnLoadComplete(ByVal e As EventArgs)
 ' Set the page's title, if necessary
 If String.IsNullOrEmpty(Page.Title) OrElse Page.Title = "Untitled Page" Then
 ' Is this page defined in the site map?
 Dim newTitle As String = Nothing

 Dim current As SiteMapNode = SiteMap.CurrentNode
 If current IsNot Nothing Then
 newTitle = current.Title
 Else
 ' Determine the filename for this page
 newTitle = System.IO.Path.GetFileNameWithoutExtension(Request.PhysicalPath)
 End If

 Page.Title = newTitle
 End If

 MyBase.OnLoadComplete(e)
End Sub

Come in precedenza, il metodo inizia determinando se il OnLoadComplete titolo della pagina è stato impostato in modo esplicito. Se Page.Title è Nothing, una stringa vuota o viene assegnato il valore "Pagina senza titolo", il codice assegna automaticamente un valore a Page.Title.

Per determinare il titolo da usare, il codice inizia facendo riferimento alla SiteMapproprietà della CurrentNodeclasse. CurrentNode restituisce l'istanza SiteMapNode nella mappa del sito corrispondente alla pagina attualmente richiesta. Supponendo che la pagina attualmente richiesta venga trovata all'interno della mappa del sito, la SiteMapNodeproprietà viene Title assegnata al titolo della pagina. Se la pagina attualmente richiesta non è presente nella mappa del sito, CurrentNode restituisce Nothing e il nome file della pagina richiesto viene usato come titolo (come è stato fatto nel passaggio 2).

La figura 12 mostra la MultipleContentPlaceHolders.aspx pagina quando visualizzata tramite un browser. Poiché il titolo della pagina non è impostato in modo esplicito, viene invece usato il titolo del nodo mappa del sito corrispondente.

Il titolo della pagina di MultipleContentPlaceHolders.aspx viene estratto dalla mappa del sito

Figura 12: il titolo della pagina MultipleContentPlaceHolders.aspx viene estratto dalla mappa del sito

Passaggio 4: Aggiunta di altri markup Page-Specific alla<head>sezione

I passaggi 1, 2 e 3 hanno esaminato la personalizzazione dell'elemento <title> in base alla pagina. Oltre a <title>, la <head> sezione può contenere <meta> elementi ed <link> elementi. Come indicato in precedenza in questa esercitazione, Site.masterla <head> sezione include un <link> elemento a Styles.css. Poiché questo <link> elemento è definito all'interno della <head> pagina master, viene incluso nella sezione per tutte le pagine del contenuto. Ma come si passa all'aggiunta e <link> all'aggiunta <meta> di elementi in base alla pagina?

Il modo più semplice per aggiungere contenuto specifico della pagina alla <head> sezione consiste nel creare un controllo ContentPlaceHolder nella pagina master. È già disponibile un contentPlaceHolder (denominato head). Pertanto, per aggiungere markup personalizzato <head> , creare un controllo Contenuto corrispondente nella pagina e posizionare il markup.

Per illustrare l'aggiunta di markup personalizzato <head> a una pagina, è possibile includere un <meta> elemento di descrizione al set corrente di pagine di contenuto. L'elemento description fornisce una breve descrizione sulla pagina Web. La <meta> maggior parte dei motori di ricerca incorpora queste informazioni in qualche forma durante la visualizzazione dei risultati della ricerca.

Un <meta> elemento description ha il formato seguente:

<meta name="description" content="description of the web page" />

Per aggiungere questo markup a una pagina del contenuto, aggiungere il testo precedente al controllo Contenuto che esegue il mapping al ContentPlaceHolder della head pagina master. Ad esempio, per definire un <meta> elemento di descrizione per Default.aspx, aggiungere il markup seguente:

<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
 <meta name="description" content="Welcome to Scott Mitchell's Master Page Tutorials series." />
</asp:Content>

head Poiché contentPlaceHolder non si trova all'interno del corpo della pagina HTML, il markup aggiunto al controllo Contenuto non viene visualizzato nella visualizzazione Progettazione. Per visualizzare l'elemento <meta> descrizione visitare Default.aspx tramite un browser. Dopo il caricamento della pagina, visualizzare l'origine e notare che la <head> sezione include il markup specificato nel controllo Contenuto.

Prendere un momento per aggiungere <meta> elementi di descrizione a About.aspx, MultipleContentPlaceHolders.aspxe Login.aspx.

Aggiunta di markup a livello di codice all'area<head>

head ContentPlaceHolder consente di aggiungere in modo dichiarativo markup personalizzato all'area della <head> pagina master. Il markup personalizzato può anche essere aggiunto a livello di codice. Tenere presente che la Page proprietà della Header classe restituisce l'istanza HtmlHead definita nella pagina master ().<head runat="server">

La possibilità di aggiungere contenuto a livello di codice all'area <head> è utile quando il contenuto da aggiungere è dinamico. Forse si basa sull'utente che visita la pagina; forse viene eseguito il pull da un database. Indipendentemente dal motivo, è possibile aggiungere contenuto all'oggetto HtmlHead aggiungendo controlli alla raccolta Controls come segue:

' Programmatically add a <meta> element to the Header
Dim keywords As New HtmlMeta()
keywords.Name = "keywords"
keywords.Content = "master page,asp.net,tutorial"

Page.Header.Controls.Add(keywords)

Il codice precedente aggiunge l'elemento <meta> parole chiave all'area <head> , che fornisce un elenco delimitato da virgole di parole chiave che descrivono la pagina. Si noti che per aggiungere un tag si crea un'istanza <meta>HtmlMeta, impostarne Name le proprietà e Content e quindi aggiungerla alla Headerraccolta di .Controls Analogamente, per aggiungere a livello di codice un elemento, creare un <link>HtmlLink oggetto, impostarne le proprietà e quindi aggiungerlo alla raccolta di .HeaderControls

Nota

Per aggiungere markup arbitrario, creare un'istanza LiteralControlHeader, impostarne la Text proprietà e quindi aggiungerla alla raccolta di .Controls

Riepilogo

In questa esercitazione sono stati esaminati diversi modi per aggiungere <head> il markup dell'area in base a una pagina. Una pagina master deve includere un'istanza HtmlHead (<head runat="server">) con un ContentPlaceHolder. L'istanza consente alle pagine del contenuto di accedere <head> a livello di codice all'area e di impostare a livello di codice il titolo della pagina. Il HtmlHead controllo ContentPlaceHolder consente l'aggiunta di markup personalizzato alla <head> sezione dichiarativamente tramite un controllo 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. I revisori lead per questa esercitazione erano Zack Jones e Suchi Banerjee. Interessati a esaminare i prossimi articoli MSDN? In tal caso, lasciami una riga in mitchell@4GuysFromRolla.com.