MVC - 从View写入Head部分

时间:2013-03-23 20:33:10

标签: asp.net-mvc asp.net-mvc-4

我需要在视图的页面部分中呈现元标记。例如,视图包含所有产品信息,我想将产品信息添加到头部,但只能从产品页面访问此信息。

有没有人有任何想法?

由于

2 个答案:

答案 0 :(得分:10)

在布局中,在头部定义一个部分。我们可以使用RenderSection辅助方法来执行此操作。

如果要在布局页面中呈现可选内容部分,请使用RenderSection方法。所以我们将像这样更新我们的布局

<head>
  <title>@ViewBag.Title</title>
  <script src="@Url.Content("~/Scripts/jquery.min.js")" type="text/javascript" />
  @RenderSection("MetaContent", false)
</head>
<body>
 @RenderBody()
</body>

现在,在您的网页/视图中,您可以传递此部分的内容。我会在viewmodel / base viewmodel中添加一个新属性来保存元描述。因此,在您的GET Action方法中,您可以设置MetaDescription属性值。

在您看来,它是对ProductViewModel进行强类型化的

@model ProductViewModel
<h1>@Model.ProductName</h1>
<div>@Model.ProductDesc</div>
@section MetaContent
{
  <meta name="description" content="@Model.MetaDescription" />
}

当我们在布局中定义部分时,我们使用false作为第二个参数值。这意味着此部分不是必需的。您无需从所有视图/页面传递元信息。

查看Scottgu的blog post部分和布局。

答案 1 :(得分:2)

查看定义和使用部分 - 它们允许您从视图中写入其他区域。

或者在ViewBag中定义元标记项,在头部写出ViewBag.Meta作为元标记,并在控制器中填充ViewBag属性 - 顺序正常。