我正在开发一个将由多个客户端使用的基于 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";
反过来,特定于客户端的LayoutA和LayoutB都使用DefaultLayout.cshtml 中定义的共享基本设计/布局,方法是在顶部包含以下内容:
@{
Layout = "~/DefaultLayout.cshtml";
}
我希望实现级联嵌套布局效果,其中SomeSharedViewPage.cshtml和SomeSharedContentPage.cshtml都显示为包含默认元素和自定义元素的最终布局。
不幸的是,即使我对视图中的一个布局进行硬编码,也没有明确指定布局页面的路径(例如Layout="~/Views/ClientA/LayoutA.cshtml"
,而不是Layout="LayoutA"
),它也不起作用。
我究竟做错了什么?
更新
DefaultLayout.cshtml
我通过重命名为特定于_Layout.cshtml
客户端的布局来使顶级共享布局工作,LayoutA
但LayoutB
仍然没有被应用,所以显然 SS Razor 现在只是_Layout.cshtml
按照惯例回退了。
我知道最近在 ServiceStack 中添加了对级联嵌套布局的支持,所以我一定做错了。