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 – SignalR和MVC包
- asp.net – ScriptManager必须出现在任何需要它的控件之前
- asp-classic – 你用什么来编辑和开发经典ASP
- asp.net-mvc – MVC 5防止通过iframe访问内容
- asp.net-mvc – ASP.Net MVC 3 – JSON模型绑定到数组
- asp.net-mvc – Razor视图没有布局
- 单元测试 – 使用MOQ对象进行ASP.NET MVC单元测试
- asp.net – 诸如Eval(),XPath()和Bind()的数据绑定方法只能
- ASP Classic中的HTTP身份验证(基本或摘要)通过IIS
- asp.net-mvc – 如何使用EditorForModel()来装饰我的ASP.NE
