代码之家  ›  专栏  ›  技术社区  ›  shanabus

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

  •  6
  • shanabus  · 技术社区  · 15 年前

    我在一个网站上使用FluentHibernate和ASP.NET MVC。我有一个编辑视图,允许用户编辑该记录(对象)的10个属性中的8个。提交表单和模型绑定时,视图模型中的两个不可编辑字段将返回为空字符串或默认的日期时间值,具体取决于属性类型。

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

    一种有效的方法是在我的视图中保持隐藏输入字段中的值。这很有效,但感觉很恶心。我很感激你的建议。在我的automapper中有没有一种方法来配置这个所需的功能?

    更新: 好吧,所以我想我不是要忽略这些字段,而是要确保我不持久化空或空的字符串值。忽略automapper中的字段就是这样做的,当我试图在保存到我的存储库之前映射它们时,它们会被忽略并且为空。

    3 回复  |  直到 12 年前
        1
  •  2
  •   J.W.    15 年前

    ASP.NET MVC DefaultModelBinder是可扩展的,您可以重写它来创建自己的绑定架构。但这将涉及两个以上的工作“隐藏的输入字段”,在我看来,这并没有那么严重。

        2
  •  2
  •   Community uzul    7 年前

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

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

    Possible related question .

        3
  •  0
  •   Anthony Shaw    13 年前

    你能使用自动映射重载吗?它也接受十分?!

    entity = Mapper.Map(viewmodel, entity);
    

    只要视图模型上没有属性,它就不会更改实体上的值。它接收正在传入的实体,并仅将ViewModel中的属性应用回该实体。