从控制器传递数据到视图有两种方式:一种是松散类型的(使用ViewBag或ViewData),另一种是强类型的。大多数人建议使用后者,因为它具有强大的编译时检查功能。
在动态web应用程序中,我们遇到需要将多个实体从控制器传递到视图的情况。在这种情况下,一个人可以传递一个实体作为模型,并在ViewBag字典中休息。或者可以创建一个全新的ViewModel类,合并各种实体,然后将其传递给视图。
最近,我遇到了这样一个问题;我需要传递一个类别模型,其中包含子类别和产品的列表,并将其注册为属性。然后在视图中,我需要显示子类别,并确保如果产品集合超过10个,就会对它们进行分页。因此,我不能对类别模型或产品模型使用强类型视图。
这个解决方案是由同行tvanfosson和Ufuk Hacıoğulları(非常感谢两者)在这篇文章中提出的。那就是使用ViewModel。我仍在努力理解和解决它,这似乎是正确的解决方案。
问题:这是处理这种情况的更好方法吗?此外,何时建议使用ViewModel以及何时绕过它以支持ViewBag &一个模型。
Viewmodel类的唯一目的是包含(强类型)数据,这些数据将通过操作方法发送给视图。
因此,正如您所提到的问题的答案所建议的那样,创建一个Viewmodel类,其中包含视图中所需的所有数据的属性。
使用Viewbag的优点是您没有创建单独类的开销。缺点是没有编译时类型检查和智能感知。