2010-04-09 40 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 }) 
相關問題