我最近在MVC 4 / Entity项目中为现有模型添加了一些用于审计的字段。我不需要在编辑页面上显示这些字段。但是,它们是模型上的必填字段。
目前,编辑页面仍然有效,但在控制器端,ModelState.IsValid检查失败,因为项目上实际设置的必填字段不会输出到视图,因此不会重新提交编辑页面已提交。
是否有一种简单的内置方法可以纠正这种情况,或者如果没有,下列哪种方法最适合这种情况?还有更多选择吗?
1)在视图上设置隐藏字段以保存信息(不是此选项的粉丝,过多传递数据)
2)在控制器中,在提交时,首先按ID加载模型,然后根据视图中的字段设置每个参数(看起来像额外不必要的工作)
3)为模型创建一个构造函数,该构造函数将自身作为参数并提取任何非默认值并返回一个新对象。基本上合并。 (我认为最好,还有很多额外的工作)
4)???
答案 0 :(得分:2)
最佳做法是不在视图中使用您的域模型。创建一个视图模型类,其中仅包含视图中所需的id和字段。将此模型传递给您的视图。更改表单提交操作的参数类型以匹配新的视图模型。然后,这将通过模型验证而不使用隐藏字段。在您的操作方法中,您可以使用视图模型类的id属性从数据库中检索对象,并根据需要更新字段。
希望这是有道理的。
答案 1 :(得分:1)
我更喜欢做第二个选项,只要我可以使用单个查询或db调用获取现有对象。这使我可以保持我的视图干净(没有所有其他属性的隐藏字段)并使用更新域模型的现有更新方法。
查看您的代码。如果更新方法正在许多其他地方(许多其他表)进行更新,而实际上并不需要,那么您可以编写更新方法的简短版本,它只更新相关部分(例如:UpdateContactDetails)。