ASP.NET MVC模型与动态viewmodel绑定

时间:2014-05-13 01:47:03

标签: c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-5

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

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的实例放入" PreferredSportsTeam" PersonViewModel的属性,然后将PersonViewModel传递给编辑视图,以允许用户编辑所有字段。

我已成功使用EditorTemplates显示存储在" PreferredSportsTeam"中的对象的相应视图。属性。但是,在提交编辑表单时,MVC模型绑定程序无法重建存储在PreferredSportsTeam中的任何对象。它确实正确填充了FirstName和LastName属性,但PreferredSportsTeam属性始终作为一个通用对象返回,我无法将其转换为其他任何内容。

是否存在我缺少的内容,或者使用默认的MVC模型绑定器是不可能的?我知道自定义模型绑定器并认为它们可能是一个解决方案,但我对它们的了解不足以了解它们如何用于解决问题。

1 个答案:

答案 0 :(得分: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