2008-09-27 19 views
9

Estoy jugando con ASP.NET MVC durante los últimos días y pude construir un sitio pequeño. Todo funciona bien¿Cómo pasar las metaetiquetas de la página en ASP.NET MVC?

Ahora, necesito pasar las etiquetas META de la página (título, descripción, palabras clave, etc.) a través de ViewData. (Estoy usando una página maestra).

¿Cómo te enfrentas a esto? Gracias de antemano.

Respuesta

20

Así es como actualmente estoy haciendo ...

En el masterpage, que tienen un marcador de posición de contenido con un título predeterminado, descripción y palabras clave:

<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> 

Y luego, en la página , puede anular todo este contenido:

<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> 

Esto debería darle una idea de cómo configurarlo. Ahora puede poner esta información en su ViewData (ViewData ["PageTitle"]) o incluirla en su modelo (ViewData.Model.MetaDescription - tendría sentido para las publicaciones de blog, etc.) y hacerla basada en datos.

+0

Funciona como un encanto. Gracias :) – ciscocert

+0

Justo lo que estaba buscando, gracias – AlexCuse

+0

Esto hace que jebo bebé llore ... Sé que va en contra de la forma MVC, pero la ASP.net 4.0 Page.MetaDescription es llameante hohhhtttnesss Ojalá hubiera una manera simple para hacer esto en sitios grandes en MVC – Doug

13

Ponlo en tu visdata! Hacer algo como lo siguiente ...

BaseViewData.cs - esto es una clase viewdata que todas las otras clases ViewData heredarán de

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

Luego, su Site.Master (o lo que sea) de clase deben ser definidos como de la siguiente manera:

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

en su página Site.Master simplemente tienen

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

¡Y te vas riendo!

HTHS, Charles

Ps. Luego puede ampliar esta idea, p. poner un getter a su clase de usuario (IPrincipal) en una clase LoggedInBaseViewData.

+0

Si tuviera que reescribir esto para hoy, lo haría usando 'ViewBag'. – Charlino

Cuestiones relacionadas