2016-02-29 71 views
-2

对于我的MVC项目,我想模型元素添加到表中以下格式SeasonTeam转换为Viewbag list,并循环遍历Season中的每个Team名称。然后我会通过Roster模型中的每个项目循环,并将其与Viewbag list中的SeasonTeamID进行比较,因此如果Viewbag list.seasonTeamID == model.SeasonTeamID,则将球员名称添加到行中。我认为下面的代码可以帮助解释。ASP.NET MVC添加多个模型项目为单个列

实体之间的关系:Link

名册型号:

public partial class Roster 
{ 
    public int RosterID { get; set; } 
    public int SeasonTeamID { get; set; } 
    public int PlayerID { get; set; } 

    public virtual Player Player { get; set; } 
    public virtual SeasonTeam SeasonTeam { get; set; } 
} 

指数:

@using (Html.BeginForm()) 
{ 
    <p> 
     @Html.DropDownList("seasonID", (SelectList)ViewBag.SeasonList, new { onchange = "this.form.submit();" }) 
    </p> 
} 
<table class="table"> 
    <tr> 
     <th></th> 
     <th> 
      @Html.DisplayNameFor(model => model.SeasonTeamID) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.SeasonTeam.Team.TeamName) 
     </th> 
     <th> 
      @Html.DisplayName("Player List") 
     </th> 

     <th></th> 
    </tr> 

@{ 
    int rowCount = 0; 
    var team = (List<SeasonTeam>)ViewBag.teamList; 
} 
@foreach (var t in team) 
{ 
    <tr> 
     <td>@(rowCount += 1)</td> 
     <td> 
      @Html.DisplayFor(modelItem => t.SeasonTeamID) 
     </td> 
     <td> 
      @Html.DisplayFor(modelItem => t.Team.TeamName) 
     </td> 
     <td> 
      @* Loop through each player in roster *@ 
      @{ var modelList = Model.ToList();} 
      <div class="row"> 
       @for (int i = 0; i < modelList.Count; i++) 
       { 
        if (modelList[i].SeasonTeamID == t.SeasonTeamID) 
        { 
         if (i % 3 == 0 && i != 0) 
         { 
          @:</div><div class="row"> 
          <div class="col-md-3">@modelList[i].Player.LastName</div> 
         } 
         else 
         { 
          <div class="col-md-3">@modelList[i].Player.LastName</div> 
         }       
        }      
       } 
      </div> 
      @*End loop*@ 
     </td> 

     <td> 
      @Html.ActionLink("Edit", "Edit", new { id = t.SeasonTeamID }) | 
      @Html.ActionLink("Details", "Details", new { id = t.SeasonTeamID }) 
     </td>  
    </tr> 
} 

名册控制器:

public ActionResult Index(int? seasonID) 
    { 
     var rosters = db.Rosters.Include(r => r.SeasonTeam).Where(r => r.SeasonTeam.SeasonID == seasonID).OrderBy(t => t.SeasonTeam.Team.TeamName); 



     var sList = db.Seasons.OrderByDescending(a => a.SeasonID).ToList() 
      .Select(s => new 
      { 
       SeasonID = s.SeasonID, 
       Desc = "Season " + s.SeasonID 
      }); 
     ViewBag.SeasonList = new SelectList(sList, "SeasonID", "Desc", seasonID); 

     var steam = db.SeasonTeams.Include(r => r.Team).Where(r => r.SeasonID == seasonID).OrderBy(r => r.Team.TeamName); 
     ViewBag.teamList = steam.ToList(); 

     return View(rosters.ToList()); 
    } 

的proble m是我不想每次玩model(并将它的SeasonTeamID与球队名单的SeasonTeamID比较),每当我遍历一个球队名称时,尤其是当每个赛季会有大约100多人参加比赛时。有没有其他的方法呢?

回答

0

的一个初步建议,就是要改变这样的:

var modelList = Model.ToList(); 

此:

var modelList = Model.Where(x => x.SeasonTeamID == t.SeasonTeamID).ToList(); 

因此,modelList现在只会有你感兴趣的球员,所以你不会有以迭代它们中的每一个,并且你将能够消除这个'如果':

if (modelList[i].SeasonTeamID == t.SeasonTeamID) 
+0

哇这是一个这样一个简单的解决方案。谢谢!我对此相当陌生(在这个项目上工作了大约2个月),我想我只能在控制器中执行'.Where(x => x.SeasonTeamID == t.SeasonTeamID)''。 –