ASP.NET MVC ViewModel模式

编辑:我使用viewmodels(称为ValueInjecter)从视图中填充和读取数据,我做得更好。 http://valueinjecter.codeplex.com/

它被http://prodinner.codeplex.com使用 – 一个ASP.net MVC示例应用程序
您可以看到在prodinner中使用viewmodels的最佳方法

使用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; }
...     

    }

解决方法

有几件事情打扰我。

>术语。 viewmodel是一个简单的视图数据,被安装并被控制器消耗。由于ASP.NET MVC基础架构负责选择控制器和适当的操作,View对于控制器一无所知。控制器处理用户交互。我认为它比viewmodel看起来更像被动视图(我认为viewmodel的意思是Model-View-viewmodel模式)。
>细节。填充视图数据的控制器不应该知道视图的实现细节。然而Organisationviewmodel.Country公开了不必要的细节(SelectListItem是纯视图实现细节)。因此使控制器依赖于实现细节。我认为应该改变,以避免它。考虑使用一些可以保存一个国家的数据的对象。

希望这可以帮助。

相关文章

这篇文章主要讲解了“WPF如何实现带筛选功能的DataGrid”,文...
本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识...
Some samples are below for ASP.Net web form controls:(fr...
问题描述: 对于未定义为 System.String 的列,唯一有效的值...
最近用到了CalendarExtender,结果不知道为什么发生了错位,...
ASP.NET 2.0 page lifecyle ASP.NET 2.0 event sequence cha...