从部分视图中包含/写入部分

时间:2015-12-03 00:25:33

标签: asp.net-mvc razor

是否可以包含部分文件中定义的部分?如果是这样,怎么样?

我的部分名为MetaTags.cshtml,其中包含MetaTags部分。我使用了一个部分,因为我希望视图能够在需要时使用自定义标记覆盖它 - 例如;对于博客帖子页面,用户可以添加自定义facebook元标记。该部分部分是为了使_Layout.cshtml更易于管理和代码分离。

以下用法不起作用:_Layout.cshtml

<head>
    @RenderSection("MetaTags", required: true)

    <title>@ViewBag.Title - My ASP.NET Application</title>

    ...
</head>

1 个答案:

答案 0 :(得分:0)

如果您在View(非部分视图)中设置该部分,它应该可以正常工作。

部分无法使用section,但您可以使用其他方式(如ViewBag或Custom Html帮助程序)来实现此目的。

以下是ViewBag方法的示例:

你的_Layout

中的

     @Html.Partial("partial",  new ViewDataDictionary { {"vb", ViewBag}})

    @if (ViewBag.MetaInfo != null)
    {
        var metaDict = ViewBag.MetaInfo as IDictionary<string, string>;

        if(metaDict != null)
        {
            foreach (var item in metaDict)
            {
                <meta name="@item.Key" content="@item.Value" />
            }
        }
    }
</head>

然后在局部视图中:

@{
    ViewBag.LayoutPageVB = ((dynamic)ViewData["vb"]);
    var metaDict = new Dictionary<string, string>();
    metaDict.Add("title", "c");
    ViewBag.LayoutPageVB.MetaInfo = metaDict;
}

您将获得元标记标题为c

就个人而言,我认为这不是一个好方法,并不是部分更新布局的反应,而是实现您所需要的一种方式。