2015-10-13 54 views
1

的問題,用戶可以選擇六個環節之一,像這樣 enter image description hereASP.NET核心頁面佈局多個工具欄菜單

後,他選擇特定的鏈接,例如鏈接1,他應該被重定向到主頁與工具欄菜單看起來像這樣:

enter image description here

如果他選擇例如鏈接2他的菜單應該是這樣的:

enter image description here

無論如何,我不知道如何實現這一點,因爲我的菜單位於_Layout.cshtml裏面,View Component功能可以幫助我解決這個問題嗎?

回答

1

我使用viewComponent功能自己找到解決方案。

首先我不得不重新配置內部Startup.cs我的缺省路由的,看起來像這樣:

app.UseMvc(routes => 
{ 
    routes.MapRoute(
     name: "defaultLink", 
     template: "{link='Link1'}/{controller=Home}/{action=Index}/{id?}"); 
}); 

裏面的佈局我調用viewComponent這樣後:

// invoke viewComponent in layout and pass url parameter to it  
@Component.Invoke("SidebarMenu", ViewContext.RouteData.Values["link"]) 

和我viewComponent方法看起來像:

public IViewComponentResult Invoke(string link) 
{ 
    switch (link) 
    { 
     case "Link1": 
      return View("_Link1Menu"); 
     case "Link2": 
      return View("_Link2Menu");    
     default: 
      return View("_Link1Menu"); 
    } 
} 

_Link1Menu視圖看起來像這樣:

<li> 
    <ul class="sub-menu"> 
     <li> 
      <a href="/Link1/Home/SomeMethod"> 
       Test1MenuLink1 
      </a> 
     </li> 
     <li> 
      <a href="/Link1/Home/SomeOtherMethod"> 
       Test1MenuLink2 
      </a> 
     </li> 
    </ul> 
</li> 

和_Link2Menu觀點是這樣的:

<li> 
    <ul class="sub-menu"> 
     <li> 
      <a href="/Link1/Home/SomeMethod"> 
       Test2MenuLink1 
      </a> 
     </li> 
     <li> 
      <a href="/Link1/Home/SomeOtherMethod"> 
       Test2MenuLink2 
      </a> 
     </li> 
    </ul> 
</li> 

在此之後,當u命中URL /鏈接1 /首頁/索引 - 從日子會把你觀點_Link1Menu拿到菜單,並且當u命中URL/Link2/Home/Index - 您將從_Link2Menu視圖獲取菜單...