ここに問題があります。ユーザーは次のような 6 つのリンクから 1 つを選択できます。
たとえばリンク 1 などの特定のリンクを選択すると、次のようなサイドバー メニューのあるホームページにリダイレクトされます。
たとえばリンク 2 を選択すると、メニューは次のようになります。
とにかく、私のメニューは_Layout.cshtml内にあるので、これを達成する方法がわかりません.ビューコンポーネント機能はこの問題を解決できますか??
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>
この後、URL /Link1/Home/Index をヒットすると、_Link1Menu ビューからメニューが取得され、URL /Link2/Home/Index をヒットすると、_Link2Menu ビューからメニューが取得されます...