2011-08-17 70 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它使我的应用程序快速且丰富的用户界面。