2011-04-28 6 views
3

Salut Je ne suis pas sûr que ce soit la bonne approche, mais je voudrais construire un site avec des méta tags dynamiques.Approche correcte du meta tagging dans asp.net mvc 3

Certaines balises meta sont codées en dur sur le système, mais certaines doivent être chargées dynamiquement et je devrais pouvoir les définir dans l'action correspondante. J'ai donc besoin d'une logique de construction de balise meta avec quelque chose comme une vue partielle, ou même une action enfant, mais je ne suis pas sûr de la bonne approche.

Je voudrais que cela fonctionne quand même là, il n'y a rien dans une action, (il faut charger la valeur par défaut alors)

Est-ce qu'un childaction dans le layout.cshtml être la meilleure approche?

Répondre

2

Vous pouvez essayer d'utiliser l'objet ViewBag pour cela. Je vais utiliser un dictionnaire, mais vous pourrez peut-être utiliser quelque chose de plus typé si les balises meta ne sont pas si dynamiques.

Dans votre (? Base) constructeur du contrôleur, créez un dictionnaire dans le ViewBag pour contenir les balises meta:

/* HomeController.cshtml */ 
public HomeController() 
{ 
    // Create a dictionary to store meta tags in the ViewBag 
    this.ViewBag.MetaTags = new Dictionary<string, string>(); 
} 

Ensuite, pour définir une balise meta dans votre action, il suffit d'ajouter à la dictinary:

/* HomeController.cshtml */ 
public ActionResult About() 
{ 
    // Set the x meta tag 
    this.ViewBag.MetaTags["NewTagAddedInController"] = "Pizza"; 
    return View(); 
} 

Sinon, vous pouvez même l'ajouter dans la vue (.cshtml):

/* About.cshtml */ 
@{ 
    ViewBag.Title = "About Us"; 
    ViewBag.MetaTags["TagSetInView"] = "MyViewTag"; 
} 

Enfin, votre page de mise en page, vous pouvez vérifier la présence du dictionnaire, et en boucle à travers la sortie d'une balise META pour chaque entrée:

/* _Layout.cshtml */ 
<head> 
    <title>@ViewBag.Title</title> 
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
    @if (ViewBag.MetaTags != null) 
    { 
     foreach (var tag in ViewBag.MetaTags.Keys) 
     { 
      <meta name="@tag" content="@ViewBag.MetaTags[tag]" /> 
     } 
    } 
</head>