2012-03-21 9 views

答えて

12

、私の意見では、これはコントローラがちょうどすぎ 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つの方法は、ルーティングテーブルを使用して、ここで使用してレイアウトを決定できるルート値を追加することです。私はこのアプローチを単純に保つために行ってきました。

+0

"/ External/View"に同じPlayerControllerを使用します。だから私は何とかルーティングを指定する必要がありますか? –

+0

@NikitaMartyanov - あなたが同じコントローラを再利用しているので、私の答えが少し変わってしまいました。オリジナルの解決策はコントローラごとに異なりますが、異なるURLのビューとコントローラを再利用するときには役に立ちません。 –

+0

ありがとう、アンドラス - 私はこのアプローチを使用しました(また、私は "Exteranal/View"が 'PlayerController'にマップされるようにルートを追加しました –

8

'ExternalController'コントローラアクション内でビューを返すときに使用するレイアウトを指定できます。別の答えで提案されているようにあなたは、コントローラからレイアウトを無効にすることができますが

return View("View", "~/Views/Shared/_AnotherLayout.cshtml") 
+0

ありがとうございます、私の一日は安全です:D –

関連する問題