在视图中访问操作信息

时间:2013-03-08 16:02:33

标签: c# .net asp.net-mvc razor

我正在使用

在我的主_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的页面#?

1 个答案:

答案 0 :(得分: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.RouteData来获取父视图上下文,因为您在子操作中(使用了Html.RenderAction帮助程序)。 / p>