Sdílet prostřednictvím


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

Scott Mitchell

Stáhnout PDF

Prohlédne si různé techniky definování různých <prvků hlavy> 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 pojmenovaný head a umístěný v elementu <head> a jeden s názvem ContentPlaceHolder1, umístěný ve webovém formuláři. Účelem je ContentPlaceHolder1 definovat oblast ve webovém formuláři, kterou lze přizpůsobit na základě stránky po stránce. ContentPlaceHolder head umožňuje stránkám přidat do oddílu <head> vlastní obsah. (Samozřejmě, tyto dva ContentPlaceHolders lze upravit nebo odebrat, a další ContentPlaceHolder mohou být přidány na stránku předlohy. Naše stránka Site.masterpředlohy má v současné době čtyři ovládací prvky ContentPlaceHolder.)

Element HTML <head> slouží jako úložiště pro informace 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, JavaScript 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 se podíváme na to, jak definovat globální značky a značky oddílu specifické pro <head> stránku na stránce předlohy a na stránkách jejího obsahu.

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

Výchozí soubor stránky předlohy vytvořený sadou Visual Studio 2008 obsahuje ve své <head> části následující kód:

<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 (místo statického HTML). Všechny ASP.NET stránky jsou odvozeny Page z 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 přidat další značky do vykresleného <head> oddílu. Potom je možné přizpůsobit prvek stránky obsahu tak, že <head> do obslužné rutiny Page_Load události stránky napíšete trochu kódu. V kroku 1 prozkoumáme, jak programově nastavit název stránky.

Značka 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řidávat vlastní obsah do elementu <head> programově. Je to užitečné, ale v situacích, kdy stránka obsahu potřebuje přidat statické značky k elementu <head> , protože statické značky lze přidat do odpovídajícího ovládacího prvku Content deklarativně místo programově.

Kromě elementu <title> a hlavního ContentPlaceHolder by měl element stránky předlohy <head> obsahovat všechny <head>značky -level, které jsou společné pro všechny stránky. Na našem webu používají všechny stránky 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. Site.master Aktuální <head> revize stránky předlohy je zobrazena 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. Při vytváření záložek stránky navíc prohlížeče 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> prvek 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". Vzhledem k tomu, že můžete snadno 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 vyhledávání Google nahlásilo 236 takových webových stránek v Microsoft.com doméně.

Stránka ASP.NET může určit 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 Page.Title="title" nebo Page.Header.Title="title".

Stránky obsahu nemají <title> prvek, 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 deklarativně nastavit prostřednictvím Title atributu direktivy<%@ 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í značky stránky. Direktiva <%@ Page %> pro Default.aspx :

<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" 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 kódu 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. Obrázek 1 znázorňuje záhlaví prohlížeče, který odráží nový název stránky.

Záhlaví prohlížeče teď zobrazuje

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

Název stránky může být také nastaven z okno Vlastnosti. V okno Vlastnosti vyberte v rozevíracím seznamu DOKUMENT a načtěte vlastnosti na úrovni stránky, včetně Title vlastnosti. 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

Při vykreslení stránky <head runat="server"> předlohy strojem HtmlHead ASP.NET se přeloží do instance třídy. Třída HtmlHeadTitle vlastnost , jejíž hodnota se odráží v vykreslené <title> element. 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 také přístupná přes Page.Title.

Pokud chcete programově nastavit název 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 :: About :: date", kde datum je aktuální datum. Po přidání tohoto kódu by měla Page_Load obslužná rutina události vypadat nějak takto:

protected void Page_Load(object sender, EventArgs e)
{
    Page.Title = string.Format("Master Page Tutorials :: About :: {0:d}", DateTime.Now);
}

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 programově a zahrnuje aktuální datum.

Obrázek 03: Název stránky je programově nastavený 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 je možné 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 název automaticky aktualizoval tak, aby byl stejný jako název souboru stránky ASP.NET. Dobrou zprávou je, že s trochou počáteční práce je možné mít název přiřazen automaticky.

Všechny ASP.NET webové stránky jsou odvozeny Page od třídy v System.Web.UI oboru názvů. Třída Page definuje minimální funkčnost, kterou ASP.NET stránka potřebuje, a zveřejňuje základní vlastnosti, jako jsou IsPostBack, IsValidRequest, a , a Responsemnoho dalších. Každá stránka ve webové aplikaci často vyžaduje další funkce. Běžným způsobem, jak to zajistit, je vytvořit vlastní třídu základní stránky. Třída vlastní základní stránky je třída, kterou vytvoříte a která je odvozena od Page třídy a obsahuje další funkce. Jakmile je tato základní třída vytvořena, můžete z ní odvodit své ASP.NET stránky (místo Page 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 stránky ASP.NET, pokud nadpis nebyl jinak explicitně nastaven. Krok 3 se zabývá nastavením názvu stránky na základě mapy webu.

Poznámka

Důkladné prozkoumání 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.cs. Obrázek 4 znázorňuje Průzkumník řešení po App_Code přidání složky a BasePage.cs 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.cs 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 : System.Web.UI.Page
{

}

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 override void OnLoadComplete(EventArgs e)
{
    // Set the page's title, if necessary
    if (string.IsNullOrEmpty(Page.Title) || Page.Title == "Untitled Page")
    {
        // Determine the filename for this page
        string fileName = System.IO.Path.GetFileNameWithoutExtension(Request.PhysicalPath);

        Page.Title = fileName;
    }

    base.OnLoadComplete(e);
}

Metoda OnLoadComplete začíná určením, zda Title vlastnost ještě nebyla explicitně nastavena. Title Pokud je nullvlastnost , 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:

public partial class ClassName : System.Web.UI.Page

Do:

public partial class ClassName : BasePage

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 ID objektu ListView nastavte 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 LessonsList prvku 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 override void OnLoadComplete(EventArgs e)
{
    // Set the page's title, if necessary
    if (string.IsNullOrEmpty(Page.Title) || Page.Title == "Untitled Page")
    {
        // Is this page defined in the site map?
        string newTitle = null;

        SiteMapNode current = SiteMap.CurrentNode;
        if (current != null)
        {
            newTitle = current.Title;
        }
        else
        {
            // Determine the filename for this page
            newTitle = System.IO.Path.GetFileNameWithoutExtension(Request.PhysicalPath);
        }

        Page.Title = newTitle;
    }

    base.OnLoadComplete(e);
}

Stejně jako předtím metoda začíná určením, OnLoadComplete zda byl název stránky explicitně nastaven. Pokud Page.Title je nullhodnota , prázdný řetězec nebo má přiřazenou hodnotu "Stránka bez názvu", kód automaticky přiřadí hodnotu k 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, SiteMapNodeTitle je k názvu stránky přiřazena vlastnost . Pokud aktuálně požadovaná stránka není v mapě webu, CurrentNode vrátí hodnotu null 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 něj odpovídající název uzlu mapy webu.

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

Obrázek 12: Název MultipleContentPlaceHolders.aspx stránky se přetáhne z mapy webu.

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

Kroky 1, 2 a 3 se zabývaly přizpůsobením elementu <title> na jednotlivých stránkách. Kromě <title><head> nástroje může oddíl obsahovat <meta> prvky a <link> elementy. Jak jsme uvedli dříve v tomto kurzu, Site.master<head> část obsahuje <link> element pro Styles.css. Vzhledem k tomu, že tento <link> prvek je definován v rámci stránky předlohy, je zahrnut v oddílu <head> pro všechny stránky obsahu. Jak ale můžeme přidávat <meta> prvky a <link> na 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 (s názvem head) už 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 značky tam.

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

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 Content, který se mapuje na hlavní stránku předlohy ContentPlaceHolder. 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, že hlavní ContentPlaceHolder není v těle stránky HTML, kód přidaný do ovládacího prvku Obsahu 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 kód zadaný v ovládacím prvku Obsah.

Chvíli si přidejte <meta> elementy popisu do About.aspx, MultipleContentPlaceHolders.aspxa Login.aspx.

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

Hlavní ContentPlaceHolder nám umožňuje deklarativně přidat vlastní značky do oblasti stránky předlohy <head> . Vlastní značky je možné přidat také programově. Vzpomeňte Page si, že vlastnost třídy Header 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á ho někdo vytahuje 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 kolekce Controls, například takto:

// Programmatically add a <meta> element to the Header
HtmlMeta keywords = 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, oddělených čárkami. Všimněte si, že pokud chcete přidat <meta> značku, vytvoříte HtmlMeta instanci, nastavíte její Name vlastnosti a Content a pak ji přidáte do ControlsHeaderkolekce . Podobně platí, že pokud chcete přidat prvek prostřednictvím kódu <link> programu, vytvořte HtmlLink objekt, nastavte jeho vlastnosti a pak ho Controls přidejte do Headerkolekce .

Poznámka

Pokud chcete přidat libovolný kód, 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 oblasti 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; ContentPlaceHolder ovládací prvek umožňuje vlastní kód přidat do oddílu <head> deklarativně prostřednictvím content ovládacího prvku.

Všechno nejlepší na 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 poslední kniha je Sams Teach Yourself ASP.NET 3.5 in 24 Hours. Scotta můžete zastihnout na adrese mitchell@4GuysFromRolla.com nebo prostřednictvím svého blogu na adrese http://ScottOnWriting.NET.

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. Chtěli byste si projít své nadcházející články na webu MSDN? Pokud ano, dejte mi řádek na mitchell@4GuysFromRolla.com.