複数のクライアントで使用される 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のロジックは、ログインしているユーザーの ID をチェックし、次のような適切なレイアウトの種類を (簡略化された形式で) 設定します。
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の両方がデフォルト要素とカスタム要素の両方で構成される最終的なレイアウトで表示されるカスケード ネスト レイアウト効果を実現したいと考えていました。
残念ながら、ビュー内のレイアウトの 1 つをハードコードしたり、レイアウト ページのパスを明示的に指定したりしても機能しません (例:Layout="~/Views/ClientA/LayoutA.cshtml"
の代わりにLayout="LayoutA"
)。
私は何を間違っていますか?
アップデート
クライアント固有のレイアウトに名前を変更DefaultLayout.cshtml
することで、トップレベルの共有レイアウトが機能するようになりましたが、まだ適用されていないため、明らかに SS Razor は慣例により単純にフォールバックします。_Layout.cshtml
LayoutA
LayoutB
_Layout.cshtml
ネストされたレイアウトのカスケードのサポートが最近 ServiceStack に追加されたことを知っているので、何か間違ったことをしているに違いありません。