【问题标题】:ASP.NET MVC model binding with dynamic viewmodelASP.NET MVC 模型与动态视图模型绑定
【发布时间】:2023-03-06 11:45:01
【问题描述】:

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

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 模型绑定器根本不可能?我知道自定义模型绑定器并认为它们可能是一种解决方案,但我对它们的了解不足,无法理解如何使用它们来解决问题。

【问题讨论】:

  • 我只能想到使用自定义模型绑定器。看看这篇文章以获得一些想法:matthidinger.com/archive/2011/08/16/…
  • 我会说这是基于任务的 UI 的完美候选者。而不是完整的“一个 POST 来统治所有”CRUD 方法。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-19
    • 2017-04-02
    • 2014-02-12
    • 2012-11-13
    相关资源
    最近更新 更多