1

モデルの「編集」ビューで使用する部分ビューを作成しました。レコードを正常に編集できますが、「作成」ビューの部分ビューを使用すると、null 参照例外が発生します。

これは私の部分的な見解です:

@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 was unhandled」で終了します。

null エラーの原因を特定するにはどうすればよいですか? (私はMVCが初めてです)

UPDATE : エラーは、コントローラーの [HttpPost] Create メソッドに関連しているようです。モデル内のフィールドの 1 つと同じ名前を使用して入力クラスに名前を付けていました...これは、null 参照例外でプログラムを壊したようです。

4

2 に答える 2

1

作成アクションに投稿するとき、例外が発生したときにモデルは有効ですか、それとも無効ですか?無効な場合は、検証付きのフォームを表示するためにビューを返しているが、そのビューの要件の一部が欠落していることが原因である可能性があります(ただし、ViewBag.Contractが入力されています)。両方の作成アクションを完全に表示すると、これを確認するのが簡単になります。

于 2011-02-08T21:15:32.833 に答える
1

部分ビューの作成をレンダリングするときは、次のことを試してください。

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