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

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


```
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中的任何对象。它正确地填充了FirstName和LastName属性,但是PreferredSportsTeam属性始终返回一个无法转换为其他任何类型的通用对象。是否有什么遗漏的东西,或者默认的MVC模型绑定器根本不可能呢?我知道自定义模型绑定器,并认为它们可能是一种解决方法,但我对它们的了解还不足以理解如何使用它们来解决问题。

1
我只能想到使用自定义模型绑定器。可以参考这篇文章获取一些想法:http://www.matthidinger.com/archive/2011/08/16/An-inheritance-aware-ModelBinderProvider-in-MVC-3.aspx - Chandu
1
我认为这是一个完美的候选者,适合使用基于任务的用户界面,而不是全面的“一次POST统治所有”CRUD方法。 - Simon Whitehead
1个回答

2
以下代码示例展示了如何使用动态对象:
```csharp dynamic dynamicObject = new ExpandoObject(); dynamicObject.Name = "John"; dynamicObject.Age = 30;
Console.WriteLine("Name: " + dynamicObject.Name); Console.WriteLine("Age: " + dynamicObject.Age); ```
以上代码创建了一个动态对象并给其赋值。可以像访问普通对象一样访问该动态对象的属性。
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;

请查看此链接,以获取更详细的解释。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接