ASP.NET MVC ViewModel模式

Omu*_*Omu 21 asp.net asp.net-mvc design-patterns viewmodel

编辑:使用ViewModels填充和读取视图中的数据做得更好,称为ValueInjecter.http://valueinjecter.codeplex.com/

它被http://prodinner.codeplex.com使用 - 一个ASP.net MVC示例应用程序

您可以在prodinner中看到使用ViewModel的最佳方式

使用ViewModel存储映射逻辑并不是一个好主意,因为有重复和SRP违规,但现在使用ValueInjecter我有干净的ViewModels和干映射代码


这是旧的东西,不要使用它:
我在asp.net mvc中创建了一个用于编辑内容的ViewModel模式,当你必须创建一个用于编辑实体的表单时,这个模式很有用,你必须在表单上添加一些 -用户可以选择一些值

    public class OrganisationBadViewModel
    {
        //paramterless constructor required, cuz we are gonna get an OrganisationViewModel object from the form in the post save method
        public OrganisationViewModel() : this(new Organisation()) {}
        public OrganisationViewModel(Organisation o)
        {
            Organisation = o;
            Country = new SelectList(LookupFacade.Country.GetAll(), "ID", "Description", CountryKey);  
        }       
        //that's the Type for whom i create the viewmodel
        public Organisation Organisation { get; set; }
...     

    }
Run Code Online (Sandbox Code Playgroud)

Zha*_*uid 11

这看起来非常类似于Wrox Professional ASP.NET MVC一书中的推荐做法,第一章可从上述URL免费获得.

从第100页开始,他们有一个关于ViewData和ViewModels的部分.

当Controller类决定将HTML响应呈现给客户端时,它负责显式传递给视图模板呈现响应所需的所有数据.视图模板永远不应该执行任何数据检索或应用程序逻辑 - 而应该将自己限制为仅具有由控制器传递给它的模型/数据驱动的渲染代码.

[...]

当使用[ViewModel]模式时,我们创建强类型类,这些类针对我们的特定视图场景进行了优化,并公开了视图模板所需的动态值/内容的属性.然后,我们的控制器类可以填充这些视图优化类并将其传递给我们的视图模板以供使用.这样可以在视图模板中实现类型安全,编译时检查和编辑器智能感知.

取自"第1章"书呆子晚餐"来自Rob Connery等人撰写的专业ASP.NET MVC 1.0,由Wrox出版".原文可在http://tinyurl.com/aspnetmvc上找到

  • 这也是我如何滚动. (3认同)

Dzm*_*uba 9

有几件事情困扰着我.

  1. 术语.ViewModel就是这种情况,是一个简单的视图数据,由控制器填充并稍后使用.View对控制器一无所知,因为ASP.NET MVC基础结构负责选择控制器和适当的操作.控制器处理用户交互.我认为它看起来更像Passive View而不是ViewModel(我假设ViewModel是指Model-View-ViewModel模式).

  2. 细节.填充视图数据的控制器不应该知道视图如何实现的细节.然而,OrganisationViewModel.Country公开了不必要的细节(SelectListItem是纯视图实现细节).从而使控制器依赖于视图实现细节.我认为应该改变以避免它.考虑使用一些保存国家数据的对象.

希望这可以帮助.