如何在ASP.NET MVC中传递页面的元标记?

cis*_*ert 9 asp.net-mvc master-pages

我在过去几天玩ASP.NET MVC并且能够构建一个小站点.一切都很好.

现在,我需要通过ViewData传递页面的META标签(标题,描述,关键字等).(我正在使用母版页).

你是如何处理这个的?先感谢您.

Ric*_*cky 20

这是我目前正在做的...

在母版页中,我有一个内容占位符,其中包含默认标题,说明和关键字:

<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>
Run Code Online (Sandbox Code Playgroud)

然后在页面中,您可以覆盖所有这些内容:

<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>
Run Code Online (Sandbox Code Playgroud)

这应该可以让您了解如何设置它.现在,您可以将此信息放在ViewData(ViewData ["PageTitle"])中,或将其包含在您的模型中(ViewData.Model.MetaDescription - 对博客文章等有意义)并使其成为数据驱动的.


Cha*_*ino 13

把它放在你的viewdata中!做类似以下的事......

BaseViewData.cs - 这是一个所有其他viewdata类将继承的viewdata类

public class BaseViewData
{
    public string Title { get; set; }
    public string MetaKeywords { get; set; }
    public string MetaDescription { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后,您的Site.Master(或其他)类应定义如下:

public partial class Site : System.Web.Mvc.ViewMasterPage<BaseViewData>
{
}
Run Code Online (Sandbox Code Playgroud)

现在在您的Site.Master页面中

<title><%=ViewData.Model.Title %></title>
<meta name="keywords" content="<%=ViewData.Model.MetaKeywords %>" />
<meta name="description" content="<%=ViewData.Model.MetaDescription %>" />
Run Code Online (Sandbox Code Playgroud)

你笑了!

HTHs,查尔斯

PS.然后,您可以扩展这个想法,例如将一个getter到User(IPrincipal)类放入一个LoggedInBaseViewData类.