首页 > 解决方案 > 如何将视图的“高于 RenderBody”和“低于 RenderBody”内容作为单独的“页眉”和“页脚”文件提供?

问题描述

注意:我在发布这个问题之前想出了一个解决方案,所以我会用我的解决方案来回复自己。

我有一个 .NET MVC 网站,它使用在层次结构中设置的视图,通过 Section 和 RenderSection 相互传递数据。我有一个名为“Master”的顶级视图,其中有几个继承自它的视图。

我有两个不同的外部应用程序,我需要能够将 MVC 网站的“外部模板”作为单独的页眉和页脚文件动态导入,对应于顶层视图的“RenderBody”行上方和下方的代码,分别。

如何进行设置以便在 MVC 应用程序中保留我的分层视图结构,并将这些单独的页眉和页脚代码文件提供给外部应用程序?

我尝试将 RenderBody 上方和下方的 Master.cshtml 代码移动到页眉和页脚部分视图中,目的是在 Master.cshtml 以及供外部使用的新 Header.cshtml 和 Footer.cshtml 文件中使用这些部分视图应用程序。问题是我还没有找到一种方法来使用与 Master.cshtml 代码混合的 RenderSection 行。

标签: .netmodel-view-controllerumbraco

解决方案


这是我找到的解决方案:

在 Master.cshtml 中:

ViewDataDictionary globalHeaderData = new ViewDataDictionary {
    {"sectionName1", RenderSection("sectionName1", false)},
    {"sectionName2", RenderSection("sectionName2", false)},
};

ViewDataDictionary globalFooterData = new ViewDataDictionary {
    {"sectionName3", RenderSection("sectionName3", false)},
    {"sectionName4", RenderSection("sectionName4", false)},
};

@Html.Partial("GlobalHeader", Model, globalHeaderData)
@RenderBody()
@Html.Partial("GlobalFooter", Model, globalFooterData)

然后在 GlobalHeader 和 GlobalFooter 中,将每个 RenderSection 行替换为:

@ViewData["theSectionName"]

而已!


推荐阅读