2014-01-25 47 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

相关问题