0

Categories というテーブルがあり、次のフィールドが含まれています。名前 | ParentId //親 ID は実際には自己参照です

そのため、_Layout.cshtml から MainMenu.cshtml という部分ビューを呼び出しています。

_Layout.cshtml

    @Html.Partial("MainMenu")

モデルをメインメニューに送信するにはどうすればよいですか。部分的なオーバーロードがあることはわかっています。モデルも送信できます。MVC アーキテクチャを壊さないエレガントな方法で問題を解決しようとしています。

4

1 に答える 1

0

メニューはページごとに異なっていないと思いますが、なぜすべてのビュー内でパーシャルを呼び出し、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 ファイル内の単純なヘルパー関数に渡します。

ロジックは、再帰関数を使用することで簡単になります:現在のアイテムを印刷します。子がある場合 -> 内部アイテム用のテーブル/コンテナを作成し、コンテナ内ですべての子関数に対して同じ関数を呼び出します。

于 2012-10-04T19:53:22.613 に答える