2017-08-08 80 views
0

因爲我是新的ASP.NET Core 2.0 MVC我有一個小演示應用程序,我想添加一個新的類型陣容的實體有ICollection的類型播放器在其模型中。如何創建一個實體與另一個實體的集合

的參與類

public class Lineup 
{ 
    public int LineupID { get; set; } 
    public int PlayerID { get; set; } 
    public ICollection<Player> Attendants { get; set; } 
} 

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

我創建陣容視圖看起來像這樣

<form asp-action="Create"> 
    <div class="form-horizontal"> 
     <h4>Lineup</h4> 
     <hr /> 
     <div asp-validation-summary="ModelOnly" class="text-danger"></div> 
     <div class="form-group"> 
      <label asp-for="Attendants" class="col-md-2 control-label"></label> 
      <div class="col-md-10"> 
       <select asp-for="Attendants" class="form-control" 
       asp-items="ViewBag.Players" multiple="multiple"> 
       </select> 
      </div> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Create" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
</form> 

的ViewBag.Players是LineupsController的一部分:

private void PopulatePlayersDropDownList(object selectedPlayer = null) 
{ 
    var playersQuery = from p in _context.Player 
          orderby p.Name 
          select p; 
    ViewBag.Players = new SelectList(playersQuery.AsNoTracking(), "PlayerID", 
          "Name", selectedPlayer); 
} 

這就是它的外觀到目前爲止:

但我內創建方法

public async Task<IActionResult> Create([Bind("Attendants")] Lineup lineup) 
{ 
    if (ModelState.IsValid) 
    { 
     _context.Add(lineup); 
     await _context.SaveChangesAsync(); 
     return RedirectToAction(nameof(Index)); 
    } 
    return View(lineup); 
} 

的服務員算陣容實體爲0,而不是2從樣品預計上方。這裏有什麼問題?謝謝你的幫助。

+1

請參閱此鏈接https://www.mikesdotnetting.com/article/265/asp-net-mvc-dropdownlists-multiple-selection-and-enum-support – Rohit

回答

4

您需要在創建對象時實例化您的屬性。否則,屬性是默認的,這是null

public class Lineup 
{ 
    public int LineupID { get; set; } 
    public int PlayerID { get; set; } 
    public ICollection<Player> Attendants { get; set; } = new List<Player>(); 
} 
+0

確定但它的0,不是空的!? – marrrschine

+0

值類型屬性不能有空值。他們使用不同的默認值。 'default(int)= 0' – Smit

0

確定,這兩個步驟解決我的問題:

  1. 看到krillgar
  2. 的回答改變創建的方法簽名

    public async Task Create(int [] PlayerIDs) { ... }

相關問題