无法将类型 '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);
}
我收到标题错误。我才学 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);
}