asp.net-mvc – ASP.NET MVC – 从视图部分更新模型
我只是想知道人们如何处理这种情况.在我使用ORM(MVC)的情况下,这似乎是一个弱点(在这种情况下是NHibernate)…
假设你的模型中有一个细粒度和复杂的实体.您可能会有一个管理页面来管理此类型的对象.如果实体很复杂,那么您不可能以一种形式修改整个实体.您仍然需要将相关属性传递给视图,并在视图返回时将更改合并到模型中的这些属性. 有人在这种情况下做什么? >创建一个(或包含)实体属性子集的视图模型.通过这个视图.在控制器中的“编辑”操作方法中,从存储库获取对象,然后查看ViewModel中的所有属性,并将其应用于Model对象(model.a = viewmodel.a,modelb = viewmodel.b).这似乎是明显的明智之路,但却产生了大量繁琐的管道代码.此外,这样会使验证复杂一些. 我已经看了一下automapper – 但这似乎并不适合账单,也许我错了? 谢谢. 解决方法
这听起来像是automapper的完美场景.您创建一个视图模型类,其中包含字段或实际模型的一部分,您可以让AutoMapper将域模型对象中的值提取到视图模型对象中.你有什么问题与这种方法?
考虑这个例子: 这是您的域模型和您的视图模型 public class Person { public string FirstName { get; set; } public string LastName { get; set; } public string HomeNumber { get; set; } public string Address1 { get; set; } public string Address2 { get; set; } } public class PersonViewModel { public string FirstName { get; set; } public string LastName { get; set; } public string HomeNumber { get; set; } } 这是您的映射,您必须从dm-> vm和vm-> dm在两个方向创建映射. 使用Automapper时我看到的是,如果将对象A映射到B,并且B具有A没有的属性,则它将被重置.所以当我创建地图我指示它忽略那些缺少的属性.我不是一个Automapper专家,所以我可能会使用它错了. 制图 Mapper.CreateMap<Person,PersonViewModel>(); // Automapper will reset values in dest which don't exist in source,so be sure to ignore them! Mapper.CreateMap<PersonViewModel,Person>() .ForMember(dest => dest.HomeNumber,opt => opt.Ignore()); 最后用法: Person p = new Person() { FirstName = "First",LastName = "Last",Address1 = "add 1",Address2 = "add 2" }; PersonViewModel pvm = Mapper.Map<Person,PersonViewModel>(p); // Map to a new person Person p2 = Mapper.Map<PersonViewModel,Person>(pvm); // Map to the existing person just to update it Person p3 = new Person() { HomeNumber = "numberHere" }; // This will update p3 Mapper.Map<PersonViewModel,Person>(pvm,p3); 由于排除,这显然不如理想,而是比手动做整件事好多了. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc-4 – 在Visual Studio 2017 RC中无法识别ASP.N
- asp.net-mvc – ASP.Net MVC风格包不包括大多数文件
- ASP.NET MVC中的jQuery AJAX响应
- ASP.NET元:resourcekey
- asp.net-mvc – ASP.Net MVC – 处理不好的URL参数
- “必须知道”.NET Architect / Lead的IIS功能
- asp.net-mvc-3 – MVC3 – 每次调用两次控制器索引操作
- asp.net-mvc – ASP.NET MVC – 查看多个模型
- asp.net-mvc – ASP.NET MVC FluentValidation PartialView
- asp.net-mvc – RESTful服务:WCF与ASP.NET MVC