Asp.net mvc 3 asp.net mvc 3中元标记的正确方法

Asp.net mvc 3 asp.net mvc 3中元标记的正确方法,asp.net-mvc-3,razor,Asp.net Mvc 3,Razor,嗨,我不确定这是否是正确的方法,但我想建立一个动态元标签网站 有些元标记是硬编码到系统的,但有些需要动态加载,我应该能够在相应的操作中设置它们 所以我需要一个元标记构建逻辑,比如局部视图,甚至是子操作,但我不确定正确的方法 我希望它能工作,即使在一个动作中没有任何关于它的内容,(它应该加载默认值) layout.cshtml中的childaction是最好的方法吗?您可以尝试使用ViewBag对象来实现这一点。我将使用字典,但如果元标记没有那么动态,您可能可以使用更强类型的东西 在(基本?)控制

嗨,我不确定这是否是正确的方法,但我想建立一个动态元标签网站

有些元标记是硬编码到系统的,但有些需要动态加载,我应该能够在相应的操作中设置它们

所以我需要一个元标记构建逻辑,比如局部视图,甚至是子操作,但我不确定正确的方法

我希望它能工作,即使在一个动作中没有任何关于它的内容,(它应该加载默认值)


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

您可以尝试使用ViewBag对象来实现这一点。我将使用字典,但如果元标记没有那么动态,您可能可以使用更强类型的东西

在(基本?)控制器构造函数中,在ViewBag中创建一个字典以保存元标记:

/* HomeController.cshtml */
public HomeController()
{
    // Create a dictionary to store meta tags in the ViewBag
    this.ViewBag.MetaTags = new Dictionary<string, string>();
}
或者,您甚至可以将其添加到视图(.cshtml)中:

最后,在布局页面中,您可以检查字典是否存在,并循环输出每个条目的元标记:

/* _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>
/*\u Layout.cshtml*/
@视图包。标题
@if(ViewBag.MetaTags!=null)
{
foreach(ViewBag.MetaTags.Keys中的var标记)
{
}
}
/* 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>