讓我們想象一下,我們有兩種型號:有兩種模式工作在一個視圖中使用MVC 3
Teams: Id, Name
Player: Id, Name, TeamId
我要救這個團隊的球隊和球員集合在一個視圖。所以必須有在我看來,這些元素:
- 爲隊名輸入
- 輸入玩家姓名
- 添加按鈕,從輸入添加球員姓名集合
- 的加入玩家 列表
- 保存按鈕以保存團隊和玩家的收藏。
在這種情況下,我們應該在一個視圖上使用兩個模型。特別是,我想看看添加按鈕場景應該如何。
任何人都可以幫忙嗎?
讓我們想象一下,我們有兩種型號:有兩種模式工作在一個視圖中使用MVC 3
Teams: Id, Name
Player: Id, Name, TeamId
我要救這個團隊的球隊和球員集合在一個視圖。所以必須有在我看來,這些元素:
在這種情況下,我們應該在一個視圖上使用兩個模型。特別是,我想看看添加按鈕場景應該如何。
任何人都可以幫忙嗎?
您通常會使用視圖模型來分解(映射)您的實體模型。該模型可能看起來像:
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
,具體取決於您的確切功能。
我試過這種方法,但我在添加按鈕時墜毀。當我點擊添加按鈕時,如何從玩家輸入中獲取名稱並將其添加到存儲在控制器上的集合中? – mavera 2011-06-14 14:02:41
@mavera - 您的保存按鈕應回發到以視圖模型作爲輸入的操作(僅填充ID)。然後,您可以使用這些來拉入屬性實體模型,更新並保存它們。 – tvanfosson 2011-06-14 14:05:24
您需要將兩者合併爲一個模型。要麼將這兩個模型作爲屬性創建一個模型,要麼創建具有所有相同屬性的全新模型。 – 2011-06-14 13:58:22