是否可以使用仅创建视图所需的信息创建丰富的ViewModel?

时间:2011-03-29 13:03:27

标签: asp.net-mvc asp.net-mvc-3

我有一个具有复杂数据结构的ViewModel。我需要根据视图模型中的元素类型渲染不同的局部视图,如下所示:

[Validator(typeof(ViewModelValidator))]
class ViewModel {
  IEnumerable<Element> Elements;
}
class Element {
  string DisplayName;
  DisplayType DisplayType; // TextBox, Select, Radiobutton, Checkbox
  IEnumerable<ElementValue> Values; // could be a list of values for the dropdown
  int Group;
  etc...
}
class ElementValue {
  ...
}

我需要这个结构来构建具有动态输入元素的视图。当我提交表单时,我正在考虑发送我的表单/值的json表示,并有一个ValueProvider(可能是JsonValueProvider?)再次将值映射到我的ViewModel。我只需要用户添加数据,所以我可以只读取数据或将其映射到新对象,但假设我正在使用FluentValidation (http://fluentvalidation.codeplex.com/wikipage?title=mvc)那么我的服务器端验证是否正常?

所以我想我的问题是:我应该映射到我的ViewModel,即使我缺少有关Elements的所有信息(除了输入的值)或者我应该只映射到某个对象我可以验证然后找到其他方式显示客户端的错误?

1 个答案:

答案 0 :(得分:0)

我不知道这是否正确,但我一直认为View Models不应该非常复杂。当它变得复杂时,我们可能会使用View Model View模式,但是为了使用它。

我通常创建非常特定于视图的视图模型,但具有足够的属性,我需要“回读”并且需要进一步处理(制定决策)。这也包括隐藏的字段。并且由于使用DataAnnotations添加了许多验证和映射的验证,MVC框架可以节省时间。 所有数据只能查看像Grid这样的元素,我发送为Json。

此致