通过将逻辑和您的视图混合在一起,您正在走下一个滑坡。MVC 旨在减少不同层(模型、视图和控制器)之间的耦合,以使代码更易于维护和测试等。
所以让我们试着清理一下。首先,Total是一段数据,这意味着它应该是模型的一部分:
public class ContentViewModel 
{
    public List<User> Users { get; set; }
    public int TotalHours
    {
        get
        {
            return Users.Sum(u => u.Hours); // Assuming User has an Hours property
        }
    }
}
然后控制器应该处理模型的创建并为其提供数据。像这样的东西:
public ActionResult Index()
{
    ContentViewModel viewModel = new ContentViewModel();
    viewModel.Users = db.Users.ToList();
    return View(viewModel);
}
现在您有了所需的数据,您可以减少当前在视图中使用的许多逻辑(例如使用 foreach 和Totalvar):
@model Reports.ViewModels.ContentViewModel
@Html.DisplayFor(m => m.Users)
<div>Total Hours: @Model.TotalHours</div>
Html.DisplayFor并Html.EditorFor使用所谓的显示/编辑器模板,它们会自动为您循环遍历集合,为每个项目呈现一个模板。为了利用这一点ContentViewModel,您需要创建一个显示模板。为此,您需要在视图所在的位置创建一个文件夹,并将其命名为DisplayTemplates. 例如,如果您的视图是~/Views/Home/Index.cshtml,则需要创建文件夹:~/Views/Home/DisplayTemplates。  
右键单击该文件夹以添加新视图。在出现的对话框中,您要创建一个强类型视图,选择您要传递给模板的类型(在我的示例中,User是类型而不是List<User>),使其成为局部视图并确保给它与类型同名(再次,User)。一旦有了模板,就可以像在普通视图中一样使用 HTML 帮助器。像这样的东西:
@model Models.User
@Html.LabelFor(m => m.Name)
@Html.DisplayFor(m => m.Name)
现在,您将事物分解为可管理的块。如果您想了解有关使用显示/编辑器模板的更多信息,我强烈建议您阅读Brad Wilson关于该主题的文章系列。即使它是为 MVC 2 编写的,它仍然适用。