2014-01-25 79 views
0

我有兩個型號,一個一對多的關係添加新的相關模型,以現有的模型

public class Team 
{ 
    public int TeamID { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<Player> Players { get; set; } 
} 

public class Player 
{ 
    public int PlayerID { get; set; } 
    public string Name { get; set; } 

    public virtual Team Team { get; set; } 
} 

我想改變球隊的詳細信息視圖,使添加新球員的球隊

// GET: /Team/Details/5 
public ActionResult Details(int? id) 
{ 
    if (id == null) 
    { 
     return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
    } 
    Player player = db.Players.Find(id); 
    if (player == null) 
    { 
     return HttpNotFound(); 
    } 
    return View(player); 
} 

這是一個有點難以找到這個但從我可以收集去了解這一點的最好辦法的任何信息將是增加一個視圖模型

public class TeamViewModel 
{ 
    public Team team { get; set; } 
    public Player player { get; set; } 
} 

併發送到我的詳細信息視圖,我沒有太多的成功,我不太確定這是否是正確的方法。

任何鏈接或指導將不勝感激。

更新

我已經設法查看工作的細節,但現在需要理清POST方法

[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Details(TeamViewModel tvm) 
{ 
    if (ModelState.IsValid) 
    { 
     tvm.player.team = tvm.team; 
     db.Players.Add(tvm.player); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(tvm); 
} 

這將創建一個新的球員,但不會存儲的關係所以玩家表中的列TeamID是空的。

更新2

我做了一些調試,似乎該職位期間,我teamViewModel不存儲團隊數據。

// GET: /Team/Details/5 
public ActionResult Details(int? id) 
{ 
    if (id == null) 
    { 
     return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
    } 
    Team team = db.Teams.Find(id); 
    if (team == null) 
    { 
     return HttpNotFound(); 
    } 
    var teamViewModel = new TeamViewModel() 
    { 
     team = team, 
     player = new Player() { Team = db.Team.Find(id) } 
    }; 
    return View(teamViewModel); 
} 

// POST: /Team/Details/5 
[HttpPost] 
[ValidateAntiForgeryToken] 
public ActionResult Details(TeamViewModel teamViewModel) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Players.Add(teamViewModel.player); 
     db.SaveChanges(); 
     return RedirectToAction("Index"); 
    } 
    return View(teamViewModel); 
} 

回答

2

所以,你想要做的是:

  • 顯示對球隊的數據視圖。
  • 在相同的觀點有可能添加一個新的球員。

您的視圖模型:

public class TeamViewModel 
{ 
    public Team team { get; set; } 
    public Player player { get; set; } 
} 

可以處理這個工作。 在生成視圖之前應該獲取團隊數據。 玩家可以是空的 - 它只會用於您視圖的輸入字段生成目的。

你應該改變你的行動更少這樣的:

// GET: /Team/Details/5 
public ActionResult Details(int? id) 
{ 
    if (id == null) 
    { 
     return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
    } 
    Team team= db.Team.Find(id); //assuming that this is the id of the team 
    if (team== null) 
    { 
     return HttpNotFound(); 
    } 

    var teamViewModel = new TeamViewModel() { Team = team, Player = new Player() }; 
    return View(teamViewModel); 
} 

它是一種常見的做法是使用的ViewModels。由於這一點,您可以將業務模型與將數據呈現給用戶時使用的模型分開。然後,您可以彙集所有需要的數據,而不僅限於將一個對象傳遞給視圖。

+0

好的,所以我已經看到了工作現在我只需要找出後的方法,我會更新我的問題。 – Rick

相關問題