2010-03-23 47 views
6

基於不同的用戶角色,對於MVC中的相同URL有多個視圖被認爲是不好的做法?例如: http://www.domain.com/ViewProductID/123將顯示一個普通用戶一個「正常」的產品頁面,它會顯示一個「增強型」(產品統計數據,編輯標題等能力)的版本給別人以admin身份登錄。MVC - 相同的URL,多個視圖

如果這是不好的做法,爲什麼?如果沒關係,實現它的最好方法是什麼? 2個獨立模板或1個模板分散在if..else中?

謝謝!

回答

2

我認爲它的罰款修改基於上下文的觀點;它總是發生。無論你做if .. else還是多個aspx文件真的取決於多麼是不同的。一對夫婦的備用選項:

1)使用Html.RenderAction反對的AdminController行動呼籲嵌入的東西,在AdminController可以返回空的結果,如果用戶是不是管理員

,或者更好:

2)根據用戶的角色/狀態使用不同的母版頁。通過這種方式,您可以將設置主控制器的邏輯放入他不喜歡的動作過濾器中,然後執行一次,但將其應用到任何有意義的位置。只要確保備用母版頁與contentplaceholderId的視圖兼容。

+0

+1尼斯和詳細的答案。 – systempuntoout 2010-03-23 18:31:17

1

在我看來,這是罰款,對用戶和管理員相同的URL。真正的問題在於用戶的可用性。這對他們有什麼影響嗎?許多使用MVC的站點根據授權級別呈現額外的內容或鏈接。

您使用的是什麼框架和語言?如果您有類似部分視圖可供您使用,則可能不需要完全不同的模板。

1

如果頁面不會是顯着不同(即他們表現出相同的數據,可能有更多的管理員),那麼我會在同一個文件說把所有的代碼。如果可能的話,使用基於角色的能力,管理制度,使你可以問的東西像下面這樣:

if can? :create, Users do 
    ... 
else 
    ... 
end 

然後,你設置你的能力,使管理員和經理能夠創建用戶。這樣,您不必擔心用戶是誰,只需要用戶被允許執行的操作。

1

基本上你在談論產生不同的頁面,這是做一個很平常的事權限。考慮Facebook上的默認登陸頁面,供2個不同的人使用。

執行相同爲別的:結合常見的元素,你可以重複使用。簡單的差異可能只會在if .. else和更復雜的差異屬於不同的模板。

相關問題