2009-04-28 93 views
1

我有一個數據庫菜單結構,我想添加到site.master文件。ASP.NET MVC - 數據庫驅動菜單

我已經看過StackOverflow的其他問題,但無法讓我的網站上工作。

如何將用戶控件添加到Site.Master文件?

Menu.ascx

<%foreach (MainMenuSort mainMenuSort in (List<MainMenuSort>)ViewData["MainMenuSortListDisplay"]) 
     { %> 
     <li><%= Html.Encode(mainMenuSort.MainMenuId.MainMenuName)%></li> 
     <%foreach (SubMenuSort subMenuSort in (List<SubMenuSort>)ViewData["SubMenuSortListDisplay"]) 
      {%> 
      <%if (mainMenuSort.MainMenuId.Id == subMenuSort.SubMenuId.MainMenu.Id) 
       { %> 
       <li><%= Html.Encode(subMenuSort.SubMenuId.SubMenuName)%></li> 
      <%} %> 
     <%} %> 
     <%}%> 

回答

0

在此link的幫助下。我能夠在site.master頁面顯示一個菜單。

3

您需要使用Html.RenderPartial方法在你的母版頁。

您將需要設置任何動作被調用使用您的母版頁視圖中MainMenuSortListDisplay和SubMenuSortListDisplay查看數據的密鑰。

在你的主人使用該

<% Html.RenderPartial("~/Views/Shared/Menu.ascx"); 

的路徑需要到控制的文件夾中的應用程序相對路徑。通常這些都在共享下。您可以在共享文件夾下面設置結構。

要使這種技術更強大,請使用強類型部分。在這個問題中,您可能會創建一個具有兩個通用集合的新類(MenuModel)作爲屬性,並將其放置在應用程序的模型文件夾中。然後在模型的構造函數中調用一個填充列表的方法。

public class MenuModel 
{ 
    public IEnumerable<MainMenuSort> OuterList {get; set;} 
    public IEnumerable<SubMEnuSort> InnerList {get; set;} 
    public MenuModel() 
    { 
     VoidThatFillsTheInnerAndOuterList(); 
    } 

這將意味着你可以在你的控制器

public ActionResult ShowAForm() 
{ 
    ViewData["MenuPartialData"] = new MenuModel(); 
    return View(); 
} 

爲此設置該鍵,您的主頁可以使用的RenderPartial的過載,這樣

<% Html.RenderPartial(
    "~/View/Shared/Menu.ascx", 
    (MenuModel)ViewData["MenuPartialData"]); %> 

這假設你的partial是強類型的MenuModel類。然後,在部分你可以使用重寫你的代碼稍微

<% foreach (MainMenuSort mainMenuSort in Model.OuterList) { %> 
    <li><%= Html.Encode(mainMenuSort.MainMenuId.MainMenuName)%></li> 
    <% foreach (SubMenuSort subMenuSort in Model.InnerList) {%>    
     <%if (mainMenuSort.MainMenuId.Id == subMenuSort.SubMenuId.MainMenu.Id) 
     { %>    
      <li><%= Html.Encode(subMenuSort.SubMenuId.SubMenuName)%></li> 
     <%} %> 
    <%} %>  
    <%}%> 

希望幫助

+0

謝謝。剛剛學習ASP.NET MVC並在site.master頁面添加了<%Html.RenderPartial(「〜/ Views/Shared/Menu.ascx」);%>,但不明白你的意思:「你需要在調用使用母版頁的視圖的任何操作中設置MainMenuSortListDisplay和SubMenuSortListDisplay視圖數據密鑰。「 – Ros 2009-04-28 09:27:59

+0

您可以在控制器類中使用ActionResult方法調用頁面,在這種方法中,您需要設置ViewData鍵,例如: ViewData [」SubMenuSortListDisplay「] = SomeListPreferablyFromYourModel – 2009-04-28 09:32:16

0

試着這麼做

<% Html.RenderPartial("Menu") %> 

編輯模型:修正了錯字

0

你也可以做爲HTMLHelper並在MasterPage中調用<%= Html.Menu()%>。然後在你的HTMLHelper中你有代碼來獲取數據庫記錄並通過它們循環。這是我發現的一個link讓你開始。請注意我的評論,因爲在提供的代碼示例中存在一個錯誤。我仍然有處理菜單子項的問題,我想我需要一個遞歸函數或什麼?