值不能为空。参数名称:MVC5 中的项目错误

Value cannot be null. Parameter name: items error in MVC5

我有一个包含下拉列表的局部视图,该下拉列表从名为 Months 的 table 中获取值,该局部视图在名为 PSR

的视图中使用

我在控制器中传递了对象:

public ActionResult PSR()
    {

        var PSRS = _context.PSRs.ToList();
        var months = _context.Months.ToList();

        var viewModel = new PSRViewModel
        {
            PSRs = PSRS,
            Months = months

        };
        return View(viewModel);
    }

内部局部视图:

@model Project.ViewModels.PSRViewModel

 <h5> Month </h5>
<div class="form-group">
@Html.LabelFor(m => m.Month.month)
@Html.DropDownListFor(m => m.Month.month, new SelectList(Model.Months, "Id",     "month"), "--Select Month--", new { @class = "form-control" })

</div>

PSR 视图中的这个:

@model List<Project.ViewModels.PSRViewModel>
@{
ViewBag.Title = "PSR";
Layout = "~/Views/Shared/_Layout.cshtml";
}

<div>
@Html.Partial("~/Views/Doctors/_AddPSR.cshtml", new      Project.ViewModels.PSRViewModel()) </div>

那么为什么在 运行 PSR 视图中一直出现这个错误?即使将对象传递给该视图

这是 ViewModel class 代码:

 namespace Project.ViewModels
{
public class PSRViewModel
{

    public PSR PSR { get; set; }
    public List<PSR> PSRs { get; set; }
    public Doctor Doctor { get; set; }
    public List<Month> Months { get; set; }
    public Month Month { get; set; }
}
}

我应该把它放在控制器中吗?

var months = new List<Month> {

 };

更新: 月份模型

namespace Project.Models
{
public class Month
{
    public int Id { get; set; }
    public string month { get; set; }
}
}

可能会发生这种情况,因为虽然您创建了 PSRViewModel,但您没有实例化月份列表。默认情况下,它将使用空值进行初始化。所以,你可以简单地这样做:

public class PSRViewModel
{
    public PSR PSR { get; set; }
    public List<PSR> PSRs { get; set; }
    public Doctor Doctor { get; set; }
    public List<Month> Months { get; set; } = new List<Month>();
    public Month Month { get; set; }
}

但是,当然,如果您想将数据从数据库加载到此列表,这将无济于事

看来您的主视图不正确,如果您只想查看一个 PSRView 模型,请更改您的@model,稍后再将其传递给您的局部视图。

更改您的 PSRView

@model Project.ViewModels.PSRViewModel
@{
ViewBag.Title = "PSR";
Layout = "~/Views/Shared/_Layout.cshtml";
}


<div>
@Html.Partial("~/Views/Doctors/_AddPSR.cshtml", model)

多于一个 PSRView

@model List<Project.ViewModels.PSRViewModel>
@{
ViewBag.Title = "PSR";
Layout = "~/Views/Shared/_Layout.cshtml";
}


<div>
@foreach(PSRViewModel m in model){
    @Html.Partial("~/Views/Doctors/_AddPSR.cshtml", m)
}