使用mvc 3在一个视图中处理两个模型

本文关键字:处理 两个 模型 视图 一个 mvc 使用 | 更新日期: 2023-09-27 17:59:02

让我们假设我们有两个模型:

Teams: Id, Name
Player: Id, Name, TeamId

我想在一个视图中保存这支球队的球队和球员集合。因此,在我看来,必须有以下要素:

  • 团队名称输入
  • 玩家名称输入
  • 添加按钮,用于将玩家名称从输入添加到收藏
  • 添加的玩家列表
  • 保存按钮保存团队和玩家的收藏

在这种情况下,我们应该在一个视图上使用两个模型。特别是,我想看看添加按钮的场景应该如何

有人能帮忙吗?

使用mvc 3在一个视图中处理两个模型

您通常会为此使用一个视图模型,该模型会分解为(映射到)实体模型。模型可能看起来像:

 public class MeamWithPlayersViewModel
 {
      public long ID { get; set; }  // this ought to match the id parameter on the post
      public string Name { get; set; }
      public TeamPlayer[] Players { get; set; }
 }
 public class TeamPlayer
 {
      public long PlayerID { get; set; }
      public string Name { get; set; }
 }

在你看来——假设你为一支特定的球队增加了球员——

 @using (Html.BeginForm())
 {
       <p>Current Players</p>
       @for (int i = 0; i < Model.Players.Length; ++i)
       {
             <p>Model.Players[i].Name
             @Html.HiddenFor( model => model.Players[i].PlayerID )
             </p>
       }
       <button class="add-player">Add Player</button>
       <button class="save-button">Save</button>
 }

然后在AJAX中使用一些javascript,您就可以从通过AJAX检索的列表中添加一个新玩家。在添加玩家代码(绑定到按钮)的回调中,您可以添加名称和另一个隐藏字段,其中玩家id为<input type="hidden" name="Players[n].PlayerID" value="_some_id_" />,其中n是序列中的下一个数字。根据您的确切功能,您可能可以省略n