嗨,我不确定这是否正确,但是我想用动态元标记构建一个网站。
有些元标记已硬编码到系统中,但有些需要动态加载,因此我可以在相应的操作中设置它们。
因此,我需要一个带有部分视图甚至是子操作之类的元标记构建逻辑,但是我不确定正确的方法。
我希望它即使在动作中什么都没有的情况下也能正常工作,(然后应该加载默认值)
最好的方法是在layout.cshtml中执行子操作?
最佳答案
您可以尝试使用ViewBag对象。我将使用Dictionary,但是如果meta标签不是那么动态的话,您也许可以使用更强类型的东西。
在(Base?)Controller构造函数中,在ViewBag中创建一个词典来保存meta标签:
/* HomeController.cshtml */
public HomeController()
{
// Create a dictionary to store meta tags in the ViewBag
this.ViewBag.MetaTags = new Dictionary<string, string>();
}
然后在您的操作中设置一个meta标签,只需将其添加到字典中即可:
/* 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>