当您的视图模型没有与域模型一样多的字段时,如何忽略/保留MVC中的值?

时间:2009-08-13 21:09:46

标签: asp.net-mvc mvvm fluent-nhibernate viewmodel automapper

我有一个网站,我正在使用fluentNhibernate和Asp.net MVC。我有一个编辑视图,允许用户编辑该记录(对象)的10个属性中的8个。当您提交表单并且模型绑定时,两个不可编辑的字段在视图模型中返回为空字符串或默认的DateTime值,具体取决于属性的类型。

因为我还使用AutoMapper将我的视图模型映射到我的域实体,所以我不能只从数据库加载我的对象的新副本并手动设置2个缺少的属性。什么是坚持那些我不想编辑的领域的最好方法?

一种方法是将值保存在View上的隐藏输入字段中。这有效但感觉很糟糕。我感谢任何建议。我的AutoMapper中有没有办法配置这个所需的功能?

更新 好的,所以我想我不是要忽略这些字段,我正在努力确保我不会保留null或空字符串值。忽略AutoMapper中的字段就是这样,当我尝试在保存到我的存储库之前映射它们时,它们会被忽略并且为空。

3 个答案:

答案 0 :(得分:2)

您可以告诉Automapper忽略这两个属性:

Mapper.CreateMap<Source, Destination>()
.ForMember(dest => dest.SomeValuefff, opt => opt.Ignore());

Possible related question

答案 1 :(得分:2)

asp.net mvc DefaultModelBinder是可扩展的,您可以覆盖它以创建自己的绑定模式。但这将涉及比两个“隐藏的输入字段”更多的工作,在我看来,这并不是那么严重。

答案 2 :(得分:0)

您是否可以使用也接受TEntity的AutoMapper.Map重载?!

entity = Mapper.Map(viewmodel, entity);

只要您的viewmodel上没有属性,它就不会更改您实体的值。它传递实体并仅将viewmodel中的属性应用回实体。