ASP .NET MVC - 创建局部视图仅适用于“编辑”动作结果,而不适用于“创建”

时间:2011-02-08 21:01:32

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-partialview

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

这是我的部分观点:

@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'。

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

UPDATE :错误似乎与我控制器中的[HttpPost] Create方法有关。我使用与模型中某个字段相同的名称来命名输入类...这似乎打破了程序的空引用异常。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

<% Html.RenderPartial("YouPartialViewName", new Reason()); %>