2010-05-29 250 views
0

我已經定義如下的路徑:ASP.NET MVC URL路由問題

context.MapRoute("SearchEngineWebSearch", "search/web/{query}/{index}/{size}", 
          new 
          { 
           controller = "search", 
           action = "web", 
           query = "", 
           index = 0, 
           size = 5 
          }); 

和動作的方法來處理請求匹配與該:

public System.Web.Mvc.ActionResult Web(string query = "", int index = 0, int size = 5) 
    { 
     if (string.IsNullOrEmpty(query)) 
      return RedirectToRoute("SearchEngineBasicSearch"); 
     var search = new Search(); 
     var results = search.PerformSearch(query, index, size); 
     ViewData["Query"] = query; 
     if (results != null && results.Count() > 0) 
     { 
      ViewData["Results"]= results; 
      return View("Web"); 
     } 
     else return View("Not-Found"); 
    } 

並形成到已發送的參數,以操作方法:

<% using (Html.BeginForm("Web", "Search", FormMethod.Post)) 
     { %> 
    <input name="query" type="text" value="<%: ViewData["Query"]%>" class="search-field" /> 
    <input type="submit" value="Search" class="search-button" /> 
    <input type="hidden" name="index" value="2" /> 
    <input type="hidden" name="size" value="2" /> 
    <%} %> 

現在點擊提交併將值發送到action方法後,所有路由值都會更新,但url值仍然是等於到第一次發送參數。例如,如果我發送第一次請求,如http://localhost/search/web/google和下次http://localhost/search/web/yahoo,傳遞給操作方法的查詢參數是雅虎但回發後的URL仍然是http://localhost/search/web/google

任何人都可以幫我嗎? ;)

回答

1

試着這麼做

return RedirectToAction("Web", 
    new { query = query, index = index, size = size}); 

,而不是return View("Web");

此外,請注意,您應該執行GET而不是POST。如果使用默認值提交索引和大小參數,則可以省略它們。

+0

對不起,因爲這會導致無限重定向!也如果我改變形式方法從發佈獲取,然後它生成url參數作爲querystring傳遞,我不會那麼;) – Sadegh 2010-05-29 18:33:05