コントローラPlayerController
とその中のアクション:View
、Info
、List
があります。 URLの "/ Player/View"では、デフォルトのレイアウトで結果が得られます。コントローラのレイアウトをURLに応じて変更してください
"/ External/View"リクエストで別のレイアウトの結果を取得したいと考えています。
これをどのように達成できますか?
コントローラPlayerController
とその中のアクション:View
、Info
、List
があります。 URLの "/ Player/View"では、デフォルトのレイアウトで結果が得られます。コントローラのレイアウトをURLに応じて変更してください
"/ External/View"リクエストで別のレイアウトの結果を取得したいと考えています。
これをどのように達成できますか?
、私の意見では、これはコントローラがちょうどすぎ UIがどうなるかを決定に関与してきていることを意味します。決定するためにこれを純粋にViewsに任せるのがベストです。
あなたが求めているものに近いが、あなたの現在の"~/Views/_ViewStart.cshtml"
でこれを行うことです。
"~/Views/_ExternalLayout.cshtml"
は、あなたの代わりのレイアウトである
@{
if(Context.Request.Path.StartsWith("/External", StringComparison.OrdinalIgnoreCase))
Layout = "~/Views/_ExternalLayout.cshtml";
else
Layout = "~/Views/_Layout.cshtml";
}
。
先頭にある"/"
が正しいかどうかチェックしたい場合は、それが覚えていないかもしれません。
これを既存の_ViewStartに挿入すると、"/External"
で始まるURLに対応してレンダリングされているすべてのビューがこの新しいレイアウトを使用します。そうでない場合は、「通常の」レイアウトが使用されます。
もう1つの方法は、ルーティングテーブルを使用して、ここで使用してレイアウトを決定できるルート値を追加することです。私はこのアプローチを単純に保つために行ってきました。
'ExternalController'コントローラアクション内でビューを返すときに使用するレイアウトを指定できます。別の答えで提案されているようにあなたは、コントローラからレイアウトを無効にすることができますが
はreturn View("View", "~/Views/Shared/_AnotherLayout.cshtml")
ありがとうございます、私の一日は安全です:D –
"/ External/View"に同じPlayerControllerを使用します。だから私は何とかルーティングを指定する必要がありますか? –
@NikitaMartyanov - あなたが同じコントローラを再利用しているので、私の答えが少し変わってしまいました。オリジナルの解決策はコントローラごとに異なりますが、異なるURLのビューとコントローラを再利用するときには役に立ちません。 –
ありがとう、アンドラス - 私はこのアプローチを使用しました(また、私は "Exteranal/View"が 'PlayerController'にマップされるようにルートを追加しました –