如何将视图中的“RenderBody”和“RenderBody”内容作为单独的“标题”和“页脚”文件提供?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将视图中的“RenderBody”和“RenderBody”内容作为单独的“标题”和“页脚”文件提供?相关的知识,希望对你有一定的参考价值。

注意:我在发布此问题之前找到了解决方案,因此我将使用我的解决方案回复自己。

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

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

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

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

答案

这是我找到的解决方案:

在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"]

而已!

以上是关于如何将视图中的“RenderBody”和“RenderBody”内容作为单独的“标题”和“页脚”文件提供?的主要内容,如果未能解决你的问题,请参考以下文章

如何将@RenderBody() 分成两部分

@RenderSection,@RenderPage,@RenderBody介绍

ASP.NET MVC载入页面常用方法

@RenderBody() 与画布

在剃刀视图引擎中转义@字符

RenderBody 和 RenderSection 的区别