2011-11-23 76 views
1

我是新來的MVC世界,需要一些指導。我正在嘗試爲網站創建一個垂直多級菜單。對於菜單中的數據存儲在數據庫表結構如下:ASP.NET MVC 3嵌套列表

ID, categoryName, parentID

我如何去了解這個定期ADO.NET和MVC?據我可以告訴我需要作出MenuItem類與int ID,string nameList<MenuItem> Children屬性。然後我需要創建和實例這個類代表垂直菜單,然後我需要爲視圖生成HTML。

我已經在網上搜索了一個簡單的示例,但我沒有找到任何我能理解的東西。如果有人能夠引導我完成這個任務,那將會非常受人歡迎!

+0

首先,我會覺得HTML和CSS的例子來創建一個像一個你想要的菜單。然後我將着重於草擬代表菜單項的模型。最後,研究視圖本身,它結合了你設計的模型和HTML。 –

+0

除了@SergioTapia所說的之外,由於您正在將這些菜單項存儲到數據庫中,因此您可能還需要關於ADO.NET的教程才能獲取它們。如果您遇到與其中一項任務有關的困難,請毫不猶豫地提出具體問題。 –

+0

現在我唯一的問題是找出一種方法遞歸填充menuItem對象。 – Razor

回答

2

您應該編輯您的問題或將其分解爲更具體的問題。

我會在你的評論中回答如何遞歸加載MenuItems的具體問題。

你寫過你使用普通的ADO.NET。我是自由的在我的示例代碼中使用短小精悍這讓生活更容易一點:

因此,這裏是你MenuItem類:

public class MenuItem 
{ 
    public int Id { get; set; } 
    public int? ParentId { get; set; } 
    public List<MenuItem> Children { get; set; } 
} 

現在我們打開一個連接,整個MenuItems表加載到一個單一的集合:

SqlConnection conn = new SqlConnection("..."); 
conn.Open(); 
IEnumerable<MenuItem> allItems = conn.Query<MenuItem>("SELECT * FROM MenuItems"); 

我假裝你將有一個MenuItem作爲ParentId = null的根項目。讓我們找到它:

MenuItem rootMenu = allItems.Single(m => m.ParentId == null); 

我們不得不做的最後一件事是重新排列層次樹中的項目。我們用遞歸地工作的函數做到這一點:

loadChildren(rootMenu, allItems); 

這裏是函數。它只是簡單地查找傳遞項目的孩子們,並呼籲自己所有發現的childNodes:

private static void loadChildren(MenuItem currentItem, 
           IEnumerable<MenuItem> allItems) 
{ 
    currentItem.Children = allItems 
          .Where(m => m.ParentId == currentItem.Id).ToList(); 
    foreach (var childItem in currentItem.Children) 
    { 
     loadChildren(childItem, allItems); 
    } 
} 
+0

這就是我一直在尋找的!感謝大家在這方面的幫助。 – Razor