2016-12-08 23 views
0

私はAsp.Net MVCで作業していますが、データベースからメニューを取り込みたいのですが、各メニューにサブメニューを挿入するにはどうすればよいのでしょうかこのサブメニューには別のサブメニューなどがあります。データベースから構築された動的メニューを作成する

私はFacebookのコメントと返信モデルのようなものでした。

まず、私は次のようにメニューのモデルを持っている:

public int MenuId { get; set; } 
     public string Name { get; set; } 
     public string Controller { get; set; } 
     public string Action { get; set; } 
     public int Order { get; set; } 
     public string Icon { get; set; } 
     public bool IsAdmin { get; set; } 

サブメニュー:

public int SubMenuId { get; set; } 
     public int MenuId { get; set; } // Menu Fk 
     public string Name { get; set; } 
     public string Controller { get; set; } 
     public string Action { get; set; } 
     public int Order { get; set; } 
     public string Icon { get; set; } 
     public bool IsAdmin { get; set; } 

それは正しく私のロジックだ?誰かが似た何かを実装しますか?私はそれを動作させるためにコントローラに何をする必要がありますか?誰かが例を持っていれば、私は本当にそれを評価しました。ありがとうございました

+0

Nullable ParentIdを含むメニューオブジェクトを持っているだけではないのはなぜですか? –

+0

あなたはそれを私に説明できますか?私は唯一の基本を知っています。@Dobbins – Carl

+0

正しいです。そのため、ParentIdというNullableフィールドがあります。 Parentidがnullの場合は、トップレベルのメニューItemを知っています。次に、parentIdがあなたの現在のメニューIDと等しくなる子アイテムを構築するツリーを歩くことができます。ホールドオンと悪い例を挙げる –

答えて

0

伝統的な方法は、あなたのメニューモデルを持っていて、null可能なParentMenuIdを持っていることです。 ParentMenuIdがヌルの場合、メニューはルートノードです。ナビゲーションプロパティは、.Childrenにアクセスできる各メニューノードから設定して、それを指すすべてのノードを取得できます。

+0

私はそれをコントローラでどのように動作させるか説明していただけますか? – Carl

0

私は@Dobbinsが正しいアイデアを持っていると信じています。データベースでは、MenuLinkテーブルを持つことができます:

MenuLink 
- ID int IDENTITY(1,1) NOT NULL <- Primary Key 
- ParentId int NULL <- Foreign Key 
- OrderNumber int 
- LinkUri varchar(1024) <- Can be replaced with Controller, Action 
- IconUri varchar(1024) 
- Text nvarchar(256) 

データベースからすべてのメニューリンクとそのサブリンクを選択できます。

あなたのメニューオブジェクトは、メニューオブジェクトのリストを持つことができます。

public class MenuLink 
{ 
    int Id { get; set; } 
    int ParentId { get; set; } 
    int OrderNumber { get; set; } 
    Uri LinkUri { get; set; } 
    Uri IconUri { get; set; } 
    string Text { get; set; } 
    IList<MenuLink> SubMenuItems { get; set; } 
} 

今、あなたは、コード内で動的メニューを作成するために、カミソリ、または選択のあなたのJavaScriptフレームワークを使用することができます。

+0

したがって、 'ParentId'は' Id'の 'foreignkey'ですか? – Carl

+0

@Carl - それは正しいです。 ParentIdはIDに対する外部キーです。 – TheJesterCrown

関連する問題