2011-03-31 102 views
1

我正在寫新的asp.net mvc應用程序,我對創建多級導航系統有疑問。asp.net mvc3和多級導航

例如我有主導航網頁(CPU --- ---- GPU拉姆)

和子導航與(英特爾,AMD --- ATI,NVIDIA --- DDR2,DD3)

好了,我的第一個實現是在這裏:

public class NavigationItem 
{ 
    public virtual int Id { get; set; } 
    public virtual string Title { get; set; } 
    public virtual string Controller { get; set; } 
    public virtual string Action { get; set; } 
    public virtual string Url { get; set; } 
    public virtual string Section { get; set; } 
} 


public class NavigationController : Controller 
{ 
    private readonly IUnitOfWork _unitOfWork; 

    public NavigationController(IUnitOfWork unitOfWork) 
    { 
     _unitOfWork = unitOfWork; 
    } 

    public ActionResult MainMenu() 
    { 
     return View(_unitOfWork.NavigationItems.Where(x => x.Section == null).ToList()); 
    } 

    public ActionResult SectionMenu() 
    { 


     return View(_unitOfWork.NavigationItems.Where(x => x.Section == "// name of section").ToLis()); 
    } 
} 

最後我的頁面佈局是:

<!DOCTYPE html> 
<html> 
<head> 
    <title>@ViewBag.Title</title> 
</head> 
<body> 
<div class="main-menu"> 
    @{Html.RenderAction("MainMenu", "Navigation");} 
</div> 

<div class="section-menu"> 
    @{Html.RenderAction("SectionMenu", "Navigation");} 
</div> 

    @RenderBody() 
</body> 
</html> 

有了這個實現我有問題如何我在SectionMenu與MainMenu處理是活動的,因爲我想生成SectionMenu取決於MainMenu並突出顯示它們。

女巫的一種解決方法,我認爲是SectionMenu中處理URL(控制器)。 例如:

if (RouteData.Values["controller"].ToString() == "Administration") 
    { 
     // Generate section menu for Administration main menu 
    } 

我不喜歡這個解決方案,因爲我用「神奇字符串」值工作,我還沒有每MainMenu的只有一個控制器。

如何實施此解決方案?

感謝意見

+0

有關你如何完成這一任何更新?我只是寫了幾乎完全相同的代碼,試圖做同樣的事情... – Micah 2011-06-11 17:50:10

回答

0

好的,我使用ViewBag功能。不乾淨,但作品

0

我想你必須更深入地MVC的路由系統。它在開始時並不直觀,但這可能是整個MVC中最重要的部分。有時,雖然你可以很容易地感到困惑,特別是如果你在Global.asax中定義了很多路由。有一個名爲Route debugger的項目,它有幫助。我不記得鏈接。嘗試谷歌它...如果你找不到它,我會稍後發送鏈接...

+0

感謝您的意見。是的路由調試器是偉大的東西鏈接在這裏:http://haacked.com/archive/2008/03/13/url-routing-debugger.aspx。 Btw是的,你是對的,我有很多路由在Global.asax中定義:/ – Mennion 2011-03-31 21:03:08