2015-03-02 68 views
0

根據用戶所在的頁面(我正在使用C#MVC 4),呈現某些導航超鏈接的最佳方法是什麼。MVC導航設計

我有一個_layout.cshtml,看起來像下面(縮短顯示目的)。

<body> 
    @{Html.RenderAction("MainNav", "Navigation");} 
    <div id="container"> 
     @RenderBody(); 
    </div> 
</body> 

如果用戶導航到/ Home/Index,那麼我想讓MainNav呈現主頁的超鏈接。管理

然後,如果用戶單擊Management將更改爲Home |公司|團隊|如果他們點擊其中一個鏈接,角色將會再次更改。

+0

如果鏈接變化很大,取決於您打開哪個頁面,然後渲染頁面中的相關鏈接,而不是佈局(否則,您需要將參數傳遞給'MainNav()'方法幷包含多個'如果'我懷疑將更加難以維護的陳述) – 2015-03-02 23:50:14

+0

我想過,但我不能夠獲得鏈接,以呈現我想要他們在頁面上的位置,因爲他們將卡在視圖中,但我需要他們在網站的導航區域內 – 2015-03-03 00:09:47

+0

這是部分的用途。在你的佈局中@RenderSection(「nav」,required:false)'並在視圖中@section nav {//你的鏈接}' – 2015-03-03 00:16:15

回答

1

使用Html.RenderAction()Html.Action()將涉及傳遞參數識別當前視圖和使用多個if/else塊來定義部分應呈現的內容。相反,您可以使用Razor部分充當佈局中任何位置的特定內容的佔位符。

在佈局,添加@RenderSection(),在這種情況下,一個名爲「菜單」充當您的菜單的佔位符鏈接

<div id="sidebar"> 
    @RenderSection("menu", required: false) 
</div> 
<div id="container"> 
    @RenderBody(); 
</div> 
在每個視圖

然後,添加含有@section menu { ... }鏈接可顯示

Index.cshtml

// content to be displayed 

@section menu { 
    @Html.ActionLink("Home", .....) 
    @Html.ActionLink("Management", .....) 
} 

Management.cshtml

// content to be displayed 

@section menu { 
    @Html.ActionLink("Home", .....) 
    @Html.ActionLink("Company", .....) 
    @Html.ActionLink("Teams", .....) 
    @Html.ActionLink("Roles", .....) 
} 
0

你越想這件事,你描述的問題越複雜。所以我傾向於使用圖書館。儘管它可能在這一點上似乎矯枉過正,但在我的經驗,以後不負有心人:

<body> 
    @Html.MvcSiteMap().Menu() 
    <div id="container"> 
     @RenderBody(); 
    </div> 
</body> 

這是所有你需要做的使用https://github.com/maartenba/MvcSiteMapProvider

Install-Package MvcSiteMapProvider 

時就註釋這樣你的行動:

[MvcSiteMapNode(Title = "Menu Title")] 
+0

我喜歡這樣的外觀,你知道如果你可以如何添加參數嗎?例如我有兩種不同類型的團隊,通常我會做以下... @ Html.ActionLink(「Team」,「Account」,new {teamType =「Team」})和@ Html.ActionLink(「Team」,「賬號「,new {teamType =」Project「)}我也會讀一讀它,但想知道你是否知道? – 2015-03-03 00:08:30

+0

我不知道從我的頭頂。除此之外還有一個DynamicNodeProvider:https:// github。com/maartenba/MvcSiteMapProvider/wiki/Defining-Sitemap-Nodes-using-IDynamicNodeProvider – Sam7 2015-03-03 00:39:34

+0

也許這有助於:https://github.com/maartenba/MvcSiteMapProvider/wiki/Multiple-Navigation-Paths-to-a-Single-Page – Sam7 2015-03-03 00:41:39