在ModelState.IsValid失败后如何保留导航元素?

时间:2013-01-08 12:08:36

标签: asp.net-mvc-3 validation

我有以下一对编辑控制器方法。

初始调用没有问题,并正确显示两个子/导航对象的模型和属性(1:1关系)。

当我尝试保存时,如果模型有效则没有问题。

虽然它是无效的,但是在我的视图中我引用了一个引用任何子/导航属性的空引用 - 它们在原始视图中是正确的。

public ActionResult Edit(int id)
    {
        var reportcustomerlimit = db.ReportCustomerLimits.Single(r => r.Id == id);
        return View(reportcustomerlimit);
    }

    [HttpPost]
    public ActionResult Edit(ReportCustomerLimit reportcustomerlimit)
    {
        if (ModelState.IsValid)
        {
            db.ReportCustomerLimits.Attach(reportcustomerlimit);
            reportcustomerlimit.ReportCustomer.Verified = false;
            ReportGenerator.ClearAllReportsZip();
            db.ObjectStateManager.ChangeObjectState(reportcustomerlimit, EntityState.Modified);
            db.SaveChanges();
            return RedirectToAction("Index", new { id = reportcustomerlimit.CustomerNumber });
        }
        else
        {
            //What do I do here?
        }
        return View(reportcustomerlimit);
    }

我错过了什么?

(注意:验证通常在客户端完成,并停止提交表单 - 但我已关闭javascript以测试服务器端验证工作)

1 个答案:

答案 0 :(得分:0)

试试这段代码:

[HttpPost]
    public ActionResult Edit(ReportCustomerLimit reportcustomerlimit)
    {
        if (ModelState.IsValid)
        {
            db.ReportCustomerLimits.Attach(reportcustomerlimit);
            reportcustomerlimit.ReportCustomer.Verified = false;
            ReportGenerator.ClearAllReportsZip();
            db.ObjectStateManager.ChangeObjectState(reportcustomerlimit, EntityState.Modified);
            db.SaveChanges();
            return RedirectToAction("Index", new { id = reportcustomerlimit.CustomerNumber });
        }
        else
        {
            var reportcustomerlimit = db.ReportCustomerLimits.Single(r => r.Id == id);
            return View(reportcustomerlimit);
        }

    }

希望它有所帮助。