ASP.NET MVC - 数据库驱动菜单

时间:2009-04-28 09:01:22

标签: asp.net-mvc menu

我有一个数据库菜单结构,我想将其添加到site.master文件中。

我已经在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>
            <%} %>
         <%} %>
      <%}%>

4 个答案:

答案 0 :(得分:3)

您需要在母版页中使用Html.RenderPartial方法。

您需要在调用使用母版页的视图的任何操作中设置MainMenuSortListDisplay和SubMenuSortListDisplay视图数据键。

在你的主人中使用这个

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

路径需要是控件文件夹的app相对路径。通常这些都属于共享。您可以在共享文件夹下创建所需的结构。

要使此技术更强大,请使用强类型部分。在这个问题中,您可能会创建一个具有两个泛型集合作为属性的新类(MenuModel),并将其放在应用程序的models文件夹中。然后在模型的构造函数中调用一个填充列表的方法。

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"]); %>

这假设您的部分是对MenuModel类的强类型。然后在partial中你可以使用稍微重写代码的模型

<% 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>
      <%} %>
     <%} %>      
    <%}%>

希望有所帮助

答案 1 :(得分:0)

尝试类似

的内容
<% Html.RenderPartial("Menu") %>

编辑:修正了错误

答案 2 :(得分:0)

您也可以将其作为HTMLHelper执行,并在MasterPage中调用&lt;%= Html.Menu()%&gt;。然后在HTMLHelper中,您将获得获取数据库记录并循环遍历它们的代码。这是我发现的link让你入门。请注意我的评论,因为提供的代码示例中存在错误。我仍然遇到处理子菜单菜单的问题,我想我需要一个递归函数或什么?

答案 3 :(得分:0)

在此link的帮助下。我能够在site.master页面中显示一个菜单。