ASP.. NET MVC模型与动态视图模型绑定

本文关键字:模型 视图 绑定 动态 MVC ASP NET | 更新日期: 2023-09-27 18:03:05

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

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"属性中的对象的相应视图。然而,当提交Edit Form时,MVC模型绑定器不能重构存储在PreferredSportsTeam中的任何对象。它确实正确地填充了FirstName和LastName属性,但是PreferredSportsTeam属性总是作为一个通用对象返回,我不能将其转换为任何其他对象。

是否有一些东西,我错过了或它根本不可能与默认的MVC模型绑定?我知道自定义模型绑定器,并认为它们可能是一个解决方案,但我对它们的了解不够,无法理解如何使用它们来解决问题。

ASP.. NET MVC模型与动态视图模型绑定

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

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以获得更详细的解释。