无法将类型 'System.Collections.Generic.List<FWPasw6.Models.Rescuer>' 隐式转换为 'FWPasws6.Models.Rescuer'

Cannot implicitly convert type 'System.Collections.Generic.List<FWPasw6.Models.Rescuer>' to 'FWPasws6.Models.Rescuer'

我收到标题错误。我才学 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<>,但它只会导致更多错误。

变量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);
}