在asp.net mvc 3中正确识别元​​标记

时间:2011-04-28 08:28:33

标签: asp.net-mvc-3 razor

您好我不确定这是否是正确的方法,但我想构建一个包含动态元标记的网站。

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

所以我需要一个元标记构建逻辑,其中包含部分视图,甚至是子动作,但我不确定正确的方法。

即使动作中没有任何内容,我也希望它可以工作(它应该加载默认值)

layout.cshtml中的childaction是最好的方法吗?

1 个答案:

答案 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>