Не удается неявно преобразовать тип 'System.Collections.Generic.List'to' FWPasws6.Models.Rescuer ' - PullRequest
0 голосов
/ 14 октября 2018

Я получаю ошибку в качестве заголовка.Я только изучил ASP.NET MVC в течение месяца или около того, я путаюсь с ошибками для тех, кто знает, как исправить эту ошибку и у меня есть время, чтобы объяснить, в чем причины, огромное спасибо вам, сэр!

Код, который у меня есть для моей ViewModel:

public class RescuerViewModel
{
    public Rescuer Rescuer { get; set; }
}

Для моего контроллера, имеющего ошибку,

public ActionResult New()
    {
        var rescuers = _context.Rescuers.ToList();

        var viewModel = new RescuerViewModel
        {
            Rescuer = rescuers //error here
        };

        return View("RescuerForm", viewModel);
    }

В том же контроллере, который использует ту же модель представленияно без ошибки

public ActionResult Edit(int id)
    {
        var rescuer = _context.Rescuers.SingleOrDefault(c => c.Id == id);

        if (rescuer == null)
            return HttpNotFound();

        var viewModel = new RescuerViewModel
        {
            Rescuer = rescuer //this works fine
        };

        return View("RescuerForm", viewModel);
    }

я пробую IEnumerable <>, но это просто вызывает гораздо больше ошибок.

1 Ответ

0 голосов
/ 14 октября 2018

В переменной rescuers хранится коллекция Rescuer объектов.Его тип - это тип коллекции (из Rescuer объектов).Свойство модели представления Rescuer имеет тип Rescuer, в котором может храниться один объект.В вашем текущем коде вы пытаетесь сохранить коллекцию, в которой предполагается хранить один элемент, поэтому вы получаете эту ошибку.

Решение состоит в том, чтобы сохранить один объект вместо списка в этом свойстве (или null , поскольку это ссылочный тип, допускающий значение NULL.Но это ваш New метод действия.Поэтому нет смысла назначать объект Rescuer, считываемый из базы данных.Если вы используете нулевую ссылку, потому что у вас есть свойство Rescuer в вашей модели представления, которое вы используете в своем представлении с помощью вспомогательных методов (например, TextBoxFor) или помощников тегов, вы можете рассмотреть возможность инициализации его пустым объектом.

var viewModel = new RescuerViewModel();
viewModel.Rescuer = new Rescuer();

Другой вариант - выполнить инициализацию в конструкторе модели представления.

public class RescuerViewModel
{
    public Rescuer Rescuer { get; set; }

    public RescuerViewModel()
    {
        Rescuer = new Rescuer();
    }
}

Теперь вы можете просто создать объект RescuerViewModel и передать его в представление.

public ActionResult New()
{
    var viewModel = new RescuerViewModel();
    return View("RescuerForm", viewModel);
}
...