2010-04-09 43 views
1

这似乎应该是非常简单,但我显然困惑。MVC Html.ActionLink没有正确传递查询字符串

我有一个列表视图,显示一个分页列表。在底部,我有一组actionlinks的:

<%= 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 })%> 

我使用的是基本的默认路由的设置,除了以“名录”的“指标”取代:

  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,则它是空的。如果我输入第二个URL(带有斜线),它会正确进入(即,“page = 2”的QueryString)。

那么,我该如何获得ActionLink助手才能生成正确的URL,或者让路由正确解析ActionLink正在生成的内容?

谢谢。

回答

2

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

  1. 修改您的路线采取page参数,而不是默认的id,并相应地修改您的操作方法的签名。

  2. 修改到Html.AcitonLink()所以他们命名参数id的电话 - 也就是说,改变new { page = ... }new { id = ... }

+0

托马斯 这确实这样做将它添加到routeValues参数。它现在生成一个链接“http:// localhost:2083/Retrofit/List/1。 但是,那不是我想要的。我想要的是将页码生成为查询字符串:”http :// localhost:2803/Retrofit /?page = “。我需要在URL的路径中给出一个可选的id(用于查看/编辑项目的详细信息),以及作为查询给出的可选页码字符串,我该怎么做? – 2010-04-12 16:28:52

0

这是一个老问题,但对于其他人,我想我会加你正在寻找的答案是都喜欢

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