0

私は以下のようにルートを定義しました:

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を送信した場合、アクション メソッドに渡されるクエリ パラメータは yahoo ですが、その後の URL はポストバックは まだhttp://localhost/search/web/googleです!

誰でも私を助けてくれますか?;)

4

1 に答える 1

1

次のようなものを試してください

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

の代わりにreturn View("Web");

また、POST ではなく GET を実行する必要があることに注意してください。また、index および size パラメータは、デフォルト値で送信された場合、省略される場合があります。

于 2010-05-29T18:14:18.917 に答える