值不能为空。参数名称: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)
}
我有一个包含下拉列表的局部视图,该下拉列表从名为 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)
}