远程布局cshtml

时间:2017-09-12 14:39:38

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-3 razor

在ASP.NET MVC中,可以使用以下属性来分配本地布局页面:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

对于本地,我的意思是它需要驻留在同一个ASP.NET MVC项目中。

在我们的项目中,我们需要能够在不同的解决方案中共享一个布局页面,这些解决方案由不同团队在不同时间部署。因此,我们需要能够在运行时从中心位置分配布局页面。 我们不希望任何人必须获得最新的布局页面并将其放入他们的项目中+部署。

无法为布局属性分配远程URL(这似乎是合乎逻辑的)。 有人试过这样的事吗?

我正在考虑制作另一种布局扩展方法,该方法执行以下操作(例如this.SetRemoteLayout(“[url]”):

  • 同步良好缓存的http请求以从中央Web应用程序获取布局页面
  • 在本地下载布局页面,以便可以使用相对路径访问它。 “〜/查看/温度/ _Layout.cshtml”
  • 在内部为Layout属性分配下载文件的相对路径

有没有人这样做过?

1 个答案:

答案 0 :(得分:0)

我们将遵循下一个模式:

  • GAC中安装了一个中心DLL,其中包含HTML帮助程序(由框架团队管理)
  • 本地布局页面(由普通团队管理)将调用html助手来呈现整个布局
  • 我们将在html帮助器
  • 中定义/渲染通用部分

==>如果布局需要更改中央DLL,则调整并部署html帮助程序代码。然后,所有应用程序都将自动使用更新的布局,而无需重新部署其应用程序。

这是我们在html助手中定义部分的方法:

    public static IHtmlString RenderSectionCustom(this HtmlHelper html)
    {
        WebViewPage page = html.ViewDataContainer as WebViewPage;
        var section = page.RenderSection("CustomTop", false);
        return section == null ? MvcHtmlString.Empty : MvcHtmlString.Create(section.ToHtmlString());
    }

    public static IHtmlString DefineSectionCustom(this HtmlHelper html)
    {
        WebViewPage page = html.ViewDataContainer as WebViewPage;

        page.DefineSection("CustomTop", () =>
        {
            page.Write(MvcHtmlString.Create(" hello world (custom top section from HTML HELPER)!"));
        });

        return MvcHtmlString.Empty;
    }