2012-02-29 128 views
3

我也注意到了很多,我投入我的看法字段是控制邏輯:MVC3模型數據分離

@if (Model.IsAdmin) { 
    <p>You're an admin</p> 
} 

我的MVC應該如何工作的理解是什麼進入模型應該更像一個數據,它返回,如果它是一個窗體,它是供用戶看到/更改等。

是否將控制邏輯放入視圖不良實踐?將控制邏輯傳遞給MVC中的視圖的約定是什麼?

回答

4

是否把控制邏輯放在視圖中不好的做法?

不,你可以非常好地在視圖中查看邏輯來有條件地顯示或隱藏某些部分。視圖中的特定示例非常好。

+1

+1視圖中的邏輯「有條件地顯示或隱藏某些部分」是這裏的要點。 – jgauffin 2012-02-29 15:44:22

1

如果你的視圖中有很多控制邏輯,那麼我的建議是處理控制器中的控制邏輯,然後針對不同的角色有不同的視圖。

控制器邏輯

if(IsAdmin) 
    return View('AdminPage') 
else 
    return View('UserPage') 

的思想是保持你的意見只集中上顯示給定給他們的數據,並讓邏輯被分離成背景(控制器)。

但是,如果你只有在幾個地方發生這種情況,那麼它可能並沒有那麼糟糕。沒有看到你的完整代碼,我不能肯定地說,沒有什麼東西完全以黑色和白色分開。

+0

即使差別很小?它似乎不是非常乾燥的,遍佈各地的意見,以保持邏輯的意見 – 2012-02-29 15:42:10

+0

這正是我想要做的。如果差異很小,那麼這並不壞(正如其他人所建議的那樣)。但是,如果由於控制邏輯而導致一半視圖發生變化,那麼我會建議創建另一個視圖。另外,如果只有內容在變化,那麼也許你可以創建一個在控制器中更新的模型(如Stephen所建議的那樣)。但是,如果它只是小件物品,那麼你應該保持原樣。這得到我的觀點,答案不一定是黑色和白色 – 2012-02-29 15:49:53

1

這個特別的例子似乎沒什麼問題,你提出(在視圖域)的數據(模型域),以及你所得到的是基於您接收到的數據。

典型的經驗法則是,如果它比1-2條件@if更復雜,則將其拆分爲不同的,更專業化的視圖(或使用專業化的局部視圖),但實際上你真的永遠不會看到沒有MVC項目中的流量控制(甚至不僅僅是ASP.NET的實現)。

+0

非常好的經驗法則 - 我想我會採納。 – 2012-02-29 15:51:46

1

如果需要,您可以將其添加到控制器。

if(user.IsAdmin) 
    ViewBag.WelcomeMessage = "You are an admin"; 
else 
    ViewBag.WelcomeMessage = "You are a user"; 
0

您應該使用角色進行授權而不是設置屬性。像那樣。事情是這樣的:

@if(User.IsInRole("Admin")) { 
    <p>You're an Admin!</p> 
} 

如果你願意,你可以封裝此爲Razor helper或創建一個HTML幫助,使這個清潔劑(如果你在很多地方使用它)