1

ここに問題があります。ユーザーは次のような 6 つのリンクから 1 つを選択できます。 ここに画像の説明を入力

たとえばリンク 1 などの特定のリンクを選択すると、次のようなサイドバー メニューのあるホームページにリダイレクトされます。

ここに画像の説明を入力

たとえばリンク 2 を選択すると、メニューは次のようになります。

ここに画像の説明を入力

とにかく、私のメニューは_Layout.cshtml内にあるので、これを達成する方法がわかりません.ビューコンポーネント機能はこの問題を解決できますか??

4

1 に答える 1

2

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 ビューからメニューが取得されます...

于 2015-11-09T11:59:04.270 に答える