C# MVC的Create()视图中的ArguementNullException

C# MVC的Create()视图中的ArguementNullException,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我试图构建一个Create()视图来添加新的人员,但是当它进入DropDownListFor选项时,我得到了一个ArgumentNullException 我的角色表有三个角色:演员、导演和制作人(键ID分别为值1、2、3),我希望他们在Create()上填充此下拉框 我的朋友将此应用于Edit()函数,以更新我的人员数据库,现在我正在尝试为Create()执行此操作。我最初在VisualStudio中自动生成默认的方法和视图(创建、编辑、详细信息、删除、索引),但我一直在研究并删除它们,以适应

我试图构建一个
Create()
视图来添加新的人员,但是当它进入
DropDownListFor
选项时,我得到了一个
ArgumentNullException

我的角色表有三个角色:演员、导演和制作人(键ID分别为值1、2、3),我希望他们在
Create()
上填充此下拉框

我的朋友将此应用于
Edit()
函数,以更新我的人员数据库,现在我正在尝试为
Create()
执行此操作。我最初在VisualStudio中自动生成默认的方法视图(创建、编辑、详细信息、删除、索引),但我一直在研究并删除它们,以适应我的自定义信息/查询。 现在,除了我的
Create()
方法之外,其他一切都可以正常工作

确切的错误是

中发生“System.ArgumentNullException”类型的异常 System.Core.dll,但未在用户代码中处理

下面是
create.cshtml
视图、
create()
控制器方法和my
EmployeeDetailModel
Viewmodel的一些代码片段

创建()

创建(EmployeeDetailModel模型)

由于错误,我的应用程序尚未通过创建视图,因此不确定此代码是否可以工作,但我将其放在此处以供参考

Create.cshtml-在
@Html.DropDownListFor…

@model WebApplication2.Models.EmployeeDetailModel

@{
    ViewBag.Title = "Create";
}

<h2>Create</h2>


@using (Html.BeginForm()) 
{
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Movie</h4>
        <hr />
        @Html.ValidationSummary(true)

        @Html.HiddenFor(model => model.Employee.ID)
        @Html.HiddenFor(model => model.MovieEmployee.roleID)
        @Html.HiddenFor(model => model.MovieEmployee.movieID)
        @Html.HiddenFor(model => model.MovieEmployee.employeeID)

        <div class="form-group">
            @Html.LabelFor(model => model.Employee.Name, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.TextBoxFor(model => model.Employee.Name)
                @Html.ValidationMessageFor(model => model.Employee.Name)
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.Roles, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.DropDownListFor(r => r.NewRoleId, Model.Roles.Select(x => new SelectListItem() { Selected = (x.ID == Model.MovieEmployee.roleID), Text = x.RoleType, Value = x.ID.ToString() }))
                @Html.ValidationMessageFor(model => model.NewRoleId)
            </div>
        </div>


        <div class="form-group">
            @Html.LabelFor(model => model.Employee.Birthday, new { @class = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.Employee.Birthday)
                @Html.ValidationMessageFor(model => model.Employee.Birthday)
            </div>
        </div>


        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </div>
    </div>
}

<div>
    @Html.ActionLink("Back to List", "EmployeeInformation")
</div>

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
@model WebApplication2.Models.EmployeeDetailModel
@{
ViewBag.Title=“创建”;
}
创造
@使用(Html.BeginForm())
{
@Html.AntiForgeryToken()
电影

@Html.ValidationSummary(true) @Html.HiddenFor(model=>model.Employee.ID) @Html.HiddenFor(model=>model.MovieEmployee.roleID) @Html.HiddenFor(model=>model.MovieEmployee.movieID) @Html.HiddenFor(model=>model.MovieEmployee.employeeID) @LabelFor(model=>model.Employee.Name,新的{@class=“controllabel col-md-2”}) @Html.TextBoxFor(model=>model.Employee.Name) @Html.ValidationMessageFor(model=>model.Employee.Name) @LabelFor(model=>model.Roles,新的{@class=“controllabel col-md-2”}) @Html.DropDownListFor(r=>r.NewRoleId,Model.Roles.Select(x=>newselectListItem(){Selected=(x.ID==Model.MovieEmployee.roleID),Text=x.RoleType,Value=x.ID.ToString()) @Html.ValidationMessageFor(model=>model.NewRoleId) @LabelFor(model=>model.Employee.birth,新的{@class=“controllabel col-md-2”}) @EditorFor(model=>model.Employee.birth) @Html.ValidationMessageFor(model=>model.Employee.birth) } @ActionLink(“返回列表”、“员工信息”) @节脚本{ @Scripts.Render(“~/bundles/jqueryval”) }
EmployeeDetailModel

namespace WebApplication2.Models
public class EmployeeDetailModel
    {
        public WebApplication2.Entities.Employee Employee { get; set; }
        public WebApplication2.Entities.MovieEmployee MovieEmployee { get; set; }
        public IEnumerable<WebApplication2.Entities.Role> Roles { get; set; }
        public int NewRoleId { get; set; }
    }
namespace WebApplication2.Models
公共类EmployeeDetailModel
{
public WebApplication2.Entities.Employee雇员{get;set;}
public WebApplication2.Entities.MovieEmployee MovieEmployee{get;set;}
公共IEnumerable角色{get;set;}
public int NewRoleId{get;set;}
}
我还处于MVC的早期学习阶段,非常感谢您的帮助

问题在于

Model.Roles.Select
在模型本身中,
角色
未初始化为任何内容,因此当然为空。当它被传递到扩展方法
Select
时,会抛出一个错误

您需要在模型类的构造函数中或在调用
返回视图(model)之前的操作中初始化此集合。因此:

public class EmployeeDetailModel
{
    public WebApplication2.Entities.Employee Employee { get; set; }
    public WebApplication2.Entities.MovieEmployee MovieEmployee { get; set; }
    public IEnumerable<WebApplication2.Entities.Role> Roles { get; set; }
    public int NewRoleId { get; set; }

    public EmployeeDetailModel()
    {
        Roles = new List<WebApplication2.Entities.Role>();
    }
}
公共类EmployeeDetailModel
{
public WebApplication2.Entities.Employee雇员{get;set;}
public WebApplication2.Entities.MovieEmployee MovieEmployee{get;set;}
公共IEnumerable角色{get;set;}
public int NewRoleId{get;set;}
公共EmployeeDetailModel()
{
角色=新列表();
}
}

public ActionResult Create()
{
var model=新员工的etailmodel();
model.Roles=新列表();
返回视图(模型);
}

当您创建空的
EmployeeDetailModel
时,构造函数做了什么聪明的事情吗?如果没有,那么像
Model.Roles.这样编码。选择
并在视图中选择
Model.MovieEmployee.roleID
将抛出
NullReferenceException
Model.Roles.Select
public class EmployeeDetailModel
{
    public WebApplication2.Entities.Employee Employee { get; set; }
    public WebApplication2.Entities.MovieEmployee MovieEmployee { get; set; }
    public IEnumerable<WebApplication2.Entities.Role> Roles { get; set; }
    public int NewRoleId { get; set; }

    public EmployeeDetailModel()
    {
        Roles = new List<WebApplication2.Entities.Role>();
    }
}
public ActionResult Create()
{
    var model = new EmployeeDetailModel();
    model.Roles = new List<WebApplication2.Entities.Role>();
    return View(model);
}