0

メインの_Layoutでメニューを動的に構築しています

 @{Html.RenderAction("PageMenu", "Service");}

各ページにメニュー項目を追加します

@model int

<ul id="pages">
    @for (var i = 1; i <= Model; i++) {
        <li>@Html.ActionLink("Page " + i,"Page", "Service", new { page = @i}, null)/li>
    }
</ul>

私が知る必要があるのは、メニューでそれを示すことができるように、私が実際にどのページにいるのかということです。最後にクリックしたActionLinkのページ番号にアクセスできる方法はありますか?

4

1 に答える 1

2

RouteData:から現在のページ番号を取得できます。

@model int

@functions {
    IDictionary<string, object> GetHtmlAttributes(int i) {
        var routeData = ViewContext.ParentActionViewContext.RouteData;
        int currentPage = 0;
        string page = routeData.Values["page"] as string;
        var htmlAttributes = new RouteValueDictionary();
        if (int.TryParse(page, out currentPage) && currentPage == i)
        {
            htmlAttributes["class"] = "active";
        }
        return htmlAttributes;
    }
}

<ul id="pages">
    @for (var i = 1; i <= Model; i++) 
    {
        <li>
            @Html.ActionLink(
                "Page " + i,
                "Page", 
                "Service", 
                new RouteValueDictionary(new { page = i }), 
                GetHtmlAttributes(i)
            )
        </li>
    }
</ul>

子アクション内にいるため(ヘルパーを使用したため)、親ビューコンテキストを取得するためではViewContext.ParentActionViewContext.RouteDataなく、プロパティをどのように使用しているかに注意してください。ViewContext.RouteDataHtml.RenderAction

于 2013-03-08T16:03:25.440 に答える