MVC Html.ActionLink没有正确传递查询字符串

时间:2010-04-09 21:14:27

标签: model-view-controller routing query-string

这似乎应该很直接,但我显然很困惑。

我有一个列表视图,显示分页列表。在底部我有一组动作链接:

<%= Html.ActionLink("First Page", "List", new { page = 1} ) %>
&nbsp; 
<%= Html.ActionLink("Prev Page", "List", new { page = Model.PageNumber - 1 }) %>
&nbsp;
<%= Html.ActionLink("Next Page", "List", new { page = Model.PageNumber + 1 }) %>
&nbsp;
<%= 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正在生成的内容?

感谢。

2 个答案:

答案 0 :(得分:2)

您需要选择以下两种操作之一:

  1. 修改路线以采用page参数而非默认id,并相应地修改操作方法的签名。

  2. 修改对Html.AcitonLink()的调用,以便将参数命名为id - 也就是说,将new { page = ... }更改为new { id = ... }

答案 1 :(得分:0)

这是一个老问题,但对于其他人,我认为我会添加你正在寻找的答案是添加到routeValues参数,如

 Html.ActionLink("Last Page", "List", new { id = Model.ID, page = Model.LastPage } )
相关问题