2011-08-17 81 views
1

如果我使用ASP.net MVC標準列表視圖有一種簡單的方法來創建視圖中的總數?我可以在這裏複製標準列表代碼,但我在這裏沒有做任何事情。在asp.net MVC列表視圖中顯示總數?

我「可以」將總數作爲模型中的另一個對象進入視圖,但它仍然需要以某種方式在視圖中處理。

我現在已經看起來有點像:

 ColA colb ColC 
Item 1  1 2 
Item 2  1 2 

我要的是:

 ColA colb ColC 
Item 1  1 2 
Item 2  1 2 
Total 3  2 4 

回答

4

雖然它可能是微不足道的,總結這些總數右視圖,我一直選擇將這些總數正確地放在ViewModel中。這給了我單元測試的能力,我的總數是準確的。如果總體邏輯是在視圖中完成的,那麼就沒有簡單的方法來測試這樣的事情。這使得視圖邏輯簡單並且僅限於顯示值,而不是執行將值累加起來所需的「邏輯」。

把這個提升到一個新的水平,如果一個「總數」的規則是負數不會「計算」總數呢?那麼這個觀點不僅要知道如何總結這些項目,還需要知道「不計負數」的商業規則。我發現最好讓服務器儘可能地完成儘可能多的工作,並儘可能使視圖「簡單」(精簡)。

在你的榜樣,我可能有一個視圖模型看起來像:(請注意,我添加了一個「行彙總」,以我的例子還有,除了列總計)

Public Class MyViewModel 
    Public Property Columns As List(Of ColInfo) 
    Public Property Items As List(Of RowItem) 
End Class 

Public Class ColInfo 
    Public Property Id As Guid 
    Public Property Name As String 
    Public Property ColTotal As Integer 
End Class 

Public Class RowItem 
    Public Property Name As String 
    Public Property ColValues As Dictionary(Of Guid, Integer)) ' Value lookup for each column 
    Public Property RowTotal As Integer 
End Class 

+0

你是否以某種方式改變視圖使其看起來像一個「總計」行?我在想,如果你想在總數之前排隊。或者你只是調用行名稱總計並繼續前進?我可以試試看看它的外觀。 – Maestro1024

+0

@ Maestro1024當然,您可以改變視圖以適應您的任何要求。 – ckittel

0

我會主張爲此使用jQuery。您可以編寫一個簡單的函數,對錶格列中的所有單元格值進行迭代,然後將它們合計,然後將其總和設置爲相應單元格中的值。

這是首選,因爲今天,JavaScript禁用的客戶機數量幾乎沒有,因此它將始終工作。而且,它可以讓你的模型類更加清晰,並且在縮放時會減少Web服務器的負載(儘管負載很小)。

此外,隨着列數的增加,所需的jQuery將保持不變,而傳遞給客戶端的附加數據量只會隨着服務器端方法而增加。很多人都說視圖邏輯應該是最小的,但是這理想上指的是具有一些服務器端註釋的邏輯,例如用戶角色,身份驗證,訪問控制,條件呈現等。我在我的視圖中使用了很多jQuery它使我的應用程序快速且豐富的用戶界面。