2014-05-13 119 views
2

处理绑定复杂视图模型的推荐方法是什么?例如,使用以下对象:使用动态视图模型绑定ASP.NET MVC模型

class PersonViewModel 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    //I have also tried a generic object instead of dynamic with the same results 
    public dynamic PreferredSportsTeam { get; set; }  
} 

class SportsTeamViewModel 
{ 
    public string Name { get; set; } 
    public string City { get; set; } 
} 

class BaseballTeamViewModel : SportsTeamViewModel 
{ 
    public double TeamERA { get; set; } 
} 

class HockeyTeamViewModel : SportsTeamViewModel 
{ 
    public int TotalSaves { get; set; } 
} 

我试图把任何一个BaseballTeamViewModel的实例或HockeyTeamViewModel到PersonViewModel的“PreferredSportsTeam”属性,然后传递PersonViewModel到编辑视图允许用户可以编辑所有的字段。

我已成功使用EditorTemplates显示存储在“PreferredSportsTeam”属性中的对象的相应视图。但是,在提交编辑表单时,MVC模型联编程序无法重建PreferredSportsTeam中存储的任何对象。它确实正确地填充了名字和姓氏属性,但PreferredSportsTeam属性总是以普通对象的形式返回,我无法将其转换为其他任何东西。

有没有我缺少的东西,或者它不可能与默认的MVC模型联编程序?我知道自定义模型粘合剂,并认为它们可能是一种解决方案,但我对他们不了解足够的知识以了解如何使用它们来解决问题。

+1

我只能想到使用自定义模型活页夹。看看这个帖子的一些想法:http://www.matthidinger.com/archive/2011/08/16/An-inheritance-aware-ModelBinderProvider-in-MVC-3.aspx – Chandu

+1

我会说这是完美的候选人为基于任务的用户界面..而不是一个完整的“一个POST来统治他们”的CRUD方法。 –

回答

2

下面的代码示例演示如何使用动态对象:

var team = new Team(); 
team.FirstName = "FirstName"; 
team.LastName = "LastName"; 

var baseballTeam = new BaseBallTeam(); 
baseballTeam.TotalSaves = 100; 

team.PreferredSportsTeam = new ExpandoObject(); 
team.PreferredSportsTeam.BaseBallTeam = baseballTeam; 

进行更详细的说明,请参见This