3

私はURLを持っています:

出荷/検索/{searchType}/{searchValue}

およびコントローラー アクション:

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

つまり、次のようなきれいな URL を入力できます。

出荷/検索/部品番号/Widget-01

そして、その部品番号を持つすべての出荷のリストを取得します。

今、私はアプリケーションの忙しい作業を行っており、部品番号を尋ねる検索フォームを作成しているところまで来ました。これは検索に投稿されます。だから基本的に私は欲しい:

Shipment/Search/PartNumber/{user-input-from-textbox}

残念ながら、上記の URL にフォームを取得できません。サーバー側で生成する必要があります。代わりに、ポスト リクエストの値として {user-input} を使用して、Shipment/Search/PartNumber にフォーム ポストを戻します。

だから私は次のようになります:

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

2つのこと:

1) クライアント側で JavaScript を使用せずに検索の post メソッドを回避する方法はありますか?

2) ブール?ポストの値はそこにあるため、署名が異なります。それは明らかに醜いです。これを行うよりスマートな方法はありますか?

ありがとう!

編集:

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

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

4

1 に答える 1

6

私は同じ状況ですが、JavaScriptがなくても問題なく動作します。[post] SearchでFormCollectionsを受け取り、次のようなアクションにリダイレクトします。

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

Post-Redirect-Getパターンに関するビデオを見たので、これは良い解決策だと思います。これは、asp.netmvcアプリケーションでの優れた実践です。

于 2009-04-27T15:35:05.937 に答える