1

我创建了一个局部视图,供模型的“编辑”视图使用。我可以成功地编辑记录,但是在为我的“创建”视图使用部分视图时,我得到一个空引用异常。

这是我的部分观点:

@model MvcA.Models.Reason       

        @Html.LabelFor(model => model.reason)
        @Html.EditorFor(model => model.reason)

        @Html.LabelFor(model => model.Contract)
        @Html.DropDownList("ContractId",
        new SelectList(ViewBag.Contract as System.Collections.IEnumerable,
       "ContractId","Name",Model.ContractID));

和 POST ActionResult:

[HttpPost]
public ActionResult Create(Reason reason)
{
   if (ModelState.IsValid)
            {
                db.Reason.Add(reason);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            //invalid ...

GET 创建:

public ActionResult Create()
    {
        ViewBag.Contract = db.Contract.OrderBy(g => g.Name).ToList();
        var reason = new Reason();
        return View(reason);
    } 

输入/选择有效值后,表单提交将导致 Visual Studio 退出到部分视图中的“DropDownList”,并显示“未处理 NullReferenceException”。

如何确定导致 null 错误的原因?(我是 MVC 新手)

更新:错误似乎与我的控制器中的 [HttpPost] Create 方法有关。我使用与模型中的字段之一相同的名称来命名输入类......这似乎已经破坏了具有空引用异常的程序。

4

2 回答 2

1

当您发布到创建操作时,模型是有效的还是无效的?如果它无效,很可能是因为您正在返回一个视图以显示带有验证的表单,但缺少该视图的一些要求(例如 ViewBag.Contract 正在填充)。如果您完整显示这两个创建操作,则更容易验证这一点。

于 2011-02-08T21:15:32.833 回答
1

当您渲染创建局部视图时,请尝试:

<% Html.RenderPartial("YouPartialViewName", new Reason()); %>
于 2011-02-08T21:18:06.607 回答