2014-01-06 76 views
1

你好用的HtmlHelper和部分頁面視圖中的項目中,我實現使用ASP.NET MVC3剃刀..My菜單結構動態菜單是呈現在ASP.Net MVC3

1.UserManagement 1.1Create新用戶 1.2Create新角色 2.Accounts 2.1Income 2.2Expense

對於上述結構我有一個頁面佈局(CSS和腳本)和它的工作的罰款。 的問題是,在我看來,頁面菜單不正確的格式 顯示。有兩種HtmlHelperExtensions一個是主菜單和其他爲副menu.Both在Menus.cshtml的部分頁面初始化

@model IEnumerable<Elixir.Models.Menus> 

<div> 
    @Html.Raw(@Html.ParentMenus(Model)) 



    </div> 

    <div> 

    @Html.Raw(@Html.SubMenu(Model,3)) 
    </div> 

更新部分代碼代碼

@model IEnumerable<Elixir.Models.Menus> 


    @Html.Raw(@Html.ParentMenus(Model)) 

    @foreach (var menuitem in Model) 
    { 


     <div> 
     @Html.Raw(@Html.ParentMenus(Model)) 
     </div> 
     <div> 
     @if (menuitem.MainMenuId == menuitem.MenuId) 
     { 
      int ab = Convert.ToInt32(menuitem.MainMenuId); 
    @Html.Raw(@Html.SubMenu(Model, ab)) 
     } 
    </div> 

    } 

如何調用子菜單時動態父菜單called.Here是 明確將主菜單ID分配爲子菜單中的「3」。

如何連接父菜單Html助手與子菜單?

的HtmlHelper擴展代碼

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using System.Web.Mvc.Html; 
using Elixir.Models; 

namespace Elixir.HtmlHelpers 
{ 
    public static class HtmlHelperExtensions 
    { 
     public static string ParentMenus(this HtmlHelper html,IEnumerable<Elixir.Models.Menus> menu) 
     { 
      string htmloutput=string.Empty; 
      if (menu.Count() > 0) 
      { 
       htmloutput += "<ul class='side-navigation accordion' id='nav-accordion'>"; 
       var MainMenu = from mainMenu in menu where mainMenu.MainMenuId == null orderby mainMenu.MenuOrder select mainMenu; 
       foreach (Menus m in MainMenu) 
       { 
        htmloutput += "<li>"; 
        htmloutput += "<li><i class='icon-home'>"; 
        htmloutput += LinkExtensions.ActionLink(html, m.LinkName, m.ActionName, m.ControllerName); 
        htmloutput += "</li>"; 
        htmloutput += "</li></i>"; 
       } 
       htmloutput += "</ul>"; 
      } 

      return htmloutput; 

     } 

     public static string SubMenu(this HtmlHelper html, IEnumerable<Menus> SubMenu, int MenuId) 
     { 
      string htmlOutput = string.Empty; 
      if (SubMenu.Count() > 0) 
      { 
       htmlOutput += "<ul class='side-navigation accordion' id='nav-accordion'>"; 
       var subMenu = from SMenu in SubMenu where SMenu.MainMenuId == MenuId orderby SMenu.MenuOrder select SMenu; 
       foreach (Menus m in subMenu) 
       { 
        htmlOutput += "<li>"; 
        htmlOutput += "<li><i class='icon-home'>"; 
        htmlOutput += LinkExtensions.ActionLink(html, m.LinkName, m.ActionName, m.ControllerName); 
        htmlOutput += "</li>"; 
        htmlOutput += "</li></i>"; 
       } 
       htmlOutput += "</ul>"; 
      } 
      return htmlOutput; 
     } 

    } 
} 

我的索引查看代碼

@{ 
    ViewBag.Title = "Elixir ERP V1.0 Beta"; 
    Layout = "~/Views/Shared/_LayoutUser.cshtml"; 
} 
<div class="main-container"> 
    <div class="main-wrapper"> 
     <div class="scroll-top"> 
      <a href="#" class="tip-top" title="Go Top"><i class="icon-arrow-up"></i></a> 
     </div> 
     <div class="left-bar merge-left"> 
      <!-- SEARCH BAR --> 
      <!-- LEFT NAV --> 
      @section leftnav{ 

      <div class="left-nav"> 
      @Html.Action("Menus"); 
    </div> 



      } 
     </div> 
    </div> 
    <div class="container"> 
    </div> 
</div> 

回答

2

你可以循環的菜單項,並通過在MainMenuId這樣的:

@foreach(var menuItem in Model) 
{ 

    <div> 
    @Html.Raw(@Html.ParentMenus(menuItem)) 
    </div> 
    <div> 
    @Html.Raw(@Html.SubMenu(menuItem, menuItem.MainMenuId)) 
    </div> 

} 
+0

您好,我正在爲上述解決方案執行處理程序'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper'的子請求時出錯。 – Nidheesh

+0

當您將原始問題的值3硬編碼時,它是否工作?這可能是查找菜單操作的數據或問題。 – hutchonoid

+0

是的,現在我已經用你的邏輯更新了問題,現在沒有錯誤,但菜單同時顯示所有字段值。 – Nidheesh