0

Ma page principale ressemble:ASP.NET: avoir un titre de page commun dans le gabarit avec chaque page ajoutant un titre spécifique à la page?

<head runat="server"> 
    <title> 
     <asp:ContentPlaceHolder ID="PageTitlePlaceHolder" runat="server" /> 
    </title> 

pages de contenu ressemblent:

<asp:Content ID="TitleContent1" 
    ContentPlaceHolderID="PageTitlePlaceHolder" runat="Server"> 
    My Page 
</asp:Content> 

Cela fonctionne en plaçant le titre de la page de contenu spécifique sur la page ("Ma page" dans cet exemple). Maintenant, je veux ajouter un préfixe global au titre dans ma page maître pour le nom du site. Je veux donc:

<head runat="server"> 
    <title> 
     Example.com: 
     <asp:ContentPlaceHolder ID="PageTitlePlaceHolder" runat="server" /> 
    </title> 

Cependant, quand je fais des pages de contenu sont encore rendus sans « Example.com » dans la tuile, il est comme il est ignoré.

Pourquoi cela se produit-il et comment puis-je y parvenir?

Répondre

3

Essayez ceci dans le code derrière la MasterPage:

void MasterPage_PreRender(object sender, EventArgs e) 
{ 
    Page.Title = "Example.com - " + Page.Title; 
} 
+0

Cela ne fonctionne pas. En parcourant le code, lors de l'exécution de cette ligne, la propriété Page.Title est vide. – User

+0

Essayez de descendre le cycle de vie de la page de la page MasterPage ... est la propriété vide dans le fichier MasterPage_Load? – Martin

+0

Pensez à ce que vous faites ici. Vous dites essentiellement Page.Title = Page.Title. Vous devez référencer le contenu de la page dans l'espace réservé de contenu, comme ceci: 'Page.Title = « Mon nom de site - » + MyContentPlaceHolder.Page.Title' Mettez ça dans votre page maître événement Page_load. – user1003916

0

enlever la "runat =" server "" mais je ne suis pas sûr, essayer

<head> 
    <title> 
     Example.com: 
     <asp:ContentPlaceHolder ID="PageTitlePlaceHolder" runat="server" /> 
    </title> 
2

Retirez le étiquette de titre de la page maîtresse et utilisez le code fourni par Martin. Maintenant dans vos pages de contenu définissez le titre dans la balise Page en haut du fichier comme suit:

<%@ Page ... Title="Contact" %> 
0

Deux options. un est supprimer runat=server de <head> (jefferydu)

Deux utilise le titre Page.Titre en tant que chaîne. (Martin)

Je préfère utiliser un objet que j'ai écrit quelque part qui ajoute aussi le titre pour facebook, la description pour les moteurs de recherche, etc. pour toute page que j'ai utilisée. Cet objet stocke le titre de la page dans trois chaînes - une avant, l'une est le titre de la page, une après.

1

Le travail que j'ai trouvé le plus acceptable est d'utiliser plusieurs contrôles ContentPlaceHolder.

<head runat="server"> 
    <title> 
     <asp:ContentPlaceHolder ID="cphMasterTitle" runat="server">Example.com: </asp:ContentPlaceHolder> 
     <asp:ContentPlaceHolder ID="cphSubtitle" runat="server" /> 
    </title> 
</head> 

Notez que tout autre contenu à l'intérieur <title>, y compris les espaces, est dépouillé. Tout espacement entre le contenu ContentPlaceHolder doit être fait à l'intérieur des contrôles.

J'ai également utilisé <asp:Literal runat="server">Example.com: </asp:Literal> lorsque je ne veux pas exposer un espace réservé aux pages de contenu.