5

私はmvc初心者です。

私がやろうとしているのは、データベースからメニューをロードして部分ビューで表示することです。この部分ビューは、_layout ビューから呼び出されます。

ホームコントローラー

ホームコントローラーで、「_MainMenu」というアクションを追加します

public class HomeController : Controller
{
        mrpDatabase _db = new mrpDatabase();

        public ActionResult _MainMenu()
        {
          return PartialView("_MainMenu", _db.menu.ToList());
        }
        ....
}

部分表示

これは私の _MainMenu PartialView です

@model IEnumerable<appMRP.Models.menu>
<ul id="menu">
    @foreach (var item in Model)
    {
        <li>@item.menu1</li>
    }                                            
</ul>

レイアウトページ

この部分的なメニューは、私の _Layout.cshtml に次のように表示されます

<nav>                     
  @Html.Partial("_MainMenu")
</nav>

これを実行すると。「NullReferenceException was unhandled by user code. Object reference not set to instance of object」というエラーが表示されました

私の_MainMenuの「モデル」がnullのようです

私は何を間違えましたか?

ありがとうございました

4

2 に答える 2

9

部分ビューでモデルを使用する場合は、次のようにモデルを渡す必要があります。

@Html.Partial("_MainMenu", Model.ListOfMenus)

またはその効果のために何か。_MainMenu現在、ビューのモデルを指定していないため、nullが使用されます。を試行すると@foreach、表示される例外がスローされます。

コントローラアクション@Html.Partial("_MainMenu")を呼び出すのではなく、その名前のビューをレンダリングするだけであることに注意してください。_MainMenu

アクションを呼び出したい場合は、次のような子アクションを使用できます。

@Html.Action("_MainMenu", "HomeController")
于 2013-01-15T05:46:31.270 に答える
4

あなたはすでに答えを得ています。_db.menu.ToList() が null を返していないことを確認してください。Model-View-ViewModelパターンを使用することをお勧めします。ビュー用のモデルを作成します。モデルとビューに表示するものを制御できるように、ビューに戻します。

  1. モデル情報を HTML Partial メソッドに渡していないため、結果として、コレクションを反復処理しようとしています。したがって、null 参照例外がスローされます。

このようなもの

 public class MenuViewModel
{
        public int menuID { get; set; }
        public string  menuname { get; set; }
        public string otherProperty { get; set; }
        public string someotherProperty { get; set; }
}

あなたの見解で

@model IEnumerable<MenuViewModel>

<nav>                     
  @Html.Partial("_MainMenu",Model)
</nav>
于 2013-01-15T05:45:57.603 に答える