メニューはページごとに異なっていないと思いますが、なぜすべてのビュー内でパーシャルを呼び出し、MenuModel をすべてのビューに渡すのでしょうか?
代わりに、を使用して@Html.Action("Menu")
ください。
データベースからメニュー項目を取得するアクションを用意します。エンティティ フレームワークを使用すると、データベースに次のクラスを含めることができます。
public class MenuModel{
public List<MenuItemModel> Items{get;set;}
}
public class MenuItemModel{
public int Id {get;set;}
public string Name {get;set;}
// If there are no childs the object will be null.
public List<MenuItemModel> Childs {get;set;}
}
クラスを取得し、それを HtmlHelper 拡張メソッドに渡すか、MenuModel オブジェクトを取得して表示する cshtml ファイル内の単純なヘルパー関数に渡します。
ロジックは、再帰関数を使用することで簡単になります:現在のアイテムを印刷します。子がある場合 -> 内部アイテム用のテーブル/コンテナを作成し、コンテナ内ですべての子関数に対して同じ関数を呼び出します。