这似乎应该很直接,但我显然很困惑。
我有一个列表视图,显示分页列表。在底部我有一组动作链接:
<%= Html.ActionLink("First Page", "List", new { page = 1} ) %>
<%= Html.ActionLink("Prev Page", "List", new { page = Model.PageNumber - 1 }) %>
<%= Html.ActionLink("Next Page", "List", new { page = Model.PageNumber + 1 }) %>
<%= Html.ActionLink("Last Page", "List", new { page = Model.LastPage } )%>
我正在使用基本的默认路由设置,除了“List”替换为“Index”:
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "List", id = UrlParameter.Optional } // Parameter defaults
);
问题是ActionLink助手正在生成以下形式的链接:
http://localhost:2083/Retrofit?page=2
而不是
http://localhost:2083/Retrofit/?page=2
(控制器名称后面的尾部斜杠和查询字符串之前的斜杠)。当第一个URL被路由时,它完全丢失了查询字符串 - 如果我在到达控制器时查看Request.QueryString,它就是null。如果我输入第二个URL(带有斜杠),它会正确进入(即,“page = 2”的QueryString)。
那么我怎样才能获得ActionLink助手来生成正确的URL,或者让路由正确解析ActionLink正在生成的内容?
感谢。
答案 0 :(得分:2)
您需要选择以下两种操作之一:
修改路线以采用page
参数而非默认id
,并相应地修改操作方法的签名。
修改对Html.AcitonLink()
的调用,以便将参数命名为id
- 也就是说,将new { page = ... }
更改为new { id = ... }
。
答案 1 :(得分:0)
这是一个老问题,但对于其他人,我认为我会添加你正在寻找的答案是添加到routeValues参数,如
Html.ActionLink("Last Page", "List", new { id = Model.ID, page = Model.LastPage } )