ASP.NET MVC URL路由问题

时间:2010-05-29 18:05:07

标签: asp.net-mvc-2 maproute actionmethod

我已经定义了如下路线:

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" />
    <%} %>

现在点击提交并将值发送到操作方法后,所有路径值都更新了,但url值仍然等于第一次发送参数。例如,如果我第一次发送请求,例如http://localhost/search/web/google和下次http://localhost/search/web/yahoo,则传递给action方法的查询参数是yahoo,但回发后的url仍为http://localhost/search/web/google

可以有人帮助我吗? ;)

1 个答案:

答案 0 :(得分:1)

尝试类似

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

而不是return View("Web");

另外,请注意您应该执行GET而不是POST。如果使用默认值提交索引和大小参数,则可以省略它们。