我有控制器PlayerController
和內部操作:View
,Info
List
。 所以在網址「/播放器/視圖」我得到的結果與默認佈局。根據url更改控制器中的佈局
我想根據請求「/ External/View」獲得不同佈局的結果。
我該如何做到這一點?
我有控制器PlayerController
和內部操作:View
,Info
List
。 所以在網址「/播放器/視圖」我得到的結果與默認佈局。根據url更改控制器中的佈局
我想根據請求「/ External/View」獲得不同佈局的結果。
我該如何做到這一點?
雖然可以覆蓋從控制器的佈局已在另一個答案被提出,在我看來,這意味着控制器越來越剛剛太參與確定用戶界面將是什麼。最好把這個純粹留給Views來決定。
的最接近你的要求是要做到這一點在當前的"~/Views/_ViewStart.cshtml"
:
@{
if(Context.Request.Path.StartsWith("/External", StringComparison.OrdinalIgnoreCase))
Layout = "~/Views/_ExternalLayout.cshtml";
else
Layout = "~/Views/_Layout.cshtml";
}
哪裏"~/Views/_ExternalLayout.cshtml"
是你選擇的佈局。
可能想檢查領先的"/"
在那裏是正確的,我不記得它是否是。
如果你把這個放在現有的_ViewStart中,那麼任何正在渲染的視圖都會響應一個以"/External"
開頭的url來使用這個新的佈局,否則就會使用'普通'的佈局。
另一種方法是使用路由表添加可用於此處的路由值以作出佈局決策;但我已經採用這種方法來保持簡單。
您可以指定在'ExternalController'控制器操作中返回視圖時應該使用哪個佈局。
return View("View", "~/Views/Shared/_AnotherLayout.cshtml")
謝謝,你安全我的日子:D – 2013-01-18 07:06:16
我將使用相同的PlayerController「/外部/視圖」。所以我應該以某種方式指定路由? – 2012-03-21 09:07:14
@NikitaMartyanov - 由於您重新使用相同的控制器,所以稍微改變了我的答案,原始解決方案適用於不同的控制器,但不適用於重複使用不同URL的視圖和控制器。 – 2012-03-21 09:22:42
謝謝安德拉斯 - 我使用這種方法(我也添加了路由,所以「Exteranal/View」被映射到'PlayerController' – 2012-03-21 12:37:55