编辑:我使用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是纯视图实现细节)。因此使控制器依赖于实现细节。我认为应该改变,以避免它。考虑使用一些可以保存一个国家的数据的对象。
希望这可以帮助。