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的早期学习阶段,所以任何帮助是非常感谢!

MVC的Create()视图中的argumementnullexception

问题在于

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);
}
相关文章:
  • 没有找到相关文章