Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to pass page's meta tags in ASP.NET MVC?

I'm playing with ASP.NET MVC for the last few days and was able to build a small site. Everything works great.

Now, I need to pass the page's META tags (title, description, keywords, etc.) via the ViewData. (i'm using a master page).

How you're dealing with this? Thank you in advance.

like image 976
ciscocert Avatar asked Sep 27 '08 17:09

ciscocert


2 Answers

Here is how I am currently doing it...

In the masterpage, I have a content place holder with a default title, description and keywords:

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

And then in the page, you can override all this content:

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

This should give you an idea on how to set it up. Now you can put this information in your ViewData (ViewData["PageTitle"]) or include it in your model (ViewData.Model.MetaDescription - would make sense for blog posts, etc) and make it data driven.

like image 157
Ricky Avatar answered Nov 19 '22 17:11

Ricky


Put it in your viewdata! Do something like the following...

BaseViewData.cs - this is a viewdata class that all other viewdata classes will inherit from

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

Then your Site.Master (or whatever) class should be defined as follows:

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

Now in your Site.Master page simply have

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

And you're away laughing!

HTHs, Charles

Ps. You can then expand on this idea, e.g. put a getter to your User (IPrincipal) Class into a LoggedInBaseViewData class.

like image 43
Charlino Avatar answered Nov 19 '22 18:11

Charlino