【问题标题】:Setting the layout of ServiceStack Razor views on per-customer basis基于每个客户设置 ServiceStack Razor 视图的布局
【发布时间】:2013-08-12 11:08:43
【问题描述】:

我正在开发一个将由多个客户端使用的基于 ServiceStack 的 Web 应用程序。有一个默认布局/设计将在没有客户特定的情况下使用。因此,我希望利用 ServiceStack Razor 中现在提供的对级联布局模板的支持,但没有成功。

以下是我在项目中构建视图的大致方式:

\
    _ViewStart.cshtml
    DefaultLayout.cshtml
    SomeSharedContentPage.cshtml
    \Views
        SomeSharedViewPage.cshtml
        \ClientA
            LayoutA.cshtml
            StylesA.css
        \ClientB
            LayoutB.cshtml
            StylesB.css

_ViewStart.cshtml 中的逻辑检查登录用户的身份并设置适当的布局类型,如下所示(以简化形式):

if (user.Client.ID == CLIENT_A_ID)
    Layout = "~/Views/ClientA/LayoutA.cshtml";
else
    Layout = "~/Views/ClientB/LayoutB.cshtml";

反过来,特定于客户端的 LayoutALayoutB 都使用 DefaultLayout.cshtml 中定义的共享基本设计/布局,包括以下内容在顶部:

@{
    Layout = "~/DefaultLayout.cshtml";
}

我希望实现级联嵌套布局效果,即 SomeSharedViewPage.cshtmlSomeSharedContentPage.cshtml 都显示为包含默认元素和自定义元素的最终布局。

不幸的是,即使我对视图中的一个布局进行硬编码,也无法明确指定布局页面的路径(例如,Layout="~/Views/ClientA/LayoutA.cshtml" 而不是 Layout="LayoutA")。

我做错了什么?


更新

我通过将 DefaultLayout.cshtml 重命名为 _Layout.cshtml 来使顶级共享布局工作,但客户端特定的布局 LayoutALayoutB 仍然没有被应用,所以显然 SS Razor 现在只是回退到_Layout.cshtml 按照惯例。

我知道支持cascading nested layouts was recently added to ServiceStack,所以我一定是做错了什么。

【问题讨论】:

    标签: asp.net-mvc razor servicestack


    【解决方案1】:

    根据我所做的测试,我认为 ServiceStack Razor 不支持 _ViewStart.cshtml。但是,您应该能够使用其他方法通过代码动态更改布局。例如,您可以这样设置:

    默认.cshtml

    <h2>Default</h2>
    

    Views\_Layout.cshtml(ServiceStack Razor 的默认值)

    @{
        if (user.Client.ID == CLIENT_A_ID)
            Layout = "_Layout2";
        else
            Layout = "_Layout3";
    }
    

    视图\_Layout2.cshtml

    <h1>Layout2</h1>
    @RenderBody()
    

    视图\_Layout3.cshtml

    <h1>Layout3</h1>
    @RenderBody()
    

    您还应该能够使用 \Views\ClientA\ALayout.cshtml,但您必须确保所有布局文件都使用唯一的名称,例如 ALayout.cshtml 和 BLayout.cshtml。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 2016-11-02
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多