0

私は ASP.NET を使用しており、ビューに次のコードがあります。

<% using(Html.BeginForm("Search", "Home", FormMethod.Get)) { %>

<%= Html.TextBox("searchText") %>
<input type="submit" value="Search" />

<% } %>

そして私のコントローラーには次のものがあります:

    public ActionResult Search(string searchText)
    {
       return View("Index");
    }

Search-action にブレークポイントがあり、searchText 引数を調べると、texbox にテキストを入力しても常に "" になります。formmethod を POST に変更すると、期待どおりに動作します。

http-GET を使用しているときに「searchText」を読み取るにはどうすればよいですか?

編集:

私は次のルートを持っていました

       routes.MapRoute(
            "Search",                                              // Route name
            "Search/{searchText}",                           // URL with parameters
            new { controller = "Home", action = "Search", searchText ="" }  // Parameter defaults
        );

searchText(searchValue="") のデフォルト値を削除すると、アクションで正しい値が得られました。なんで?

4

1 に答える 1

2

Firebug または Fiddler を使用して、実際の URI を確認します。ルートには「searchText」部分があり、「searchText」クエリ文字列パラメーターもあるに違いありません。

HTML フォームは MVC ルーティングを認識しないため、searchText を URI のパス部分に含めるには、JavaScript を使用してフォームの URI を書き換える必要があります。一方、HTML フォームはクエリ文字列パラメーターを「すぐに」実行し、MVC はそれらをルートに含めずにアクション引数にバインドします。

最も簡単な解決策は、ルートから searchText を完全に削除し、クエリ文字列パラメーターのみを使用することです。これを機能させるには、ルートを変更する以外に何もする必要はありません。

于 2009-12-09T15:25:32.787 に答える