2011-01-14 10 views
2

私はAsp Mvcに検索ボックスを追加しています。Asp MVCを使用してフォームのURLをカスタマイズするにはどうすればよいですか?

これは、フォームのHTMLです:

@using (Html.BeginForm("Query", "Search", FormMethod.Get)) 
{ 
    <input type="text" name="q" /> 
    <input type="submit" value="Seach" /> 
} 

と私はhttp://localhost:####/q=value in textboxのように見えるURLを生成するためのフォームをしたいと思い、このルート

routes.MapRoute("Search", "q={query}", 
    new { controller = "Search", action = "Query" }); 

を追加しました。

MVCがURLを生成する方法を変更することはできますか?

http://localhost:50916/Search/Query?q=value in textbox 

答えて

1

RFC 3986による=サインがパラメータとパラメータ値を区切るために使用される予約文字ですし、URIのこの部分でそれを使用しないでください:これは私が何を得る現在あります。あなたに最も近いのはhttp://localhost:####/?q=valueです。

実際、このようなルートを着信URLとして使用すると、ASP.NET MVCが正しく解析して正しいコントローラアクションに送出されます。問題は、<form>タグです。 GETとPOSTという2つの動詞があります。 POSTを使用すると、フォームに入力されたパラメータは要求本体で送信され、URLには表示されません。仕様に従ってGETを使用すると、ユーザーエージェントは、?を追加した後にフォームのアクションに入力フィールドのキー/値のペアを追加して要求を送信します。

フォームのonsubmitイベントを処理するjavascriptを使用しないと、デフォルトの送信をキャンセルしてwindow.locationを希望の形式に変更しないと、目的の効果が得られません。問題は、本当にそれを遠くにする必要がありますか?

+0

良い点。私は異なった形でURLをフォーマットします。 – wusher

1

ターゲットURLをより詳細に制御する必要がある場合は、HTMLヘルパーの代わりに標準HTMLフォームタグを使用できます。

関連する問題