MVC的Create()视图中的argumementnullexception
本文关键字:argumementnullexception 视图 Create MVC | 更新日期: 2023-09-27 18:04:34
我正试图建立一个Create()
视图来添加新的人,但当它到达DropDownListFor
选项时,我得到了ArgumentNullException
。
我的角色表有三个角色演员, 导演和制片人(值1,2,3分别为他们的关键ID),我希望他们在Create()
上填充这个下拉框。
我的朋友得到了这个工作的Edit()
功能来更新我的人的数据库,现在我正试图做Create()
。我最初在Visual Studio中自动生成默认的方法和视图 (创建,编辑,详细信息,删除,索引),但我一直在经历并删除它们以适应我的自定义信息/查询。现在一切都工作了,除了我的Create()
方法。
准确的误差是
类型为'System '的异常。参数nullexception '发生在System.Core.dll,但未在用户代码
中处理
下面是create.cshtml
视图、Create()
控制器方法和EmployeeDetailModel
视图模型的一些代码片段。
Create ()
// GET: /Movies/Create
public ActionResult Create()
{
var model = new EmployeeDetailModel();
return View(model);
}
创建(EmployeeDetailModel模型)
不确定这段代码是否会工作,因为我的应用程序还没有通过创建视图由于错误,但我把它放在这里供参考
// POST
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(EmployeeDetailModel model)
{
MovieEmployee newMovieEmployee = new MovieEmployee();
if (ModelState.IsValid)
{
newMovieEmployee.roleID = model.NewRoleId;
newMovieEmployee.employeeID = model.Employee.ID;
newMovieEmployee.movieID = model.MovieEmployee.movieID;
Employee newEmployee = new Employee();
newEmployee.Birthday = model.Employee.Birthday;
newEmployee.Name = model.Employee.Name;
db.MovieEmployees.Add(newMovieEmployee);
db.Employees.Add(newEmployee);
db.SaveChanges();
return RedirectToAction("EmployeeInformation");
}
return View(model);
}
创建。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")
}
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; }
}
我还在MVC的早期学习阶段,所以任何帮助是非常感谢!
问题在于
Model.Roles.Select
在模型本身中,Roles
没有初始化为任何值,因此当然是null。当它被传递给扩展方法Select
时,将抛出一个错误。
您需要初始化这个集合,或者在模型类的构造函数中,或者在调用return View(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>();
}
}
或
public ActionResult Create()
{
var model = new EmployeeDetailModel();
model.Roles = new List<WebApplication2.Entities.Role>();
return View(model);
}