2011-06-14 40 views
2

讓我們想象一下,我們有兩種型號:有兩種模式工作在一個視圖中使用MVC 3

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

我要救這個團隊的球隊和球員集合在一個視圖。所以必須有在我看來,這些元素:

  • 爲隊名輸入
  • 輸入玩家姓名
  • 添加按鈕,從輸入添加球員姓名集合
  • 的加入玩家
  • 列表
  • 保存按鈕以保存團隊和玩家的收藏。

在這種情況下,我們應該在一個視圖上使用兩個模型。特別是,我想看看添加按鈕場景應該如何。

任何人都可以幫忙嗎?

+0

您需要將兩者合併爲一個模型。要麼將這兩個模型作爲屬性創建一個模型,要麼創建具有所有相同屬性的全新模型。 – 2011-06-14 13:58:22

回答

4

您通常會使用視圖模型來分解(映射)您的實體模型。該模型可能看起來像:

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> 
} 

然後使用一些JavaScript和AJAX你實現添加的能力來自通過AJAX檢索的列表中的新玩家。在添加玩家代碼(綁定到按鈕)的回叫中,您需要添加名稱和另一個隱藏字段,其中玩家的ID爲<input type="hidden" name="Players[n].PlayerID" value="_some_id_" />,其中n是序列中的下一個數字。您可能可以省略n,具體取決於您的確切功能。

+0

我試過這種方法,但我在添加按鈕時墜毀。當我點擊添加按鈕時,如何從玩家輸入中獲取名稱並將其添加到存儲在控制器上的集合中? – mavera 2011-06-14 14:02:41

+0

@mavera - 您的保存按鈕應回發到以視圖模型作爲輸入的操作(僅填充ID)。然後,您可以使用這些來拉入屬性實體模型,更新並保存它們。 – tvanfosson 2011-06-14 14:05:24

相關問題