0

コントローラーの 1 つの編集アクションを呼び出すと、このエラーが発生します。

Edit アクション メソッドの C# コードを次に示します。

   [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Edit(cedetails detailToEdit)
    {
        validateDetail(detailToEdit);
        if (!ModelState.IsValid)
            return View();

        try
        {
            var originaldetail = (from d in entity1.cedetails
                                  where d.detail_id == detailToEdit.detail_id
                                  select d).FirstOrDefault();
            entity1.ApplyPropertyChanges(originaldetail.EntityKey.EntitySetName, detailToEdit);
            entity1.SaveChanges();
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

これは、validateDetail メソッドです。

protected void validateDetail(cedetails detailToValidate)
{

    if (detailToValidate.c_name.Trim().Length == 0)
        ModelState.AddModelError("c_name", "C name is required.");
        ModelState.SetModelValue("c_name", ValueProvider["c_name"]);
    if (detailToValidate.a_server.Trim().Length == 0)
        ModelState.AddModelError("a_server", "A server is required.");
        ModelState.SetModelValue("a_server", ValueProvider["a_server"]);
    if (detailToValidate.d_server.Trim().Length == 0)
        ModelState.AddModelError("d_server", "D server is required.");
        ModelState.SetModelValue("d_server", ValueProvider["d_server"]);
    if (detailToValidate.l_server.Trim().Length == 0)
        ModelState.AddModelError("l_server", "L server is required.");
        ModelState.SetModelValue("l_server", ValueProvider["l_server"]);
    if (detailToValidate.url.Trim().Length == 0)
        ModelState.AddModelError("url", "URL is required.");
        ModelState.SetModelValue("url", ValueProvider["url"]);
    if (detailToValidate.s_id.Trim().Length == 0)
        ModelState.AddModelError("s_id", "S ID is required.");
        ModelState.SetModelValue("s_id", ValueProvider["s_id"]);
}

次の行にエラーが表示されます。

<%= Html.TextBox("c_name", Model.c_name) %>  

例外の詳細: System.NullReferenceException: オブジェクト参照がオブジェクトのインスタンスに設定されていません。

このエラーを検索したところ、いくつかの解決策が見つかりましたが、どれもうまくいきませんでした。これがまったく解決できるかどうか教えてください。また、detail_id を含む特定のテーブル列を表示するだけでなく、ビューで非表示にすることを選択したことも付け加えておきます。

4

2 に答える 2

2

あなたの Index アクションはモデルを設定しますか? edit アクションはどこにもありません。そのため、Model が Index アクションに設定されていない場合 (ala return View(cedetials))、Model は null になります。

于 2009-12-10T22:28:23.303 に答える
0

私は blue_fenix が彼の答えにポイントがあると思います。ここでモデルを設定していないようです:

if (!ModelState.IsValid)
            return View();

そしてここ:

catch
        {
            return View();
        }

HTML テキストボックス ヘルパーは null にできないモデルを監視しているため、モデルを返す必要があります。それぞれのケースで、同じバインドされたモデルを返すようにしてください:

return View(detailToEdit);
于 2009-12-11T05:19:59.073 に答える