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

时间:2016-11-08 18:05:22

标签: asp.net-mvc database viewmodel

我有一个局部视图,其中包含下拉列表,该列表从名为Months的表中获取值,此视图中使用的部分视图称为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类代码:

 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; }
}
}

2 个答案:

答案 0 :(得分:0)

可能会发生这种情况,因为虽然您创建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; }
}

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

,它将无济于事

答案 1 :(得分:0)

看起来您的主视图不正确,如果您只想查看一个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)
}