我需要在视图的页面部分中呈现元标记。例如,视图包含所有产品信息,我想将产品信息添加到头部,但只能从产品页面访问此信息。
有没有人有任何想法?
由于
答案 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属性 - 顺序正常。