2010-05-29 215 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