2008-09-27 5 views
9

Je joue avec ASP.NET MVC depuis quelques jours et j'ai pu créer un petit site. Tout fonctionne bien.Comment passer les balises meta de la page dans ASP.NET MVC?

Maintenant, je dois passer les balises META de la page (titre, description, mots-clés, etc.) via ViewData. (J'utilise une page maître).

Comment vous faites face à cela? Merci d'avance.

Répondre

20

Voici comment je fais actuellement il ...

Dans le masterpage, j'ai un espace réservé contenu avec un titre par défaut, description et mots-clés:

<head> 
<asp:ContentPlaceHolder ID="cphHead" runat="server"> 
    <title>Default Title</title> 
    <meta name="description" content="Default Description" /> 
    <meta name="keywords" content="Default Keywords" /> 
</asp:ContentPlaceHolder> 
</head> 

Et puis dans la page , vous pouvez remplacer tout ce contenu:

<asp:Content ID="headContent" ContentPlaceHolderID="cphHead" runat="server"> 
    <title>Page Specific Title</title> 
    <meta name="description" content="Page Specific Description" /> 
    <meta name="keywords" content="Page Specific Keywords" /> 
</asp:Content> 

Cela devrait vous donner une idée sur la façon de le configurer. Maintenant, vous pouvez mettre cette information dans votre ViewData (ViewData ["PageTitle"]) ou l'inclure dans votre modèle (ViewData.Model.MetaDescription - serait logique pour les billets de blog, etc) et le rendre piloté par les données.

+0

Fonctionne comme un charme. Merci :) – ciscocert

+0

Juste ce que je cherchais, merci – AlexCuse

+0

Cela fait pleurer bébé jebus ... Je sais que cela va à l'encontre de la façon MVC, mais le ASP.net 4.0 Page.MetaDescription flamboie hohhhtttnesss Souhaite il y avait un moyen simple Pour ce faire sur les grands sites dans MVC – Doug

13

Mettez-le dans votre viewdata! Faites quelque chose comme ce qui suit ...

BaseViewData.cs - classe c'est une classe vidéotex que toutes les autres classes vidéotex vont hériter de

public class BaseViewData 
{ 
    public string Title { get; set; } 
    public string MetaKeywords { get; set; } 
    public string MetaDescription { get; set; } 
} 

Ensuite, votre Site.master (ou autre) doivent être définis comme suit:

public partial class Site : System.Web.Mvc.ViewMasterPage<BaseViewData> 
{ 
} 

maintenant dans votre page Site.master ont tout simplement

<title><%=ViewData.Model.Title %></title> 
<meta name="keywords" content="<%=ViewData.Model.MetaKeywords %>" /> 
<meta name="description" content="<%=ViewData.Model.MetaDescription %>" /> 

Et vous êtes en train de rire!

HTHS, Charles

Ps. Vous pouvez ensuite développer cette idée, par ex. mettez un getter à votre classe User (IPrincipal) dans une classe LoggedInBaseViewData.

+0

Si je devais réécrire ceci pour aujourd'hui, je le ferais en utilisant 'ViewBag'. – Charlino