无法在我的控制器的[HttpPost]更新操作方法中使用AutoMapper。
我有实体跟踪字段,例如CreatedDate,CreatedBy,ModifiedDate,ModifiedBy,我没有将它们作为我的ViewModel中的字段。
当用户在更新操作方法中发布表单时,我通常会执行以下操作:
var product = Mapper.Map<Product>(productViewModel);
此时跟踪字段为空。我永远无法得到它们。
看起来我有两个选择:
将跟踪字段添加到视图模型中,并将html中的隐藏字段添加为“Id”,以便将它们发回服务器。
不是创建新的产品对象,而是基于viewModel.Id从数据库中检索产品,然后手动覆盖用户在表单中使用viewModels新值编辑的所有值。
有没有人对此有任何额外的想法或建议?第1步是进入我不需要的页面的额外数据,第2步是额外的数据库调用和不使用AutoMapper的不清洁代码。
答案 0 :(得分:1)
我会使用选项2.
首先它会停止html注入攻击,用户可以简单地编辑你的html并更改你不想公开进行编辑的字段。
其次,在为基本模型编辑或添加字段时,很难出错。在viewModel上添加需要的额外属性时,您不必担心。
第三,除非它是一个巨大的对象,否则数据库调用不会增加太多延迟。用户通常不介意在保存操作上等待更多一点,让他们觉得应用程序实际上做的事情很舒服。 :)