2009-04-27 13 views
3

私はURL持っているのフォーム入力:ASP.NET MVC:プリティURL

出荷/検索/ {て、searchTypeを}/{searchValue}

とコントローラのアクション:だから

// ShipmentSearchType is an enum ... PartNumber, CustomerOrder, etc... 
ActionResult Search(ShipmentSearchType searchType, string searchValue) 

出荷/検索/製品型番/ウィジェット-01

とGe:これは、私はかなりのようなURLで入力することができることを意味しますその部品番号のすべての出荷のリスト。

私はアプリケーションの忙しい仕事をしており、パートナンバーを尋ねる検索フォームを作成しており、それが検索にポストバックします。だから、基本的に私がしたい:

出荷/検索/製品型番/ {ユーザ入力-の-テキストボックス}

残念ながら、私は、フォームが上記のURLを取得することはできません - それは、サーバー側を生成する必要があります。だから代わりに、私はpost/request/postNumberに{post-request}値として{user-input}のフォームを返すでしょう。

[AcceptVerbs(HttpVerbs.Post)] 
ActionResult Search(ShipmentSearchType searchType, string searchValue, bool? post) 
{ 
    return RedirectToAction("Search", new { searchType = searchType, searchValue = searchValue}); 
} 

2物事:

は、だから私はで終わる

1)私は、クライアント側のJavaScriptを使用せずに、検索のPOSTメソッドを持つ周りを取得することができます方法はありますか?

2)bool?ポスト値はちょうどそこにあるので、彼らは異なった署名を持っています。それは明らかに醜いです。これを行うよりスマートな方法はありますか?

ありがとうございます!

編集:

「残念ながら、私は(少なくとも、javascriptをせずに)フォームからのことを行うことができるとは思いません。」 & "javascriptを使わずに投稿してもらう方法はありますか?"

これは少し曖昧でした。私が意味することは、私はフォームがフォーム/ url/Ship/Search/PartNumber/{value-from-textbox}を生成し、それをフォームメソッドgetに持たせることができないと思います。私はこれがjavascript(URLを動的に構築するためにサブミットアクションをオーバーライド)で行うのは簡単だと思いますが、私はそれをやっていません。私は、javascriptが投稿を行うのに必要であるということを意味しませんでした。

+0

私はあなたがjavascriptなしでそれをすることができない理由が表示されません。あなたはなぜあなたができないと思うか説明できますか? –

答えて

6

私は同じような状況を持っているが、それはjavascriptをせずに正常に動作し、私はちょうど[ポスト]でFormCollectionsを受け取る検索し、このようなアクションにリダイレクト:

[AcceptVerbs(HttpVerbs.Post)] 
ActionResult Search(FormCollection form) 
{ return RedirectToAction("Search", new { searchType = form["searchType"], searchValue = form["searchValue"]}); } 

私が見たので、私はそれが良い解決策だと思いますポストリダイレクトのビデオ - asp.net mvcアプリケーションの良い実践パターン。

+0

ビデオにU​​RLがありますか? –

+0

ここで見つけることのできるパターンの説明http://en.wikipedia.org/wiki/Post/Redirect/Getビデオはhttp://videos.visitmix.com/MIX09/T44Fパターンに関するものではありませんが、Phil Haack氏はそれについて語りましたここに。 –

+0

私はそれが解決策ではないと思います。あなたがしているのは、フォームコレクションを使用するようにメソッドシグネチャを難読化していますが、まったく同じことを行うことです: ActionResult Search(ShipmentSearchType検索タイプ、文字列検索値) これは同じシグネチャを持つことができないGetメソッドとPostメソッドのために。 私の質問(混乱してしまった!)は、人工的に区別することなく、同じシグネチャでGetとPostを持つ方法がある場合でした。私はそれを働かせることができます(それはあります)私はそれが匂いを感じるだけです。 – anonymous