如果我使用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
答案 0 :(得分:4)
虽然在视图中总结这些总数可能是微不足道的,但我总是选择将这些总数放在我的ViewModel中以供视图使用。这使我能够对我的总数是准确的单元测试。如果在视图中完成了总计的逻辑,那么就没有简单的方法来测试这样的事情。这使视图逻辑变得简单并且仅限于显示值,而不是执行将值相加所需的“逻辑”。
将这个提升到一个新的水平,如果“总数”的规则是负数量不会“计入”总数呢?然后,视图不仅要知道如何对项目进行求和,还需要知道“不计数负值”业务规则。我发现最好让服务器尽可能多地完成工作,并使视图尽可能“简单”(薄)。
在您的示例中,我可能有一个类似于:
的ViewModelPublic 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
(注意,除了列总数之外,我还在我的示例中添加了“行总计”。)
答案 1 :(得分:0)
我会提倡使用jQuery。您可以编写一个简单的函数,迭代表列中的所有单元格值,对它们进行总计,然后将总计设置为相应单元格中的值。
这是首选,因为今天禁用javascript的客户端计算机的数量几乎没有,因此它将始终有效。此外,它可以使您的模型类更清晰,并且在缩放时它将减少来自Web服务器的负载(尽管负载很小)。
此外,随着列数的增加,所需的jQuery将保持不变,而传递给客户端的其他数据量只会随着服务器端方法的增加而增加。
很多人说View逻辑应该是最小的,但这理想地指的是具有一些服务器端注释的逻辑,例如用户角色,身份验证,访问控制,条件渲染等。我在我的视图中使用了很多jQuery它使我的应用程序保持快速和丰富的UI。