Doppelte Titel-tags verwenden ASP.NET MasterPage
Ich brauche, um den Titel einer Seite dynamisch, und so verwende ich einen ähnlichen code wie den folgenden:
<%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="~/about.aspx.cs" Inherits="Default" %>
<%@ Register Assembly="AjaxControlToolkit" namespace="AjaxControlToolkit" tagprefix="ajaxToolkit" %>
<%@ MasterType VirtualPath="MasterPage.master" %>
<%@ OutputCache Duration="43200" VaryByParam="*" Location="Server" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
<title><%=pageTitle%></title>
</asp:Content>
Aber das erzeugt doppelte Titel-tags. Gibt es eine Möglichkeit, kann ich dies umgehen? Danke.
EDIT: Folgende aus den Vorschlägen unten, ich habe nun Folgendes in meiner MasterPage:
<head id="Head1" runat="server">
<title>Default Title</title>
...
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
und die folgenden in meinem primären Seite:
this.Title="xxx";
aber ich bin nicht immer alle Titel (weder "Standard-Titel" noch "xxx").
EDIT: Nevermind. Habe es funktioniert mit dieser Methode.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den header Ihrer .master muss wie folgt Aussehen:
Dann in Ihre Seite ein code-behind in der Page_Load -, Sie schreiben:
Wenn das zweite title-tag leer war und am Ende der
head
tag, was dann passiert, ist, dass der Kopf-Steuerung (Hinweis: dierunat="server"
) kann nicht sehen, ein Titel-Steuerelement in der Steuerelemente, und daher fügt eine leere Title-tag zu Ende.Meisten der Antworten, die hier gültig sind, aber für minimal ändern, was Sie tun könnten, ist fügen Sie den folgenden, um Ihren Kopf zu kontrollieren-
Andere Optionen umfassen-
runat="server"
aus dem Kopf Steuern, aber das wird bedeuten, dass Sie nicht mit server-side controlsIch mag die versteckten title-tag, weil es Ihnen erlaubt, verwenden Sie das ContentPlaceholder-Ansatz, der hält es in der Vorlage. Es erlaubt Ihnen auch, um ein benutzerdefiniertes Steuerelement verwenden, um die Titel (in unserem Fall verwenden wir 3rd-party-Bibliothek, ziehen Sie die Titel aus einer DB)
Dieser blog-post von Phil Haack für den hintergrund auf das.
Zu vermeiden, die doppelte tags nur auf die folgenden, keine zusätzlichen code.
In Ihrer MasterPage haben so etwas wie dieses:
Und auf jeder anderen Seite fügen Sie Title="Dein Title" - Attribut der page-Direktive:
Dadurch entfällt das doppelte tags und legt die Titel in einer klaren, sichtbaren Platz an der Spitze in der code-Ansicht.
Hoffe, das hilft.
Versuchen, diese stattdessen
Dieser code wird in der Page_Load der Master-Seite. Ich muss ein cast ("MyPageClass"), denn ich leite meine eigene PageClass, so kann ich setzen stark typisierte session-Objekte. Wenn nicht, dann brauchen Sie nicht die Darsteller.
Wenn Sie brauchen, um dies zu tun auf der Seite, ich denke, Sie können nur verwenden:
in Ihrem Page_Load.
Wenn Sie in Ihrem master-Seite die Titel-Abschnitt sieht wie folgt aus:
<title><%=someTitleVariable%></title>
dann diese als code statt:
<asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
<%=pageTitle%>
</asp:Content>
In der Definition einer
<asp:Content ContentPlaceHolderID="head">
Kontrolle bist du nicht ändern der Titel, was bereits da ist, sondern Sie sind das hinzufügen mehr markup der Inhalte Platzhalter mit der Kennung "Kopf". In Ihrer Master-Seite, ich könnte mir vorstellen, dass Sie so etwas wie dieses:Also die
<asp:ContentPlaceHolder>
wird ersetzt mit der<asp:Content ContentPlaceHolderID="head">
so dass Sie am Ende mit einem zweiten<title>
element.So entfernen Sie entweder die
<title>
von Ihrem Master-Seite - das heißt, Sie müssen die<title>
im alle deine aspx-Dateien - oder einige-code, so etwas zu tun...Ich denke, mit:
Wenn Sie möchten, legen Sie Titel auf Seitenebene
Oder,
Wenn Sie möchten, legen Sie dynamische Titel auf Master-Seite-Ebene.
ist der bessere Weg, um sicherzustellen, dass leere zweite Titel-tag wird nicht generiert.
Einige 2 Jahre später das Problem noch besteht. Schlagen SEO von Websites.
Mithilfe von MVC 4.5 RC. Alles, was Sie tun müssen, ist einen leeren tag vor der master-content-Bereich. Es gibt keine Notwendigkeit, neu zu Kodieren, Satz-Titel innerhalb des Codes. Etwa so:
Einfach.
</
im zweiten<asp:contentPlaceHolder>
?