2013-10-16 41 views
1

邏輯在視圖中是不允許的,但我想知道在視圖中是否接受使用LINQ。在視圖中使用LINQ

例如: 如果我有一個視圖呈現團隊的球員。在同一視圖的側邊欄中,我有一個呈現頂尖者或其他東西的小部件。我可以使用相同的球員集合並使用LINQ來獲得進球最多的前五名球員嗎?

我不是在尋找解決方案。我知道LINQ可以,但它是否遵循編碼準則(最佳實踐)?

更新: 我的應用程序乍一看很簡單。所以我想我可以使用我的DomainModels(實體)作爲我的視圖的模型。我現在完全分離了我的DomainModels並使用一個構建器來創建我的視圖模型。所有的linq邏輯現在都從視圖移到了構建器,非常乾淨。

+0

也許這可以幫助你:http://stackoverflow.com/questions/8413249/shuould-we-perform-linq-directly-in-asp-net-mvc-views – MUG4N

+0

我會有這個邏輯在我的控制器,絕對不在視圖 –

+0

但是解決方案是創建一個單獨的Topscorersmodel並將其填充到控制器中。然後把它添加到一個更大的模型,也有玩家作爲模型? –

回答

3

作爲一個經驗法則 - 假設您允許您的webapp作爲webservice,返回XML(或JSON或其他)而不是呈現HTML。當應用程序充當web服務時仍然需要的任何邏輯都是業務邏輯的一部分,應該放在控制器中。任何在Web服務模式下變成冗餘的邏輯都是表示邏輯,應該在視圖中。

Web服務是否需要獲取前5名玩家?是!所以這是業務邏輯,不應該在視圖中。

+0

好的,很好的解釋。另一個問題:我可以在視圖模型中定義LINQ嗎?導致一支球隊已經擁有了球員。所以如果我在團隊中定義了一個函數來迭代當前玩家集合並返回前5名玩家? –

+0

我對ASP.NET MCV方法不太熟悉,所以您需要獲得額外的意見。在RoR中,您將在模型中創建一個作用域(=有關查詢的方法),以便任何使用該模型的人都可以使用它。控制器爲視圖準備一個查詢,因此視圖可以將範圍應用於查詢。你不能在MVC.NET中這樣做,因爲視圖只能通過視圖模型訪問模型。您也不應該將該方法放在視圖模型中,因爲它只是一個不應該執行任何邏輯的容器。也許把這個方法放到模型中,然後把它寫到視圖模型中的一個域中? –

+0

我的應用程序乍一看很簡單。所以我想我可以使用我的DomainModels(實體)作爲我的視圖的模型。我現在完全分離了我的DomainModels並使用一個構建器來創建我的視圖模型。所有的linq邏輯現在都從視圖移到了構建器,非常乾淨。感謝您的回覆/意見。 –

3

在視圖中使用邏輯沒有任何問題,只要它是表示邏輯而不是業務邏輯。因此,你可以在視圖中使用linq。

在你的情況下,計算頂級得分球員,我認爲這將被視爲商業邏輯,而不是表象邏輯,應該在控制器中完成,而不是視圖。