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()
控制器方法和myEmployeeDetailModel
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);
}