【发布时间】:2012-02-06 22:28:05
【问题描述】:
我正在处理一个 MVC3 项目,该项目有一个带有关联强类型视图模型的视图。我的任务是向该视图添加一个可选部分,该部分将包含第二个模型的数据,其中大约一半与第一个模型共享。
我的问题是,实现这一点的最佳方法是什么?我是否应该将可选模型表示的对象添加到视图模型并尝试从那里映射值?
如果我这样做,如何将编辑器与两个模型关联?
【问题讨论】:
标签: asp.net-mvc-3 model viewmodel
我正在处理一个 MVC3 项目,该项目有一个带有关联强类型视图模型的视图。我的任务是向该视图添加一个可选部分,该部分将包含第二个模型的数据,其中大约一半与第一个模型共享。
我的问题是,实现这一点的最佳方法是什么?我是否应该将可选模型表示的对象添加到视图模型并尝试从那里映射值?
如果我这样做,如何将编辑器与两个模型关联?
【问题讨论】:
标签: asp.net-mvc-3 model viewmodel
将可选模型添加到视图模型是最佳选择,因为与 ViewBag 不同,它是类型安全的,并且您仍然可以利用 html 助手。请记住在渲染第二个模型之前检查它的空引用(因为它是可选的)。 对于共享属性,您的视图模型可以具有特殊的 getter/setter,它们将保持两个模型在内部同步。
【讨论】:
string Name { set { this.firstModel.Name = value; this.secondModel.Name = value; }。虽然这是可能的,但它可能不是最好的设计,所以关于你的第二个问题,如果没有关于这个特定用例的更多信息,我不能说这是否是一种体面的设置方式。或许您可以先提供更多信息,说明为什么需要共享属性。
我想我理解您的要求,这就是我过去的实现方式。
将可选模型作为参数添加到视图模型中,然后创建一个分部视图,该视图键入到该可选模型中。如果满足允许显示该局部视图的条件,则将 viewmodel.optionalmodel 传递给该局部视图。
您只需要注意参数的重叠会导致任何令人头疼的问题(如在空引用中)
【讨论】: