在ASP.NET MVC中跟踪ViewModel中的实体跟踪字段到更新模型

时间:2016-08-25 05:37:23

标签: c# asp.net-mvc entity-framework automapper

无法在我的控制器的[HttpPost]更新操作方法中使用AutoMapper。

我有实体跟踪字段,例如CreatedDate,CreatedBy,ModifiedDate,ModifiedBy,我没有将它们作为我的ViewModel中的字段。

当用户在更新操作方法中发布表单时,我通常会执行以下操作:

var product = Mapper.Map<Product>(productViewModel);

此时跟踪字段为空。我永远无法得到它们。

看起来我有两个选择:

  1. 将跟踪字段添加到视图模型中,并将html中的隐藏字段添加为“Id”,以便将它们发回服务器。

  2. 不是创建新的产品对象,而是基于viewModel.Id从数据库中检索产品,然后手动覆盖用户在表单中使用viewModels新值编辑的所有值。

  3. 有没有人对此有任何额外的想法或建议?第1步是进入我不需要的页面的额外数据,第2步是额外的数据库调用和不使用AutoMapper的不清洁代码。

1 个答案:

答案 0 :(得分:1)

我会使用选项2.

首先它会停止html注入攻击,用户可以简单地编辑你的html并更改你不想公开进行编辑的字段。

其次,在为基本模型编辑或添加字段时,很难出错。在viewModel上添加需要的额外属性时,您不必担心。

第三,除非它是一个巨大的对象,否则数据库调用不会增加太多延迟。用户通常不介意在保存操作上等待更多一点,让他们觉得应用程序实际上做的事情很舒服。 :)