0

編集用に次のコントローラーメソッドのペアがあります。

最初の呼び出しは問題なく、2 つの子/ナビゲーション オブジェクトのモデルとプロパティが正しく表示されます (1:1 の関係)。

保存しようとすると、モデルが有効であれば問題ありません。

ただし、無効な場合は、元のビューに正しく存在していた子/ナビゲーション プロパティのいずれかを参照するビューで null 参照を取得します。

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 をオフにしました)

4

1 に答える 1

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);
        }

    }

それが役に立てば幸い。

于 2013-01-08T12:23:43.007 に答える