0

我最近在 MVC 4/Entity 项目的现有模型中添加了一些用于审计目的的字段。我不需要在编辑页面上显示这些字段。但是,它们是模型上的必填字段。

就目前而言,编辑页面仍然有效,但在控制器端,ModelState.IsValid 检查失败,因为在项目上实际设置的必填字段没有输出到视图,因此在编辑页面时不会重新提交提交。

是否有一种简单的内置方法来纠正这个问题,或者如果没有,以下哪一项是这种情况的最佳实践?还有更多选择吗?

1)在视图上设置隐藏字段来保存信息(不喜欢这个选项,传递数据太多)

2)在控制器中,在提交时,首先通过 ID 加载模型,然后根据视图上存在的字段设置每个单独的参数(似乎是额外的不必要的工作)

3) 为模型创建一个构造函数,该构造函数将自身作为参数并提取任何非默认值并返回一个新对象。基本上是合并。(我认为最好的,还有很多额外的工作)

4)???

4

2 回答 2

2

最佳实践是不要在视图中使用您的域模型。创建一个视图模型类,该类只包含视图中所需的 id 和字段。将此模型传递给您的视图。更改表单提交操作的参数类型以匹配您的新视图模型。这将在不使用隐藏字段的情况下通过模型验证。在您的操作方法中,您可以使用视图模型类的 id 属性从数据库中检索对象,并根据需要更新字段。

希望这是有道理的。

于 2013-04-01T04:02:54.577 回答
1

只要我可以通过单个查询或数据库调用获取现有对象,我更喜欢执行第二个选项。这让我可以保持视图整洁(所有其他属性没有隐藏字段)并使用现有的更新方法来更新域模型。

查看您的代码。如果 update 方法在许多其他地方(许多其他表)进行更新,而这实际上是不需要的,那么您可能会编写一个简短版本的 update 方法,它只更新相关部分(例如:UpdateContactDetails)。

于 2013-03-30T03:15:27.780 回答