2016-02-19 2 views
0

У меня есть модель представления, содержащая информацию, которую я использую для выпадающего списка вида:asp.net mvc5 - Передача выбранного элемента списка Идентификаторы обратно к контроллеру

public class AddPlayersToGame 
{ 
    public string GameTitle { set; get; } 
    public int GameID { set; get; } 
    public List<SelectListItem> Players { set; get; } 
    public int PlayerID { get; set; } 
    public int[] SelectedPlayers { set; get; } 
} 

Это мой взгляд, который просто отображает выпадающий список, содержащий список игроков, чтобы выбрать из:

@model WebGameProj.ViewModels.AddPlayersToGame 
<div> 
{ 
    @Html.DropDownListFor(x => Model.PlayerID, Model.Players) 

    <input type="submit" /> 
} 
</div> 

Это методы контроллера, я использую:

public ActionResult AddPlayersView(int id) 
{ 
    var GameSelected = db.Games.Find(id); 

    if (GameSelected== null) 
    { 
     return HttpNotFound(); 
    } 

    var np = new AddPlayersToGame { GameID = id, GameTitle = GameSelected.GameTitle }; 

    np.Players = db.Players.Select(m => new SelectListItem 
    { 
     Text = m.PlayerUserName, 
     Value = m.PlayerId.ToString() 
    }).ToList(); 

    return View(np); 
} 

[HttpPost] 
public ActionResult AddPlayersView(AddPlayersToGame model) 
{ 
    foreach (var item in model.SelectedPlayers) 
    { 
     var SelPlayer = db.Players.Find(model.PlayerID); 

     if (SelPlayer== null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 

     if (SelPlayer != null) 
     { 
      Game GameSelected = new Game(); 
      GameSelected.GamePlayers.Add(SelPlayer); 

      db.Entry(GameSelected).State = EntityState.Modified; 
      db.SaveChanges(); 
     } 
    } 
    return RedirectToAction("GameDetailsView"); 
} 

Итак, в основном я хочу иметь представление, которое отображает раскрывающийся список игроков, и когда некоторые игроки будут выбраны, метод post затем найдет каждого игрока в базе данных, используя их идентификаторы, которые передаются обратно через раскрывающийся список список в представлении, затем добавьте их в текущий список игроков для этой игры.

+0

Вы можете использовать JQuery для получения выбранного Идентификаторы. –

+0

Вы пытались найти что-то подобное? Скажите, [this] (http://stackoverflow.com/questions/25013223/asp-net-mvc-multiple-select-dropdown) помощь? – Andrei

+1

Вы можете выбрать только один элемент за раз в раскрывающемся списке. Для этой цели вам нужно использовать раскрывающийся список с несколькими выборами (jQuery UI имеет список с несколькими выборами). – ataravati

ответ

1

Изменить модель для

public class AddPlayersToGame 
{ 
    public string GameTitle { set; get; } 
    public int GameID { set; get; } 
    public int PlayerID { get; set; } 
    public int[] PlayerIds { set; get; } 
    public List<SelectListItem> Players { set; get; } 
} 

И ваш взгляд на

@model WebGameProj.ViewModels.AddPlayersToGame 
<div> 
{ 
    @Html.ListBoxFor(x => x.PlayerIds, Model.Players) 

    <input type="submit" /> 
} 
</div> 

Затем вы должны иметь выбирает идентификаторы в модели после отправки.

0

Вы также можете попробовать:

Модель

public class AddPlayersToGame 
{ 
    public string GameTitle { set; get; } 
    public int GameID { set; get; } 
    public int[] PlayerIDs { get; set; } 
    public MultiSelectList Players { get; set; } 
} 

Контроллер

public ActionResult AddPlayersView(int id) 
{ 
    var GameSelected = db.Games.Find(id); 

    if (GameSelected== null) 
    { 
     return HttpNotFound(); 
    } 

    var np = new AddPlayersToGame { GameID = id, GameTitle = GameSelected.GameTitle }; 

    var playerList = db.Players.Select(m => new 
    { 
     PlayerUserName = m.PlayerUserName, 
     PlayerId = m.PlayerId 
    }).ToList(); 

    np.Players = new MultiSelectList(playerList, "PlayerIDs", "PlayerUserName"); 
    return View(np); 
} 

[HttpPost] 
public ActionResult AddPlayersView(AddPlayersToGame model) 
{ 
    foreach (var playerID in model.PlayerIDs) 
    { 
     var SelPlayer = db.Players.Find(playerID); 

     if (SelPlayer== null) 
     { 
      return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
     } 

     if (SelPlayer != null) 
     { 
      Game GameSelected = new Game(); 
      GameSelected.GamePlayers.Add(SelPlayer); 

      db.Entry(GameSelected).State = EntityState.Modified; 
      db.SaveChanges(); 
     } 
    } 
    return RedirectToAction("GameDetailsView"); 
} 

Посмотреть

@model WebGameProj.ViewModels.AddPlayersToGame 

<div> 
{ 
    @Html.ListBoxFor(x => x.PlayerIDs, Model.Players) 
    <input type="submit" /> 
} 
</div> 
Смежные вопросы