DropDownListFor не работает. Получение ошибки: «Нет элемента ViewData типа« IEnumerable <SelectListItem>», который имеет ключ * key *» - PullRequest
0 голосов
/ 30 сентября 2019

Модель:

public int Id { get; set; }

public string AuthorName { get; set; }

public int AuthorId { get; set; }

[Required]
[StringLength(150)]
public string Title { get; set; }

public int? Pages { get; set; }
public int? Price { get; set; }

public virtual Authors Authors { get; set; }

Вид:

@Html.DropDownListFor(model => model.AuthorId, ViewBag.AuthorId as SelectList)

Контроллер:

   public ActionResult Index()
{
    List<Books> authors;
    using (Model1 db = new Model1())
    {
        authors = db.Books.ToList();
        SelectList author = new SelectList(db.Authors, "Id", "FirstName", db.Authors.Select(model => model.Id));
        ViewBag.AuthorId = author;
    }
    return View(authors);




}

Я не могу понять, в чем проблема. Проверьте код, напишите все правильно, но при попытке создать поле с названием книги, ценами и количеством листов выдает эту ошибку:

"Нет элемента ViewData извведите 'IEnumerable' с ключом key"

Не знаете, что это такое и как это исправить.

Пытался найти решение нафорумы, но я все равно получаю тот же результат.

Более того, если я использую EditorFor, и если я ввожу идентификатор созданного автора - все работает. Что я делаю неправильно? Что вызывает ошибку и как ее исправить?

Заранее спасибо.

1 Ответ

1 голос
/ 30 сентября 2019

В вашем коде есть много проблем, которые вы опубликовали.

  • Ключ ViewBag и имя свойства модели не должны совпадать, поскольку это приводит к проблемам
  • Убедитесь, чточто Authors класс имеет FirstName свойство
  • db.Authors.Select(model => model.Id) вообще не нужно в конструкторе SelectList

    Во-первых, не используйте тот же ключ дляViewBag что у вас есть свойство в вашей модели. Измените код представления на:

    @Html.DropDownListFor(model => model.AuthorId, ViewBag.AuthorsList as SelectList)
    

и в действии контроллера заполните ViewBag.AuthorsList как:

ViewBag.AuthorsList = new SelectList(db.Authors.Select(x =>
                                                       new 
                                                       {
                                                        Id = x.Id,
                                                        FirstName = x.FirstName
                                                       }).ToList(), 
                                      "Id", 
                                      "FirstName");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...