您好我不确定这是否是正确的方法,但我想构建一个包含动态元标记的网站。
某些元标记被硬编码到系统中,但有些元标记需要动态加载,我可以在相应的操作中设置它们。
所以我需要一个元标记构建逻辑,其中包含部分视图,甚至是子动作,但我不确定正确的方法。
即使动作中没有任何内容,我也希望它可以工作(它应该加载默认值)
layout.cshtml中的childaction是最好的方法吗?
答案 0 :(得分:2)
您可以尝试使用ViewBag对象。我将使用一个词典,但如果元标记不是那么动态,你可以使用更强类型的东西。
在你的(Base?)Controller构造函数中,在ViewBag中创建一个字典来保存元标记:
/* HomeController.cshtml */
public HomeController()
{
// Create a dictionary to store meta tags in the ViewBag
this.ViewBag.MetaTags = new Dictionary<string, string>();
}
然后在动作中设置元标记,只需添加到dictinary:
/* HomeController.cshtml */
public ActionResult About()
{
// Set the x meta tag
this.ViewBag.MetaTags["NewTagAddedInController"] = "Pizza";
return View();
}
或者,你甚至可以在视图中添加它(.cshtml):
/* About.cshtml */
@{
ViewBag.Title = "About Us";
ViewBag.MetaTags["TagSetInView"] = "MyViewTag";
}
最后,在“布局”页面中,您可以检查是否存在字典,并循环输出每个条目的元标记:
/* _Layout.cshtml */
<head>
<title>@ViewBag.Title</title>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />
@if (ViewBag.MetaTags != null)
{
foreach (var tag in ViewBag.MetaTags.Keys)
{
<meta name="@tag" content="@ViewBag.MetaTags[tag]" />
}
}
</head>