0

次のエラー メッセージが表示されて困っています。

Object reference not set to an instance of an object.

改行:

Line 16:         </div>
Line 17:         <div class="editor-field">
Line 18:              @Html.DropDownList("KPI.CSF.FYID", Model.Financial_Years)
Line 19:             @Html.ValidationMessageFor(model => model.KPI.CSF.FYID)
Line 20:         </div>

これは、mvc プロジェクトでのフォーム ポスト中に発生します。

作成フォームをロードするときに、次のビューモデルを渡しています。

public class KPICreateFormViewModel
    {

        //Properties
        public KPI KPI { get; set; }
        public SelectList Financial_Years { get; private set; }

        FYRepository fyrepo = new FYRepository();
      public KPICreateFormViewModel(KPI kpi)
        {
            KPI = kpi;
            Financial_Years = new SelectList(fyrepo.GetFys(), "ID", "Financial_Year");

        }

    }

私は会計年度をドロップダウンに使用します。これにより、いくつかの ajax が開始され、投稿に ID 番号が入力される他のいくつかのドロップダウンがカスケードされます。

会計年度のドロップダウンで、コントローラーの http ポスト メソッド中に何もポストしたくなかったので、次のものを返すだけで問題ないと考えました。

[HttpPost]
    public ActionResult Create(KPI kpi)
    {
        try
        {

            kpirepository.Add(kpi);
            kpirepository.Save();


            return RedirectToAction("Details", new { id = kpi.ID });
        }
        catch
        {
            return View();
        }
    }

私のビューがビューモデルに基づいているため、これはすべて起こっていると思いますが、投稿時にこれを返していませんか? カスケードコードを何時間もいじって機能させた後、この問題に取り組むために頭が少し揚げられています..助けてください!

会計年度のドロップダウンを示す私のビューに関連する部分:

@model ES_Business_Intelligence.ViewModels.Admin.KPICreateFormViewModel

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>KPI</legend>
        <div class="editor-label">
            @Html.LabelFor(model => model.KPI.CSF.FYID)
        </div>
        <div class="editor-field">
             @Html.DropDownList("KPI.CSF.FYID", Model.Financial_Years)
            @Html.ValidationMessageFor(model => model.KPI.CSF.FYID)
        </div>
4

2 に答える 2

1

webdeveloper から問題を確認した後、さらに掘り下げたところ、フォーム送信からデータを返すときにビューモデルの特定の要素をバインドしないように指示できることがわかりました。ビューモデルに次のコードを追加しました。

[Bind(Exclude = "Financial_Years")]
    public class KPICreateFormViewModel
    {

        //Properties
        public KPI KPI { get; set; }
        public SelectList Financial_Years { get; private set; }

        FYRepository fyrepo = new FYRepository();
      public KPICreateFormViewModel(KPI kpi)
        {
            KPI = kpi;
            Financial_Years = new SelectList(fyrepo.GetFys(), "ID", "Financial_Year");

        }

    }

魔法はすべて最初の行にあります。

[Bind(Exclude = "Financial_Years")]
于 2012-09-17T06:23:52.720 に答える
0

厳密に型指定されたビューを使用し、nullビューへのパスを投稿した後、プロパティにアクセスしようとすると例外がスローされるのはそのためです ( model => model.KPI.CSF.FYID)。解決策として、モデルがnull.

于 2012-09-16T22:19:08.510 に答える