您應該編輯您的問題或將其分解爲更具體的問題。
我會在你的評論中回答如何遞歸加載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);
}
}
來源
2011-11-23 22:27:24
Jan
首先,我會覺得HTML和CSS的例子來創建一個像一個你想要的菜單。然後我將着重於草擬代表菜單項的模型。最後,研究視圖本身,它結合了你設計的模型和HTML。 –
除了@SergioTapia所說的之外,由於您正在將這些菜單項存儲到數據庫中,因此您可能還需要關於ADO.NET的教程才能獲取它們。如果您遇到與其中一項任務有關的困難,請毫不猶豫地提出具體問題。 –
現在我唯一的問題是找出一種方法遞歸填充menuItem對象。 – Razor