asp.net – 有关视图模型和模型更新的一些子集的最佳实践

前端之家收集整理的这篇文章主要介绍了asp.net – 有关视图模型和模型更新的一些子集的最佳实践前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
通过选择MVC来开发我们的新网站,我发现自己处于在我周围正在开发的“最佳实践”中.两周前,NerdDinner是我的指导,但随着MVC 2的发展,甚至似乎已经过时了.这是一个令人兴奋的经历,我感到有幸与日常智能程序员保持密切联系.

现在我偶然发现了一个问题,我似乎无法得到一个直接的答案 – 从所有的博客 – 而且我想从社区获得一些洞察力.这是关于编辑(阅读:编辑操作).大量的材料,教程和博客,处理创建和查看模型.所以虽然这个问题可能并不是一个问题,但我希望能够进行一些讨论,有助于我决定我要采取的发展道路.

我的模型代表具有几个字段(如姓名,地址和电子邮件)的用户.所有的名字,其实在字段上每个都有名字,姓氏和中间名. “详细信息”视图显示所有这些字段,但您一次只能更改一组字段,例如您的名称.用户展开表单,而其他字段在上下仍然可见.因此,回发的表单包含表示模型的字段的一个子集.

虽然这对我们和布局的关注感兴趣,但由于各种原因,这将被严重的MVC开发人员所忽视.我一直在阅读一些模式和最佳实践,似乎这与viewmodel == view的范例并不重要.还是我错了?

无论如何,NerdDinner规定使用FormCollection och UpdateModel.所有的空字段都被高兴地忽略.从那时起,MVC社区已经放弃了这种方式,使得没有发现MVC 2中的bug.如果您的formcollection中没有完整的模型,UpdateModel将无法正常工作.

view model pattern获得最多的赞誉似乎是专用视图模型,其中包含一个自定义视图模型实体,是唯一一个可以与我的设计问题兼容的视图模型实体.尽管使用了AutoMapper和Jimmy Bogard的ideas,这可能或可能不值得,但它需要繁琐的测绘数据.他还提出了观点和观点模式之间的1:1关系.

为了符合这些设计范例,我将为每个扩展的字段创建一个视图和关联视图.视图模型各自几乎相同,仅在只读的字段中不同,视图也包含很多重复的标记.这对我来说似乎是荒唐的.将来我可能希望能够同时显示两个或多个字段.

我最会仔细阅读我希望引发的讨论.提前谢谢了.

解决方法

我这样做(这个映射是在modelBuilder中自动完成的,用于 ValueInjecter):

我有一个示例asp.net-mvc应用程序,我在mvc中演示了最佳做法,您可以在download of the valueinjecter

public ActionResult Edit(long id)
 {
      return View(modelBuilder.BuildModel(personService.Get(id)));
 }

 [HttpPost]
 public ActionResult Edit(Personviewmodel model)
 {
    if (!ModelState.IsValid)
       return View(modelBuilder.RebuildModel(model));    
       personService.Save(modelBuilder.BuildEntity(model));
       return RedirectToAction("Index");
 }

ValueInjecter快速演示:

//build viewmodel
    personviewmodel.InjectFrom(person)
                   .InjectFrom<CountryToLookup>(person);

//build entity
    person.InjectFrom(personviewmodel)
          .InjectFrom<LookupToCountry>(personviewmodel);

猜你在找的asp.Net相关文章