【发布时间】: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";
反过来,特定于客户端的 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 按照惯例。
我知道支持cascading nested layouts was recently added to ServiceStack,所以我一定是做错了什么。
【问题讨论】:
标签: asp.net-mvc razor servicestack