嗨,我不确定这是否正确,但是我想用动态元标记构建一个网站。

有些元标记已硬编码到系统中,但有些需要动态加载,因此我可以在相应的操作中设置它们。

因此,我需要一个带有部分视图甚至是子操作之类的元标记构建逻辑,但是我不确定正确的方法。

我希望它即使在动作中什么都没有的情况下也能正常工作,(然后应该加载默认值)

最好的方法是在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>

10-08 07:09