Ошибка заполнения DropDown в ASP.NET MVC 5 - PullRequest
0 голосов
/ 09 марта 2019

В моем контроллере есть следующее:

public ActionResult Create()
{
    ViewBag.PlayerId = new SelectList(db.Players, "Id", "Name");
    return View();
}  

Это в представлении:

<div class="form-group">
    @Html.LabelFor(model => model.PlayerId, "PlayerId", htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
            @Html.DropDownList("PlayerId", null, htmlAttributes: new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.PlayerId, "", new { @class = "text-danger" })
    </div>
</div>  

Но когда я отправляю форму, она выдает мне следующую ошибку:

System.InvalidOperationException: 'Элемент ViewData, имеющий ключ' PlayerId ', имеет тип' System.Int32 ', но должен иметь тип' IEnumerable '.'

Я много гуглил, но не смог найти решение. Ваша помощь высоко ценится.

Ответы [ 2 ]

0 голосов
/ 10 марта 2019

Вы должны передать SelectList в раскрывающийся список, но на самом деле связыватель модели путается между PlayerId как свойством viewmodel и PlayerId как ViewBag свойством, что приводит к ошибке.

Лучшесоздайте свойство viewmodel, в котором будет храниться список опций с другим именем:

public class ViewModel
{
    public int PlayerId { get; set; }

    // other properties

    // option list here
    public List<SelectListItem> PlayerList { get; set; }
}

Затем добавьте списки опций из базы данных в действие контроллера:

public ActionResult Create()
{
    var model = new ViewModel();
    model.PlayerList = db.Players.Select(x => new SelectListItem { Text = x.Name, Value = x.Id }).ToList();
    return View(model);
}

И используйте хелпер со строгим типом для привязкивпоследствии:

@Html.DropDownListFor(model => model.PlayerId, Model.PlayerList, "Select", new { @class = "form-control" })

Проблема, связанная с данной:

Элемент ViewData, имеющий ключ, имеет тип 'System.Int32', но должен иметь тип 'IEnumerable '

0 голосов
/ 10 марта 2019

Напишите @Html.DropDownList следующим образом:

@Html.DropDownList("PlayerId", ViewBag.PlayerId as SelectList,"Select Player", htmlAttributes: new { @class = "form-control" })

Теперь это будет работать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...