Określanie tytułu, tagów meta i innych nagłówków HTML na stronie wzorcowej (VB)
Autor : Scott Mitchell
Przyjrzyj się różnym technikom definiowania różnych <elementów głowy> na stronie wzorcowej na stronie zawartości.
Wprowadzenie
Nowe strony wzorcowe utworzone w programie Visual Studio 2008 domyślnie mają dwie kontrolki ContentPlaceHolder: jedną o nazwie i znajdującą <head>
się w elemecie oraz jedną o nazwie head
ContentPlaceHolder1
, umieszczoną w formularzu sieci Web. Celem programu ContentPlaceHolder1
jest zdefiniowanie regionu w formularzu internetowym, który można dostosować na podstawie strony po stronie. Element head
ContentPlaceHolder umożliwia dodawanie zawartości niestandardowej <head>
do sekcji na stronach. (Oczywiście te dwa symbole ContentPlaceHolder można modyfikować lub usuwać, a dodatkowy element ContentPlaceHolder można dodać do strony wzorcowej. Nasza strona wzorcowa , Site.master
obecnie ma cztery kontrolki ContentPlaceHolder).
Element HTML <head>
służy jako repozytorium informacji o dokumencie strony internetowej, który nie jest częścią samego dokumentu. Obejmuje to informacje, takie jak tytuł strony internetowej, metadane używane przez wyszukiwarki lub wewnętrzne przeszukiwarki oraz linki do zasobów zewnętrznych, takich jak kanały informacyjne RSS, pliki JavaScript i CSS. Niektóre z tych informacji mogą być istotne dla wszystkich stron w witrynie internetowej. Możesz na przykład zaimportować globalnie te same reguły CSS i pliki JavaScript dla każdej strony ASP.NET. Istnieją jednak fragmenty <head>
elementu, które są specyficzne dla strony. Tytuł strony jest doskonałym przykładem.
W tym samouczku dowiesz się, jak zdefiniować znaczniki sekcji globalnej i strony <head>
na stronie wzorcowej i na jej stronach zawartości.
Badanie sekcji strony wzorcowej<head>
Domyślny plik strony wzorcowej utworzony przez program Visual Studio 2008 zawiera następujące znaczniki w sekcji <head>
:
<head runat="server">
<title>Untitled Page</title>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
Zwróć uwagę, że <head>
element zawiera runat="server"
atrybut, który wskazuje, że jest to kontrolka serwera (a nie statyczny kod HTML). Wszystkie strony ASP.NET pochodzą z Page
klasy, która znajduje się w System.Web.UI
przestrzeni nazw. Ta klasa zawiera Header
właściwość , która zapewnia dostęp do regionu strony <head>
. Header
Za pomocą właściwości możemy ustawić tytuł strony ASP.NET lub dodać dodatkowe znaczniki do renderowanej <head>
sekcji. Następnie można dostosować element strony <head>
zawartości, pisząc trochę kodu w procedurze obsługi zdarzeń strony Page_Load
. Sprawdzamy, jak programowo ustawić tytuł strony w kroku 1.
Znaczniki pokazane w powyższym elemecie <head>
zawierają również kontrolkę ContentPlaceHolder o nazwie head
. Ta kontrolka ContentPlaceHolder nie jest konieczna, ponieważ strony zawartości mogą programowo dodawać zawartość niestandardową <head>
do elementu. Jest to jednak przydatne w sytuacjach, w których strona zawartości musi dodać statyczne znaczniki do <head>
elementu, ponieważ statyczne adiustacje można dodać deklaratywnie do odpowiedniej kontrolki zawartość, a nie programowo.
Oprócz <title>
elementu i head
elementu ContentPlaceHolder element strony wzorcowej <head>
powinien zawierać dowolne <head>
znaczniki na poziomie , które są wspólne dla wszystkich stron. W naszej witrynie internetowej wszystkie strony używają reguł CSS zdefiniowanych Styles.css
w pliku . W związku z tym zaktualizowaliśmy element w samouczku <head>
Tworzenie układu Site-Wide za pomocą stron wzorcowych w celu uwzględnienia odpowiedniego <link>
elementu. Bieżąca Site.master
<head>
adiustacja naszej strony wzorcowej jest pokazana poniżej.
<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. Ustawianie tytułu strony zawartości
Tytuł strony internetowej jest określany za pośrednictwem <title>
elementu . Ważne jest, aby ustawić tytuł każdej strony na odpowiednią wartość. Podczas odwiedzania strony jej tytuł jest wyświetlany na pasku tytułu przeglądarki. Ponadto podczas tworzenia zakładek przeglądarki używają tytułu strony jako sugerowanej nazwy zakładki. Ponadto wiele aparatów wyszukiwania wyświetla tytuł strony podczas wyświetlania wyników wyszukiwania.
Uwaga
Domyślnie program Visual Studio ustawia <title>
element na stronie wzorcowej na "Strona bez tytułu". Podobnie nowe strony ASP.NET mają też <title>
ustawioną wartość "Strona bez tytułu". Ponieważ można łatwo zapomnieć o ustawieniu tytułu strony na odpowiednią wartość, istnieje wiele stron w Internecie z tytułem "Strona bez tytułu". Wyszukiwanie stron internetowych Google o tym tytule zwraca około 2460 000 wyników. Nawet firma Microsoft jest podatna na publikowanie stron internetowych z tytułem "Strona bez tytułu". W momencie pisania tego tekstu wyszukiwanie Google zgłosiło 236 takich stron internetowych w domenie Microsoft.com.
Strona ASP.NET może określić jej tytuł w jeden z następujących sposobów:
- Umieszczając wartość bezpośrednio w elemecie
<title>
- Używanie atrybutu
Title
<%@ Page %>
w dyrektywie - Programowe ustawianie właściwości strony
Title
przy użyciu kodu takiego jakPage.Title="title"
lubPage.Header.Title="title"
.
Strony zawartości nie mają <title>
elementu, ponieważ są zdefiniowane na stronie wzorcowej. W związku z tym, aby ustawić tytuł strony zawartości, można użyć <%@ Page %>
atrybutu Title
dyrektywy lub ustawić ją programowo.
Deklaratywne ustawianie tytułu strony
Tytuł strony zawartości można ustawić deklaratywnie za pomocą Title
atrybutu <%@ Page %>
dyrektywy. Tę właściwość można ustawić bezpośrednio, modyfikując dyrektywę <%@ Page %>
lub za pomocą okno Właściwości. Przyjrzyjmy się obu podejść.
W widoku Źródło znajdź dyrektywę <%@ Page %>
, która znajduje się w górnej części znacznika deklaratywnego strony. Dyrektywa <%@ Page %>
dla Default.aspx
następujących:
<%@ Page Language="VB" MasterPageFile="~/Site.master" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" Title="Untitled Page" %>
Dyrektywa <%@ Page %>
określa atrybuty specyficzne dla strony używane przez aparat ASP.NET podczas analizowania i kompilowania strony. Obejmuje to między innymi plik strony wzorcowej, lokalizację pliku kodu i jego tytuł.
Domyślnie podczas tworzenia nowej strony zawartości program Visual Studio ustawia Title
atrybut na "Strona bez tytułu". Zmień Default.aspx
atrybut "s Title
" z "Strona bez tytułu" na "Samouczki dotyczące strony wzorcowej", a następnie wyświetl stronę za pośrednictwem przeglądarki. Rysunek 1 przedstawia pasek tytułu przeglądarki, który odzwierciedla nowy tytuł strony.
Rysunek 01. Pasek tytułu przeglądarki pokazuje teraz "Samouczki dotyczące strony wzorcowej" zamiast "Strona bez tytułu"
Tytuł strony można również ustawić na podstawie okno Właściwości. Z okno Właściwości wybierz pozycję DOKUMENT z listy rozwijanej, aby załadować właściwości na poziomie strony, które obejmują Title
właściwość . Rysunek 2 przedstawia okno Właściwości po Title
ustawieniu pozycji "Samouczki dotyczące strony wzorcowej".
Rysunek 02. Tytuł można skonfigurować również w oknie Właściwości.
Programowe ustawianie tytułu strony
Znaczniki strony wzorcowej <head runat="server">
są tłumaczone na HtmlHead
wystąpienie klasy , gdy strona jest renderowana przez aparat ASP.NET. Klasa HtmlHead
ma Title
właściwość , której wartość jest odzwierciedlana w renderowanych <title>
elementach. Ta właściwość jest dostępna z klasy za pomocą kodu strony ASP.NET za pośrednictwem metody Page.Header.Title
. Dostęp do tej samej właściwości można również uzyskać za pośrednictwem metody Page.Title
.
Aby ćwiczyć programowe ustawianie tytułu strony, przejdź do About.aspx
klasy kodowej strony i utwórz procedurę obsługi zdarzeń dla zdarzenia strony Load
. Następnie ustaw tytuł strony na "Samouczki strony wzorcowej :: Informacje o :: data", gdzie data jest bieżącą datą. Po dodaniu tego kodu Page_Load
program obsługi zdarzeń powinien wyglądać podobnie do następującego:
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
Rysunek 3 przedstawia pasek tytułu przeglądarki podczas odwiedzania About.aspx
strony.
Rysunek 03. Tytuł strony jest ustawiany programowo i uwzględnia bieżącą datę
Krok 2. Automatyczne przypisywanie tytułu strony
Jak pokazano w kroku 1, tytuł strony można ustawić deklaratywnie lub programowo. Jeśli jednak zapomnisz jawnie zmienić tytuł na bardziej opisowy, strona będzie mieć domyślny tytuł "Strona bez tytułu". Najlepiej, aby tytuł strony był ustawiany automatycznie w przypadku, gdy nie określimy jawnie jej wartości. Jeśli na przykład w czasie wykonywania tytuł strony to "Strona bez tytułu", możemy chcieć, aby tytuł był automatycznie aktualizowany tak samo jak nazwa pliku strony ASP.NET. Dobrą wiadomością jest to, że przy odrobinie pracy z góry można automatycznie przypisać tytuł.
Wszystkie strony internetowe ASP.NET pochodzą z Page
klasy w przestrzeni nazw System.Web.UI. Klasa Page
definiuje minimalną funkcjonalność wymaganą przez stronę ASP.NET i udostępnia podstawowe właściwości, takie jak IsPostBack
, IsValid
, Request
i Response
, między innymi. Często każda strona w aplikacji internetowej wymaga dodatkowych funkcji lub funkcji. Typowym sposobem zapewnienia tego jest utworzenie niestandardowej klasy strony bazowej. Niestandardowa klasa strony bazowej to tworzona klasa, która pochodzi z Page
klasy i zawiera dodatkowe funkcje. Po utworzeniu tej klasy bazowej możesz uzyskać od niej strony ASP.NET (a nie klasę Page
), oferując w ten sposób rozszerzoną funkcjonalność stron ASP.NET.
W tym kroku utworzymy stronę podstawową, która automatycznie ustawia tytuł strony na nazwę pliku strony ASP.NET, jeśli tytuł nie został jawnie ustawiony. Krok 3 przedstawia ustawienie tytułu strony na podstawie mapy witryny.
Uwaga
Dokładne badanie tworzenia i używania niestandardowych klas stron podstawowych wykracza poza zakres tej serii samouczków.
Tworzenie klasy strony bazowej
Naszym pierwszym zadaniem jest utworzenie klasy strony bazowej, która jest klasą rozszerzającą klasę Page
. Zacznij od dodania App_Code
folderu do projektu, klikając prawym przyciskiem myszy nazwę projektu w Eksplorator rozwiązań, wybierając pozycję Dodaj ASP.NET Folder, a następnie wybierając pozycję App_Code
. Następnie kliknij prawym przyciskiem myszy App_Code
folder i dodaj nową klasę o nazwie BasePage.vb
. Rysunek 4 przedstawia Eksplorator rozwiązań po App_Code
dodaniu folderu i BasePage.vb
klasy.
Rysunek 04. Dodawanie App_Code
folderu i klasy o nazwie BasePage
Uwaga
Program Visual Studio obsługuje dwa tryby zarządzania projektami: projekty witryn sieci Web i projekty aplikacji internetowych. Folder App_Code
jest przeznaczony do użycia z modelem projektu witryny sieci Web. Jeśli używasz modelu projektu aplikacji internetowej, umieść klasę BasePage.vb
w folderze o nazwie innej niż App_Code
, na przykład Classes
. Aby uzyskać więcej informacji na ten temat, zobacz Migrowanie projektu witryny sieci Web do projektu aplikacji internetowej.
Ponieważ niestandardowa strona podstawowa służy jako klasa bazowa dla klas kodowych stron ASP.NET, musi rozszerzyć klasę Page
.
Public Class BasePage
Inherits System.Web.UI.Page
End Class
Za każdym razem, gdy żądana jest strona ASP.NET, przechodzi ona przez serię etapów, co kończy się renderowaniem żądanej strony w kodzie HTML. Możemy wykorzystać etap, przesłaniając Page
metodę klasy OnEvent
. W przypadku naszej strony bazowej automatycznie ustawimy tytuł, jeśli nie został jawnie określony przez LoadComplete
etap (który, jak można się domyślić, występuje po Load
etapie).
Aby to osiągnąć, zastąpij metodę OnLoadComplete
i wprowadź następujący kod:
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
rozpoczyna się od określenia, czy Title
właściwość nie została jeszcze jawnie ustawiona. Title
Jeśli właściwość to Nothing
, pusty ciąg lub ma wartość "Strona bez tytułu", jest przypisana do nazwy pliku żądanej strony ASP.NET. Ścieżka fizyczna do żądanej strony ASP.NET — C:\MySites\Tutorial03\Login.aspx
na przykład — jest dostępna za pośrednictwem Request.PhysicalPath
właściwości . Metoda Path.GetFileNameWithoutExtension
jest używana do wyciągania tylko części nazwy pliku, a ta nazwa pliku jest następnie przypisywana do Page.Title
właściwości.
Uwaga
Zapraszam do ulepszenia tej logiki w celu ulepszenia formatu tytułu. Jeśli na przykład nazwa pliku strony to Company-Products.aspx
, powyższy kod spowoduje wygenerowanie tytułu "Produkty firmowe", ale w idealnym przypadku kreska zostanie zastąpiona spacją, tak jak w sekcji "Produkty firmowe". Należy również rozważyć dodanie spacji za każdym razem, gdy wystąpi zmiana wielkości liter. Oznacza to, że rozważ dodanie kodu, który przekształca nazwę pliku OurBusinessHours.aspx
na tytuł "Nasze godziny pracy".
Posiadanie stron zawartości dziedziczy klasę strony bazowej
Teraz musimy zaktualizować strony ASP.NET w naszej witrynie, aby pochodziły z niestandardowej strony bazowej Page
(BasePage
) zamiast klasy. Aby to zrobić, przejdź do każdej klasy za kodem i zmień deklarację klasy z:
Partial Class About
Inherits System.Web.UI.Page
...
End Class
Do:
Partial Class About
Inherits BasePage
...
End Class
Po wykonaniu tej czynności odwiedź witrynę za pośrednictwem przeglądarki. Jeśli odwiedzasz stronę, której tytuł jest jawnie ustawiony, na przykład Default.aspx
lub About.aspx
, jest używany jawnie określony tytuł. Jeśli jednak odwiedzasz stronę, której tytuł nie został zmieniony z domyślnego ("Strona bez tytułu"), klasa strony bazowej ustawia tytuł na nazwę pliku strony.
Rysunek 5 przedstawia MultipleContentPlaceHolders.aspx
stronę po wyświetleniu za pośrednictwem przeglądarki. Należy pamiętać, że tytuł jest dokładnie nazwą pliku strony (mniej rozszerzeniem), "MultipleContentPlaceHolders".
Rysunek 05. Jeśli tytuł nie jest jawnie określony, nazwa pliku strony jest automatycznie używana (kliknij, aby wyświetlić obraz pełnowymiarowy)
Krok 3. Oparcie tytułu strony na mapie witryny
ASP.NET oferuje niezawodną strukturę mapy witryny, która umożliwia deweloperom stron definiowanie hierarchicznej mapy lokacji w zasobie zewnętrznym (takim jak plik XML lub tabela bazy danych) wraz z kontrolkami sieci Web do wyświetlania informacji o mapie witryny (takich jak kontrolki SiteMapPath, Menu i TreeView).
Dostęp do struktury mapy witryny można również uzyskać programowo z poziomu klasy ASP.NET strony. W ten sposób możemy automatycznie ustawić tytuł strony na tytuł odpowiedniego węzła na mapie witryny. Rozszerzmy klasę utworzoną BasePage
w kroku 2, aby oferuje ona tę funkcję. Najpierw musimy jednak utworzyć mapę witryny dla naszej witryny.
Uwaga
W tym samouczku założono, że czytelnik jest już zaznajomiony z platformą ASP. Funkcje mapy witryny platformy NET. Aby uzyskać więcej informacji na temat korzystania z mapy witryny, zapoznaj się z serią artykułów wieloczęściowych , Badanie platformy ASP. Nawigacja po witrynie platformy NET.
Tworzenie mapy witryny
System mapy lokacji jest zbudowany na szczycie modelu dostawcy, który oddziela interfejs API mapy lokacji od logiki, która serializuje informacje o mapowaniu lokacji między pamięcią a magazynem trwałym. .NET Framework jest dostarczany z klasąXmlSiteMapProvider
, która jest domyślnym dostawcą mapy lokacji. Jak wskazuje jego nazwa, XmlSiteMapProvider
używa pliku XML jako magazynu mapy witryny. Użyjmy tego dostawcy do zdefiniowania mapy witryny.
Zacznij od utworzenia pliku mapy witryny w folderze głównym witryny o nazwie Web.sitemap
. Aby to osiągnąć, kliknij prawym przyciskiem myszy nazwę witryny internetowej w Eksplorator rozwiązań, wybierz pozycję Dodaj nowy element i wybierz szablon Mapa witryny. Upewnij się, że plik ma nazwę Web.sitemap
i kliknij przycisk Dodaj.
Rysunek 06. Dodawanie pliku o nazwie Web.sitemap
do folderu głównego witryny internetowej (kliknij, aby wyświetlić obraz pełnowymiarowy)
Dodaj następujący kod XML do Web.sitemap
pliku:
<?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>
Ten kod XML definiuje hierarchiczną strukturę mapy lokacji pokazaną na rysunku 7.
Rysunek 07. Mapa witryny składa się obecnie z trzech węzłów mapy lokacji
W przyszłych samouczkach zaktualizujemy strukturę mapy witryny, dodając nowe przykłady.
Aktualizowanie strony wzorcowej w celu uwzględnienia kontrolek sieci Web nawigacji
Teraz, gdy mamy zdefiniowaną mapę witryny, zaktualizujmy stronę wzorcową, aby uwzględnić kontrolki sieci Web nawigacji. W szczególności dodajmy kontrolkę ListView do lewej kolumny w sekcji Lekcje, która renderuje nieuporządkowaną listę z elementem listy dla każdego węzła zdefiniowanego na mapie witryny.
Uwaga
Kontrolka ListView jest nowa do ASP.NET w wersji 3.5. Jeśli używasz wcześniejszej wersji ASP.NET, użyj kontrolki Repeater.
Zacznij od usunięcia istniejącego nieuporządkowanego znacznika listy z sekcji Lekcje. Następnie przeciągnij kontrolkę ListView z przybornika i upuść ją pod nagłówkiem Lekcje. Element ListView znajduje się w sekcji Dane przybornika wraz z innymi kontrolkami widoku: GridView, DetailsView i FormView. Ustaw właściwość ListView ID
na LessonsList
.
W Kreatorze konfiguracji źródła danych wybierz powiązanie elementu ListView z nową kontrolką SiteMapDataSource o nazwie LessonsDataSource
. Kontrolka SiteMapDataSource zwraca hierarchiczną strukturę z systemu mapy lokacji.
Rysunek 08. Powiązanie kontrolki SiteMapDataSource z kontrolką LessonsList ListView (kliknij, aby wyświetlić obraz pełnowymiarowy)
Po utworzeniu kontrolki SiteMapDataSource należy zdefiniować szablony elementu ListView, aby renderowała nieuporządkowaną listę z elementem listy dla każdego węzła zwróconego przez kontrolkę SiteMapDataSource. Można to zrobić przy użyciu następującego znacznika szablonu:
<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>
Element LayoutTemplate
generuje znaczniki dla listy nieurządkowanej (<ul>...</ul>
), podczas gdy ItemTemplate
renderuje każdy element zwrócony przez element SiteMapDataSource jako element listy (<li>
), który zawiera link do konkretnej lekcji.
Po skonfigurowaniu szablonów elementu ListView odwiedź witrynę internetową. Jak pokazano na rysunku 9, sekcja Lekcje zawiera pojedynczy punktowany element Home. Gdzie znajdują się lekcje dotyczące kontrolek About and Using Multiple ContentPlaceHolder? Element SiteMapDataSource jest przeznaczony do zwracania hierarchicznego zestawu danych, ale kontrolka ListView może wyświetlać tylko jeden poziom hierarchii. W związku z tym wyświetlany jest tylko pierwszy poziom węzłów mapy lokacji zwróconych przez element SiteMapDataSource.
Rysunek 09. Sekcja Lekcji zawiera pojedynczy element listy (kliknij, aby wyświetlić obraz pełnowymiarowy)
Aby wyświetlić wiele poziomów, możemy zagnieżdżać wiele elementów ListView w obrębie elementu ItemTemplate
. Ta technika została zbadana w samouczku dotyczącym stron wzorcowych i nawigacji witryny w serii samouczków Praca z danymi. Jednak w tej serii samouczków mapa witryny będzie zawierać tylko dwa poziomy: Strona główna (najwyższy poziom); i każda lekcja jako dziecko domu. Zamiast tworzyć zagnieżdżony element ListView, możemy zamiast tego poinstruować element SiteMapDataSource, aby nie zwracał węzła początkowego, ustawiając jejShowStartingNode
właściwość na False
. Efekt netto polega na tym, że element SiteMapDataSource rozpoczyna się od zwrócenia drugiej warstwy węzłów mapy lokacji.
Dzięki tej zmianie widok ListView wyświetla elementy punktorowe dla lekcji Informacje i Korzystanie z wielu kontrolek ContentPlaceHolder, ale pomija element punktorowy dla strony głównej. Aby rozwiązać ten problem, możemy jawnie dodać element punktor dla strony głównej w elemencie LayoutTemplate
:
<LayoutTemplate>
<ul>
<li><asp:HyperLink runat="server" ID="lnkLesson"
NavigateUrl="~/Default.aspx" Text="Home" /></li>
<asp:PlaceHolder runat="server" ID="itemPlaceholder" />
</ul>
</LayoutTemplate>
Po skonfigurowaniu elementu SiteMapDataSource w celu pominięcia węzła początkowego i jawnego dodania elementu punktora Narzędzia główne sekcja Lekcje wyświetla teraz zamierzone dane wyjściowe.
Rysunek 10. Sekcja Lekcje zawiera element punktorowy dla strony głównej i każdego węzła podrzędnego (kliknij, aby wyświetlić obraz pełnowymiarowy)
Ustawianie tytułu na podstawie mapy witryny
Za pomocą mapy witryny możemy zaktualizować klasę BasePage
tak, aby korzystała z tytułu określonego na mapie witryny. Tak jak w kroku 2, chcemy użyć tytułu węzła mapy witryny tylko wtedy, gdy tytuł strony nie został jawnie ustawiony przez dewelopera strony. Jeśli żądana strona nie ma jawnie ustawionego tytułu strony i nie zostanie znaleziona na mapie witryny, wrócimy do nazwy pliku żądanej strony (mniej rozszerzenia), tak jak w kroku 2. Rysunek 11 ilustruje ten proces decyzyjny.
Rysunek 11. W przypadku braku jawnego ustawienia tytułu strony odpowiedni tytuł węzła mapy witryny jest używany
Zaktualizuj metodę klasyOnLoadComplete
, BasePage
aby zawierała następujący kod:
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
Tak jak poprzednio, metoda rozpoczyna się od określenia, OnLoadComplete
czy tytuł strony został jawnie ustawiony. Jeśli Page.Title
to Nothing
, pusty ciąg lub jest przypisywana wartość "Strona bez tytułu", kod automatycznie przypisuje wartość do Page.Title
.
Aby określić tytuł do użycia, kod rozpoczyna się od odwołania do SiteMap
właściwości klasyCurrentNode
. CurrentNode
SiteMapNode
Zwraca wystąpienie na mapie witryny odpowiadające aktualnie żądanej stronie. Zakładając, że aktualnie żądana strona znajduje się w mapie witryny, SiteMapNode
właściwość "jest Title
przypisana do tytułu strony". Jeśli aktualnie żądana strona nie znajduje się na mapie witryny, CurrentNode
zwraca wartość , Nothing
a nazwa pliku żądanej strony jest używana jako tytuł (tak jak to miało miejsce w kroku 2).
Rysunek 12 przedstawia MultipleContentPlaceHolders.aspx
stronę po wyświetleniu za pośrednictwem przeglądarki. Ponieważ tytuł tej strony nie jest jawnie ustawiony, zamiast tego jest używany tytuł odpowiedniego węzła mapy witryny.
Rysunek 12. Tytuł strony MultipleContentPlaceHolders.aspx jest ściągany z mapy witryny
Krok 4. Dodawanie innych znaczników Page-Specific do<head>
sekcji
Kroki 1, 2 i 3 przyjrzały się dostosowywaniu <title>
elementu na podstawie strony po stronie. Oprócz <title>
elementu <head>
sekcja może zawierać <meta>
elementy i <link>
elementy. Jak wspomniano wcześniej w tym samouczku, Site.master
sekcja "s <head>
" zawiera <link>
element do Styles.css
elementu . Ponieważ ten <link>
element jest zdefiniowany na stronie wzorcowej, znajduje się w <head>
sekcji dla wszystkich stron zawartości. Ale jak możemy dodawać <meta>
elementy i <link>
elementy na podstawie stron po stronie?
Najprostszym sposobem dodania zawartości specyficznej dla strony do <head>
sekcji jest utworzenie kontrolki ContentPlaceHolder na stronie wzorcowej. Mamy już taki element ContentPlaceHolder (o nazwie head
). W związku z tym, aby dodać znaczniki niestandardowe <head>
, utwórz odpowiednią kontrolkę Zawartość na stronie i umieść tam znaczniki.
Aby zilustrować dodawanie niestandardowych <head>
znaczników do strony, dołączmy <meta>
element opisu do bieżącego zestawu stron zawartości. Element <meta>
description zawiera krótki opis strony internetowej. Większość aparatów wyszukiwania zawiera te informacje w jakiejś formie podczas wyświetlania wyników wyszukiwania.
Element <meta>
opisu ma następującą postać:
<meta name="description" content="description of the web page" />
Aby dodać ten znacznik do strony zawartości, dodaj powyższy tekst do kontrolki Zawartość mapowania na element ContentPlaceHolder strony wzorcowej head
. Aby na przykład zdefiniować <meta>
element opisu dla Default.aspx
elementu , dodaj następujące znaczniki:
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
<meta name="description" content="Welcome to Scott Mitchell's Master Page Tutorials series." />
</asp:Content>
Ponieważ element head
ContentPlaceHolder nie znajduje się w treści strony HTML, znaczniki dodane do kontrolki Zawartość nie są wyświetlane w widoku projektowym. Aby wyświetlić <meta>
element opisu, odwiedź Default.aspx
przeglądarkę. Po załadowaniu strony wyświetl źródło i zwróć uwagę, że <head>
sekcja zawiera znaczniki określone w kontrolce Zawartość.
Poświęć chwilę, aby dodać <meta>
elementy opisu do About.aspx
elementów , MultipleContentPlaceHolders.aspx
i Login.aspx
.
Programowe dodawanie znaczników do<head>
regionu
Element head
ContentPlaceHolder umożliwia deklaratywne dodawanie niestandardowych znaczników do regionu strony wzorcowej <head>
. Adiustację niestandardową można również dodać programowo. Pamiętaj, że Page
właściwość klasy Header
zwraca HtmlHead
wystąpienie zdefiniowane na stronie wzorcowej ().<head runat="server">
Możliwość programowego dodawania zawartości do <head>
regionu jest przydatna, gdy zawartość do dodania jest dynamiczna. Być może jest ona oparta na użytkowniku odwiedzającym stronę; być może jest on ściągany z bazy danych. Niezależnie od przyczyny możesz dodać zawartość do obiektu HtmlHead
, dodając kontrolki do swojej Controls
kolekcji w następujący sposób:
' 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)
Powyższy kod dodaje <meta>
element keywords do <head>
regionu, który zawiera rozdzielaną przecinkami listę słów kluczowych opisujących stronę. Pamiętaj, że aby dodać tag, należy utworzyć <meta>
HtmlMeta
wystąpienie, ustawić jego Name
właściwości i Content
, a następnie dodać go do Header
kolekcji .s Controls
. Podobnie, aby programowo dodać <link>
element, utworzyć obiekt, ustawić HtmlLink
jego właściwości, a następnie dodać go do Header
kolekcji .s Controls
.
Uwaga
Aby dodać dowolne znaczniki, utwórz LiteralControl
wystąpienie, ustaw jego Text
właściwość, a następnie dodaj ją do Header
kolekcji .s Controls
.
Podsumowanie
W tym samouczku przyjrzeliśmy się różnym sposobom dodawania <head>
znaczników regionów na podstawie strony po stronie. Strona wzorcowa powinna zawierać HtmlHead
wystąpienie (<head runat="server">
) z elementem ContentPlaceHolder. Wystąpienie HtmlHead
umożliwia stronom zawartości programowe uzyskiwanie dostępu do <head>
regionu oraz deklaratywne i programowe ustawianie tytułu strony. Kontrolka ContentPlaceHolder umożliwia deklaratywne dodawanie znaczników niestandardowych do <head>
sekcji za pomocą kontrolki zawartość.
Szczęśliwe programowanie!
Dalsze informacje
Aby uzyskać więcej informacji na temat tematów omówionych w tym samouczku, zapoznaj się z następującymi zasobami:
- Dynamiczne ustawianie tytułu strony w ASP.NET
- Badanie platformy ASP. Nawigacja po witrynie platformy NET
- Jak używać tagów meta html
- Strony wzorcowe w ASP.NET
- Używanie kontrolek ListView i DataPager ASP.NET 3.5
Informacje o autorze
Scott Mitchell, autor wielu książek ASP/ASP.NET i założyciel 4GuysFromRolla.com, współpracuje z technologiami internetowymi firmy Microsoft od 1998 roku. Scott pracuje jako niezależny konsultant, trener i pisarz. Jego najnowsza książka to Sams Teach Yourself ASP.NET 3,5 w ciągu 24 godzin. Scott można dotrzeć pod mitchell@4GuysFromRolla.com adresem lub za pośrednictwem swojego bloga pod adresem http://ScottOnWriting.NET.
Specjalne podziękowania
Ta seria samouczków została przejrzyona przez wielu przydatnych recenzentów. Głównymi recenzentami tego samouczka byli Zack Jones i Suchi Banerjee. Chcesz przejrzeć nadchodzące artykuły MSDN? Jeśli tak, upuść mi wiersz pod adresem mitchell@4GuysFromRolla.com.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla