Sdílet prostřednictvím


Zadání názvu, metaznaček a dalších hlaviček HTML na stránce předlohy (VB)

Scott Mitchell

Stáhnout PDF

Hledá různé techniky pro definování různých <prvků hlav na> stránce předlohy ze stránky obsahu.

Úvod

Nové stránky předlohy vytvořené v sadě Visual Studio 2008 mají ve výchozím nastavení dva ovládací prvky ContentPlaceHolder: jeden s názvem heada umístěný v elementu <head> a jeden s názvem ContentPlaceHolder1, umístěný ve webovém formuláři. Účelem ContentPlaceHolder1 příkazu je definovat oblast ve webovém formuláři, kterou lze přizpůsobit stránku po stránce. ContentPlaceHolder head umožňuje stránkám přidat do oddílu <head> vlastní obsah. (Tyto dva ContentPlaceHolders lze samozřejmě upravit nebo odebrat a na stránku předlohy lze přidat další ContentPlaceHolder. Naše stránka předlohy Site.masterv současné době obsahuje čtyři ovládací prvky ContentPlaceHolder.)

Element HTML <head> slouží jako úložiště informací o dokumentu webové stránky, který není součástí samotného dokumentu. Patří sem informace, jako je název webové stránky, metainformátory používané vyhledávacími weby nebo interními prohledávacími moduly a odkazy na externí zdroje, jako jsou informační kanály RSS, javascriptové soubory a soubory CSS. Některé z těchto informací mohou být relevantní pro všechny stránky na webu. Můžete například chtít globálně importovat stejná pravidla CSS a soubory JavaScriptu pro každou ASP.NET stránku. Existují však části elementu <head> , které jsou specifické pro stránku. Hlavním příkladem je název stránky.

V tomto kurzu prozkoumáme, jak definovat globální značky oddílu a značky oddílu specifické pro <head> danou stránku na stránce předlohy a na stránkách jejího obsahu.

Zkoumání oddílu stránky předlohy<head>

Výchozí soubor stránky předlohy vytvořený sadou Visual Studio 2008 obsahuje následující kód v jeho <head> oddílu:

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

Všimněte si, že <head> element obsahuje runat="server" atribut, který označuje, že se jedná o serverový ovládací prvek (nikoli statický kód HTML). Všechny ASP.NET stránky jsou odvozeny Page od třídy, která je umístěna System.Web.UI v oboru názvů . Tato třída obsahuje Header vlastnost , která poskytuje přístup k oblasti stránky <head> . Header Pomocí vlastnosti můžeme nastavit název stránky ASP.NET nebo do vykresleného oddílu přidat další značky<head>. Pak je možné přizpůsobit prvek stránky obsahu tak, že <head> do obslužné rutiny události stránky Page_Load napíšete trochu kódu. V kroku 1 prozkoumáme, jak nastavit název stránky prostřednictvím kódu programu.

Kód zobrazený v elementu <head> výše obsahuje také ContentPlaceHolder ovládací prvek s názvem head. Tento ovládací prvek ContentPlaceHolder není nutný, protože stránky obsahu mohou přidat vlastní obsah do <head> prvku programově. Je to ale užitečné v situacích, kdy stránka obsahu potřebuje k elementu <head> přidat statický kód, protože statické značky je možné přidat do odpovídajícího ovládacího prvku obsahu deklarativně místo programově.

Kromě elementu <title> a head ContentPlaceHolder by měl element stránky <head> předlohy obsahovat všechny <head>značky -level, které jsou společné pro všechny stránky. Na našem webu všechny stránky používají pravidla CSS definovaná Styles.css v souboru. V důsledku toho jsme aktualizovali <head> prvek v kurzu Vytvoření rozložení Site-Wide se stránkami předlohy tak, aby zahrnoval odpovídající <link> prvek. Aktuální <head> revize naší Site.master stránky předlohy jsou zobrazeny níže.

<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>

Krok 1: Nastavení názvu stránky obsahu

Název webové stránky je určen prostřednictvím elementu <title> . Je důležité nastavit název každé stránky na odpovídající hodnotu. Při návštěvě stránky se její název zobrazí v záhlaví prohlížeče. Kromě toho prohlížeče při vytváření záložek stránky používají název stránky jako navrhovaný název záložky. Mnoho vyhledávacích webů také zobrazuje název stránky při zobrazení výsledků hledání.

Poznámka

Ve výchozím nastavení sada Visual Studio nastaví <title> element na stránce předlohy na "Stránka bez názvu". Podobně mají nové stránky ASP.NET nastavenou <title> také na "Stránka bez názvu". Protože může být snadné zapomenout nastavit název stránky na odpovídající hodnotu, existuje na internetu mnoho stránek s názvem "Stránka bez názvu". Hledání webových stránek s tímto názvem na Googlu vrátí přibližně 2 460 000 výsledků. Dokonce i Microsoft je náchylný k publikování webových stránek s názvem "Stránka bez názvu". V době psaní tohoto textu nahlásilo vyhledávání Google 236 takových webových stránek v Microsoft.com doméně.

Stránka ASP.NET může zadat název jedním z následujících způsobů:

  • Umístěním hodnoty přímo do elementu <title>
  • Použití atributu Title v direktivě <%@ Page %>
  • Programové nastavení vlastnosti stránky Title pomocí kódu, jako je nebo Page.Title="title"Page.Header.Title="title".

Stránky obsahu nemají <title> element, protože je definovaný na stránce předlohy. Proto k nastavení názvu stránky obsahu můžete buď použít <%@ Page %> atribut direktivy Title , nebo ho nastavit programově.

Deklarativní nastavení názvu stránky

Název stránky obsahu lze nastavit deklarativně prostřednictvím atributu Titledirektivy<%@ Page %> . Tuto vlastnost lze nastavit přímou úpravou direktivy <%@ Page %> nebo prostřednictvím okno Vlastnosti. Pojďme se podívat na oba přístupy.

V zobrazení Zdroj vyhledejte direktivu <%@ Page %> , která je v horní části deklarativního kódu stránky. Direktiva <%@ Page %> pro Default.aspx :

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

Direktiva <%@ Page %> určuje atributy specifické pro stránku používané modulem ASP.NET při analýze a kompilaci stránky. To zahrnuje soubor stránky předlohy, umístění souboru s kódem a jeho název a další informace.

Ve výchozím nastavení sada Visual Studio při vytváření nové stránky obsahu nastaví Title atribut na "Stránka bez názvu". Title Změňte Default.aspxatribut z "Stránka bez názvu" na "Kurzy stránky předlohy" a pak zobrazte stránku v prohlížeči. Na obrázku 1 je záhlaví prohlížeče, které odráží nový název stránky.

V záhlaví prohlížeče se teď místo

Obrázek 01: Záhlaví prohlížeče teď místo "Stránky bez názvu" zobrazuje "Kurzy stránky předlohy"

Název stránky může být také nastaven z okno Vlastnosti. V okno Vlastnosti vyberte z rozevíracího seznamu DOKUMENT a načtěte vlastnosti na úrovni stránky, které vlastnost obsahujíTitle. Obrázek 2 znázorňuje okno Vlastnosti po Title nastavení na "Kurzy stránky předlohy".

Název můžete nakonfigurovat také v okně Vlastnosti.

Obrázek 02: Název můžete nakonfigurovat také v okně Vlastnosti.

Programové nastavení názvu stránky

Značky stránky <head runat="server"> předlohy se přeloží do HtmlHead instance třídy , když je stránka vykreslena modulem ASP.NET. Třída HtmlHeadTitle vlastnost , jejíž hodnota se odráží v vykreslení <title> elementu. Tato vlastnost je přístupná z třídy kódu na pozadí ASP.NET stránky prostřednictvím Page.Header.Title. Stejná vlastnost je přístupná také přes Page.Title.

Pokud si chcete procvičovat programové nastavení názvu stránky, přejděte na About.aspx třídu kódu na pozadí stránky a vytvořte obslužnou rutinu události pro událost stránky Load . Dále nastavte název stránky na "Kurzy stránky předlohy :: O aplikaci :: datum", kde datum je aktuální datum. Po přidání tohoto kódu by vaše Page_Load obslužná rutina události měla vypadat nějak takto:

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

Obrázek 3 znázorňuje záhlaví prohlížeče při návštěvě About.aspx stránky.

Název stránky je nastavený prostřednictvím kódu programu a obsahuje aktuální datum.

Obrázek 03: Název stránky je nastaven programově a zahrnuje aktuální datum

Krok 2: Automatické přiřazení názvu stránky

Jak jsme viděli v kroku 1, název stránky se dá nastavit deklarativně nebo programově. Pokud ale zapomenete explicitně změnit název na něco popisnějšího, bude mít vaše stránka výchozí název Stránka bez názvu. V ideálním případě by se název stránky pro nás nastavil automaticky v případě, že explicitně nezadáme její hodnotu. Pokud je například za běhu název stránky "Stránka bez názvu", můžeme chtít, aby se automaticky aktualizoval tak, aby byl stejný jako název souboru ASP.NET stránky. Dobrou zprávou je, že s trochou počáteční práce je možné název přiřadit automaticky.

Všechny ASP.NET webové stránky jsou odvozeny od Page třídy v oboru názvů System.Web.UI. Třída Page definuje minimální funkčnost, kterou ASP.NET stránka potřebuje, a kromě mnoha dalších zveřejňuje základní vlastnosti, jako jsou IsPostBack, IsValidRequest, a Response. Často se stává, že každá stránka ve webové aplikaci vyžaduje další funkce. Běžným způsobem, jak to zajistit, je vytvořit vlastní základní třídu stránky. Vlastní třída základní stránky je třída, kterou vytvoříte a která je odvozena z Page třídy a obsahuje další funkce. Jakmile je tato základní třída vytvořena, můžete z ní odvodit ASP.NET stránky (nikoli Page z třídy), a nabídnout tak rozšířené funkce pro vaše ASP.NET stránky.

V tomto kroku vytvoříme základní stránku, která automaticky nastaví název stránky na název souboru ASP.NET stránky, pokud název nebyl explicitně nastaven. Krok 3 se zabývá nastavením názvu stránky na základě mapy webu.

Poznámka

Důkladná kontrola vytváření a používání vlastních tříd základní stránky je nad rámec této série kurzů.

Vytvoření třídy základní stránky

Naším prvním úkolem je vytvořit základní třídu stránky, což je třída, která rozšiřuje Page třídu . Začněte tím, že App_Code do projektu přidáte složku tak, že kliknete pravým tlačítkem na název projektu v Průzkumník řešení, zvolíte Přidat ASP.NET složku a pak vyberete App_Code. Potom klikněte pravým tlačítkem na App_Code složku a přidejte novou třídu s názvem BasePage.vb. Obrázek 4 znázorňuje Průzkumník řešení po App_Code přidání složky a BasePage.vb třídy.

Přidání složky App_Code a třídy s názvem BasePage

Obrázek 04: Přidání App_Code složky a třídy s názvem BasePage

Poznámka

Visual Studio podporuje dva režimy řízení projektů: projekty webu a projekty webových aplikací. Složka App_Code je navržená pro použití s modelem projektu webu. Pokud používáte model projektu webové aplikace, umístěte BasePage.vb třídu do složky s názvem jiného než App_Code, například Classes. Další informace k tomuto tématu najdete v tématu Migrace projektu webu do projektu webové aplikace.

Vzhledem k tomu, že vlastní základní stránka slouží jako základní třída pro třídy kódu na pozadí ASP.NET stránek, musí třídu rozšířit Page .

Public Class BasePage
 Inherits System.Web.UI.Page

End Class

Pokaždé, když je požadována ASP.NET stránka, prochází řadou fází, které vyvrcholí vykreslením požadované stránky do HTML. Do fáze se můžeme připojit přepsáním Page metody třídy OnEvent . Pro naši základní stránku nastavíme automaticky název, pokud není explicitně určen LoadComplete fází (což, jak jste možná uhodli, nastane po Load fázi).

Chcete-li toho dosáhnout, přepište metodu OnLoadComplete a zadejte následující kód:

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

Metoda OnLoadComplete začíná určením, zda Title vlastnost ještě nebyla explicitně nastavena. Title Pokud je Nothingvlastnost , prázdný řetězec nebo má hodnotu "Stránka bez názvu", je přiřazena k názvu požadované ASP.NET stránky. Fyzická cesta k požadované stránce ASP.NET , C:\MySites\Tutorial03\Login.aspxnapříklad , je přístupná prostřednictvím Request.PhysicalPath vlastnosti . Metoda Path.GetFileNameWithoutExtension se používá k vytažení pouze části názvu souboru a tento název souboru je pak přiřazen vlastnosti Page.Title .

Poznámka

Zvu vás, abyste tuto logiku vylepšili a vylepšili tak formát názvu. Pokud je Company-Products.aspxnapříklad název stránky , výše uvedený kód vytvoří název "Produkty společnosti", ale v ideálním případě by byla pomlčka nahrazena mezerou, jako je tomu v části "Firemní produkty". Zvažte také přidání mezery při každé změně případu. To znamená, že zvažte přidání kódu, který transformuje název souboru OurBusinessHours.aspx na název "Naše pracovní doba".

Zdědit základní třídu stránky obsahu

Teď musíme aktualizovat stránky ASP.NET na našem webu tak, aby byly odvozeny z vlastní základní stránky (BasePage) místo Page z třídy. Chcete-li toho dosáhnout, přejděte na každou třídu kódu na pozadí a změňte deklaraci třídy z:

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

Do:

Partial Class About
 Inherits BasePage
   ...
End Class

Až to uděláte, navštivte web přes prohlížeč. Pokud navštívíte stránku, jejíž název je explicitně nastavený, například Default.aspx nebo About.aspx, použije se explicitně zadaný název. Pokud však navštívíte stránku, jejíž název nebyl změněn z výchozího ("Stránka bez názvu"), základní třída stránky nastaví název na název stránky.

Obrázek 5 znázorňuje MultipleContentPlaceHolders.aspx stránku při zobrazení v prohlížeči. Všimněte si, že název je přesně název stránky (bez přípony) MultipleContentPlaceHolders.

Pokud není název explicitně zadán, název souboru stránky se automaticky použije.

Obrázek 05: Pokud název není explicitně zadán, název souboru stránky se automaticky použije (kliknutím zobrazíte obrázek v plné velikosti).

Krok 3: Vytvoření názvu stránky na mapě webu

ASP.NET nabízí robustní architekturu map webů, která vývojářům stránek umožňuje definovat hierarchickou mapu webu v externím prostředku (například v souboru XML nebo databázové tabulce) spolu s webovými ovládacími prvky pro zobrazení informací o mapě webu (například ovládací prvky SiteMapPath, Menu a TreeView).

Ke struktuře mapy webu lze přistupovat také programově z třídy kódu na pozadí ASP.NET stránky. Tímto způsobem můžeme automaticky nastavit název stránky na název odpovídajícího uzlu v mapě webu. Pojďme vylepšit třídu vytvořenou BasePage v kroku 2 tak, aby tuto funkci nabízí. Nejdřív ale musíme vytvořit mapu webu pro náš web.

Poznámka

V tomto kurzu se předpokládá, že čtenář už má zkušenosti s ASP. Funkce mapy webu pro net Další informace o používání mapy webu najdete v mé sérii vícedílných článků Zkoumání asp. Navigace na webu v NET.

Vytvoření mapy webu

Systém mapy webu je sestaven na základě modelu zprostředkovatele, který odděluje rozhraní API mapy webu od logiky serializace informací o mapě webu mezi pamětí a trvalým úložištěm. Rozhraní .NET Framework se dodává s XmlSiteMapProvider třídou, což je výchozí poskytovatel mapy webu. Jak už název napovídá, XmlSiteMapProvider používá soubor XML jako úložiště map webu. Pojďme tohoto zprostředkovatele použít k definování mapy webu.

Začněte vytvořením souboru mapy webu v kořenové složce webu s názvem Web.sitemap. Chcete-li toho dosáhnout, klikněte pravým tlačítkem na název webu v Průzkumník řešení, zvolte Přidat novou položku a vyberte šablonu Mapa webu. Ujistěte se, že má soubor název Web.sitemap , a klikněte na Přidat.

Přidání souboru Web.sitemap do kořenové složky webu

Obrázek 06: Přidání souboru s názvem Web.sitemap do kořenové složky webu (kliknutím zobrazíte obrázek v plné velikosti)

Do souboru přidejte následující kód XML Web.sitemap :

<?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>

Tento kód XML definuje hierarchickou strukturu mapy webu zobrazenou na obrázku 7.

Mapa webu se v současné době skládá ze tří uzlů mapy webu.

Obrázek 07: Mapa webu se v současné době skládá ze tří uzlů mapy webu

Strukturu mapy webu budeme aktualizovat v budoucích kurzech, jakmile budeme přidávat nové příklady.

Aktualizace stránky předlohy tak, aby zahrnovala webové ovládací prvky navigace

Teď, když máme definovanou mapu webu, aktualizujeme stránku předlohy tak, aby zahrnovala navigační webové ovládací prvky. Konkrétně přidáme ovládací prvek ListView do levého sloupce v části Lekce, který vykreslí neuspořádaný seznam s položkou seznamu pro každý uzel definovaný v mapě webu.

Poznámka

Ovládací prvek ListView je v ASP.NET verze 3.5 nový. Pokud používáte předchozí verzi ASP.NET, použijte místo toho ovládací prvek Repeater.

Začněte odebráním existujícího neuspořádaného seznamu z oddílu Lekce. Dále přetáhněte ovládací prvek ListView ze sady nástrojů a přesuňte ho pod nadpis Lekce. ListView se nachází v části Data panelu nástrojů spolu s dalšími ovládacími prvky zobrazení: GridView, DetailsView a FormView. Vlastnost ListView nastavte ID na LessonsList.

V Průvodci konfigurací zdroje dat zvolte vytvořit vazbu objektu ListView na nový ovládací prvek SiteMapDataSource s názvem LessonsDataSource. Ovládací prvek SiteMapDataSource vrátí hierarchickou strukturu ze systému mapování lokality.

Vytvoření vazby ovládacího prvku SiteMapDataSource k ovládacímu prvku LessonsList ListView

Obrázek 08: Vytvoření vazby ovládacího prvku SiteMapDataSource k ovládacímu prvku LessonsList ListView (kliknutím zobrazíte obrázek v plné velikosti)

Po vytvoření ovládacího prvku SiteMapDataSource musíme definovat šablony ListView tak, aby vykresloval neuspořádaný seznam s položkou seznamu pro každý uzel vrácený ovládacím prvku SiteMapDataSource. K tomu můžete použít následující značky šablony:

<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>

Vygeneruje LayoutTemplate kód pro neuspořádaný seznam (<ul>...</ul>), zatímco ItemTemplate vykreslí každou položku vrácenou serverem SiteMapDataSource jako položku seznamu (<li>), která obsahuje odkaz na konkrétní lekci.

Po konfiguraci šablon ListView navštivte web. Jak ukazuje obrázek 9, oddíl Lekce obsahuje jednu položku s odrážkami– Domů. Kde jsou lekce o ovládacích prvcích About a Using Multiple ContentPlaceHolder? SiteMapDataSource je navržen tak, aby vracel hierarchickou sadu dat, ale ListView ovládací prvek může zobrazit pouze jednu úroveň hierarchie. V důsledku toho se zobrazí pouze první úroveň uzlů mapy webu vrácených SiteMapDataSource.

Oddíl Lekce obsahuje jednu položku seznamu.

Obrázek 09: Oddíl Lekce obsahuje jednu položku seznamu (kliknutím zobrazíte obrázek v plné velikosti)

Pokud chcete zobrazit více úrovní, mohli bychom vnořit více objektů ListView v rámci objektu ItemTemplate. Tato technika byla prozkoumána v kurzu Stránky předlohy a navigace na webu mého kurzu Práce s daty. V této sérii kurzů však bude mapa webu obsahovat pouze dvě úrovně: Home (nejvyšší úroveň); a každou lekci jako dítě Domova. Místo vytváření vnořeného Objektu ListView můžeme dát pokyn SiteMapDataSource, aby nevrátil počáteční uzel nastavením jeho ShowStartingNode vlastnosti na False. Čistý efekt spočívá v tom, že SiteMapDataSource začíná vrácením druhé vrstvy uzlů mapy webu.

Po této změně ListView zobrazí položky odrážek pro lekce O aplikaci a Použití více ovládacích prvků ContentPlaceHolder, ale vynechá položku odrážky pro Domovskou stránku. Abychom tento problém napravili, můžeme explicitně přidat položku s odrážkou pro domovskou stránku v :LayoutTemplate

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

Když nakonfigurujete SiteMapDataSource tak, aby vynechal počáteční uzel, a explicitně přidáte položku s odrážkou Domů, zobrazí se v části Lessons (Lekce) zamýšlený výstup.

Oddíl Lekce obsahuje odrážkovou položku pro domovský a každý podřízený uzel.

Obrázek 10: Oddíl Lekce obsahuje odrážkovou položku pro domovský a podřízený uzel (kliknutím zobrazíte obrázek v plné velikosti).

Nastavení názvu na základě mapy webu

Když je mapa webu na místě, můžeme naši BasePage třídu aktualizovat tak, aby používala název zadaný v mapě webu. Stejně jako v kroku 2 chceme název uzlu mapy webu použít jenom v případě, že vývojář stránky název stránky explicitně nenastavil. Pokud požadovaná stránka nemá explicitně nastavený název stránky a nenalezne se v mapě webu, vrátíme se k použití názvu požadované stránky (bez přípony), jak jsme to udělali v kroku 2. Tento rozhodovací proces znázorňuje obrázek 11.

Při absenci explicitně nastaveného názvu stránky se použije název odpovídajícího uzlu mapy webu.

Obrázek 11: Při absenci explicitně nastaveného názvu stránky se použije název odpovídajícího uzlu mapy webu.

Aktualizujte metodu BasePage třídy tak, OnLoadComplete aby zahrnovala následující kód:

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

Stejně jako dříve metoda začíná určením, OnLoadComplete zda byl název stránky explicitně nastaven. Pokud Page.Title je Nothingprázdný řetězec nebo má přiřazenou hodnotu "Stránka bez názvu", kód automaticky přiřadí hodnotu .Page.Title

K určení názvu, který se má použít, začíná kód odkazováním na SiteMap vlastnost třídyCurrentNode. CurrentNode SiteMapNode vrátí instanci v mapě webu, která odpovídá aktuálně požadované stránce. Za předpokladu, že se aktuálně požadovaná stránka nachází v mapě webu, SiteMapNodeje k názvu stránky přiřazena vlastnost 's Title . Pokud aktuálně požadovaná stránka není v mapě webu, CurrentNode vrátí Nothing se a název požadované stránky se použije jako název (jak bylo provedeno v kroku 2).

Obrázek 12 znázorňuje MultipleContentPlaceHolders.aspx stránku při prohlížení v prohlížeči. Vzhledem k tomu, že název této stránky není explicitně nastavený, použije se místo toho odpovídající název jejího uzlu mapy webu.

Název stránky MultipleContentPlaceHolders.aspx se načítá z mapy webu.

Obrázek 12: Název stránky MultipleContentPlaceHolders.aspx je nahrán z mapy webu

Krok 4: Přidání dalších Page-Specific značek do oddílu<head>

Kroky 1, 2 a 3 se podívaly na přizpůsobení elementu <title> na stránce po stránce. Kromě <title>toho <head> může oddíl obsahovat <meta> prvky a <link> prvky. Jak je uvedeno dříve v tomto kurzu, Site.masterčást obsahuje <head><link> element do Styles.css. Vzhledem k tomu, že tento <link> prvek je definován v rámci stránky předlohy, je součástí oddílu <head> pro všechny stránky obsahu. Jak ale můžeme přidávat <meta> prvky na <link> stránku po stránce?

Nejjednodušší způsob, jak do oddílu <head> přidat obsah specifický pro stránku, je vytvořit na stránce předlohy ovládací prvek ContentPlaceHolder. Takový contentPlaceHolder (pojmenovaný) headuž máme . Chcete-li tedy přidat vlastní <head> značky, vytvořte na stránce odpovídající ovládací prvek Obsahu a umístěte ho tam.

Abychom si ilustrovali přidání vlastních <head> značek na stránku, zahrňme <meta> do aktuální sady stránek obsahu element description. Element <meta> description poskytuje stručný popis webové stránky. Většina vyhledávacích webů tyto informace při zobrazení výsledků hledání nějakým způsobem začleňuje.

Element <meta> description má následující tvar:

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

Chcete-li přidat tento kód na stránku obsahu, přidejte výše uvedený text do ovládacího prvku Obsah, který se mapuje na ContentPlaceHolder stránky předlohy head . Pokud chcete například definovat <meta> element description pro Default.aspx, přidejte následující kód:

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

Vzhledem k tomu, head že ContentPlaceHolder není v těle stránky HTML, kód přidaný do ovládacího prvku Obsah se nezobrazí v návrhovém zobrazení. Pokud chcete zobrazit <meta> element description, přejděte Default.aspx do prohlížeče. Po načtení stránky zobrazte zdroj a všimněte si, že <head> oddíl obsahuje značky zadané v ovládacím prvku Obsah.

Chvíli si udělejte přidání <meta> prvků popisu do About.aspx, MultipleContentPlaceHolders.aspxa Login.aspx.

Přidávání značek do<head>oblasti prostřednictvím kódu programu

ContentPlaceHolder head nám umožňuje deklarativně přidat vlastní značky do oblasti stránky předlohy <head> . Vlastní revize je možné přidat také prostřednictvím kódu programu. Vzpomeňte si PageHeader, že vlastnost třídy vrací HtmlHead instanci definovanou na stránce předlohy ().<head runat="server">

Možnost programově přidávat obsah do <head> oblasti je užitečná, pokud je obsah, který se má přidat, dynamický. Možná je to založené na tom, že uživatel navštíví stránku; Možná se to načítá z databáze. Bez ohledu na důvod můžete do objektu HtmlHead přidat obsah přidáním ovládacích prvků do jeho Controls kolekce, například takto:

' 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)

Výše uvedený kód přidá <meta> do <head> oblasti prvek keywords, který poskytuje seznam klíčových slov, která popisují stránku s oddělovači. Všimněte si, že pokud chcete přidat <meta> značku, vytvoříte HtmlMeta instanci, nastavíte její Name vlastnosti a Content vlastnosti a pak ji přidáte do HeaderControls kolekce . Podobně pokud chcete přidat prvek prostřednictvím kódu <link> programu, vytvořte HtmlLink objekt, nastavte jeho vlastnosti a pak ho HeaderControls přidejte do kolekce .

Poznámka

Pokud chcete přidat libovolné značky, vytvořte LiteralControl instanci, nastavte její Text vlastnost a pak ji přidejte do HeaderControls kolekce .

Souhrn

V tomto kurzu jsme se podívali na různé způsoby, jak přidat <head> značky oblastí po jednotlivých stránkách. Stránka předlohy by měla obsahovat HtmlHead instanci (<head runat="server">) s objektem ContentPlaceHolder. Instance HtmlHead umožňuje stránkám obsahu programově přistupovat k <head> oblasti a deklarativně a programově nastavit název stránky. Ovládací prvek ContentPlaceHolder umožňuje deklarativní přidání vlastních značek do oddílu <head> prostřednictvím ovládacího prvku Obsah.

Šťastné programování!

Další čtení

Další informace o tématech probíraných v tomto kurzu najdete v následujících zdrojích informací:

O autorovi

Scott Mitchell, autor několika knih o ASP/ASP.NET a zakladatel 4GuysFromRolla.com, pracuje s webovými technologiemi Microsoftu od roku 1998. Scott pracuje jako nezávislý konzultant, školitel a spisovatel. Jeho nejnovější kniha je Sams Teach Yourself ASP.NET 3,5 za 24 hodin. Scotta můžete zastihnout na mitchell@4GuysFromRolla.com nebo prostřednictvím jeho blogu na http://ScottOnWriting.NETadrese .

Zvláštní poděkování

Tato série kurzů byla zkontrolována mnoha užitečnými recenzenty. Hlavními recenzenty pro tento kurz byli Zack Jones a Suchi Banerjee. Chcete si projít moje nadcházející články na WEBU MSDN? Pokud ano, dejte mi čáru na mitchell@4GuysFromRolla.comadresu .