Как передать метатеги страницы в ASP.NET MVC? - PullRequest
9 голосов
/ 27 сентября 2008

Последние несколько дней я играю с ASP.NET MVC и смог создать небольшой сайт. Все отлично работает.

Теперь мне нужно передать мета-теги страницы (заголовок, описание, ключевые слова и т. Д.) Через ViewData. (Я использую главную страницу).

Как вы справляетесь с этим? Заранее спасибо.

Ответы [ 2 ]

20 голосов
/ 27 сентября 2008

Вот как я сейчас это делаю ...

На главной странице у меня есть заполнитель содержимого с заголовком, описанием и ключевыми словами по умолчанию:

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

А затем на странице вы можете переопределить весь этот контент:

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

Это должно дать вам представление о том, как его настроить. Теперь вы можете поместить эту информацию в свои ViewData (ViewData ["PageTitle"]) или включить ее в свою модель (ViewData.Model.MetaDescription - будет иметь смысл для сообщений в блоге и т. Д.) И сделать ее управляемой данными.

13 голосов
/ 29 сентября 2008

Поместите это в свои viewdata! Сделайте что-то вроде следующего ...

BaseViewData.cs - это класс viewdata, который все другие классы viewdata наследуют от

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

Тогда ваш класс Site.Master (или любой другой) должен быть определен следующим образом:

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

Теперь на вашей странице Site.Master просто есть

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

А ты далеко смеешься!

HTHS, Charles

Ps. Затем вы можете расширить эту идею, например, поместите метод получения в свой класс пользователя (IPrincipal) в класс LoggedInBaseViewData.

...