2017-03-11 47 views
0

我已经在互联网上搜索了2天,找到了我的问题的答案但没有正确的答案。我如何显示球员名单中的球员mvc

这些都是我的班

public class Player 
{ 
    public int ID { get; set; } 

    public string Name { get; set; } 

    public string FirstName { get; set; } 

    public Team Team { get; set; } 

    public int TeamId { get; set; } 

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

    public string Name { get; set; } 

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

我加入我的ViewModels是相同的 - >

public class CreatePlayerVM 
{ 
    public int ID { get; set; } 

    [Display(Name = "Last name")] 
    public string Name { get; set; } 

    [Display(Name = "First name")] 
    public string FirstName { get; set; } 

    [ForeignKey("TeamId")] 
    public Team Team { get; set; } 

    [Required] 
    [ForeignKey("Team")] 
    [Display(Name = "Team")] 
    public int TeamId { get; set; } 

public class ListPlayerVM 
{ 
    public int ID { get; set; } 

    public string Name { get; set; } 

    public string FirstName { get; set; } 

    [ForeignKey("TeamId")] 
    public Team Team { get; set; } 

    public int TeamId { get; set; } 

和我的球员名单的看法是这样的 - >

 @Html.DisplayNameFor(model => model.Name) 
     @Html.DisplayNameFor(model => model.FirstName) 
     @Html.DisplayNameFor(model => model.Team) 
     @Html.DisplayNameFor(model => model.YellowCard) 
     @Html.DisplayNameFor(model => model.RedCard) 
     @Html.DisplayNameFor(model => model.Goal) 

     @foreach (var item in Model) 
     @Html.DisplayFor(modelItem => item.Name) 
     @Html.DisplayFor(modelItem => item.FirstName) 
     @Html.DisplayFor(modelItem => item.Team.Name) 
     @Html.DisplayFor(modelItem => item.YellowCard) 
     @Html.DisplayFor(modelItem => item.RedCard) 
     @Html.DisplayFor(modelItem => item.Goal) 

和homeController

[HttpGet] 
    public ActionResult Players() 
    { 
     List<Player> p1 = Player.GetPlayers(); 

     List<ListPlayerVM> p2 = new List<ListPlayerVM>(); 

     foreach (Player p in p1) 
     { 
      p2.Add(new ListPlayerVM(p.ID, p.Name, p.FirstName, p.Team , p.TeamId, p.Goal, p.YellowCard, p.RedCard)); 
     } 

     return View(p2); 
    } 

和CreateController

[HttpPost] 
    public ActionResult CreatePlayer(CreatePlayerVM model) 
    { 
     if (ModelState.IsValid) 
     { 

      Player player = new Player(model.FirstName, model.Name, model.Team, model.TeamId ,0, 0, 0); 
      player.InsertPlayer(); 

     } 
     PopulateTeamsDropDownList(model.TeamId); 
     return View(model); 
    } 

如何我在创建玩家列表中显示我的teamName?厌倦了通过互联网搜索希望有人能帮助我!

https://i.stack.imgur.com/5ELCJ.jpg

public static Player GetPlayer(int id) 
    { 
     using (LeagueDBContext ctx = new LeagueDBContext()) 
     { 
      return ctx.Players.Where(a => a.ID == id).SingleOrDefault(); 
     } 
    } 

GRTS

+0

它不清楚是什么你问这里 - 你'@ Html.DisplayFor(modelItem => item.Team.Name)'将显示球队的名字(假设你的查询正在加载它)。并且删除你的视图模型上的[[ForeignKey(“TeamId”)]'属性(它们是EF特定的属性,并且与视图模型无关) –

+0

我已经编辑了帖子,屏幕显示了我所得到的..它不显示名称。 – BooZzken

+0

然后'Team'的Name属性不包含任何数据!您可能需要在查询中使用'.Include(x => x.Team)',因为您没有在数据模型中将'Team'属性标记为虚拟(您没有显示您的'GetPlayers() '方法)。你的'CreatePlayer()'方法与你的问题有什么关系? –

回答

1

的问题是,你不懒加载你的团队的数据。你必须使用虚拟来延迟加载它。您的播放器模式应该是这样的:

public class Player 
{ 
    public int ID { get; set; } 

    public string Name { get; set; } 

    public string FirstName { get; set; } 

    public virtual Team Team { get; set; } 

    public int TeamId { get; set; } 
}