0

ASP.NETMVCアプリケーションにマルチステップのデータ入力フォームがあります。

情報が投稿されると、入力値がチェックされ、関連データが必要であると判断した場合(たとえば、発注書が存在しないサプライヤーを参照している場合)、ユーザーが追加データを入力できるように別のアクションにリダイレクトします。

ユーザーがすでに入力した値がページ間で失われることを望まないので、viewModelを使用してこれらを2番目のアクションメソッドに渡します。データは2ページ目の非表示の入力に含まれているため、ユーザーには表示されません。

これは、次のようなURLになってしまうことを除いて、正常に機能します。

myDomain / RFQ / CreatePart?PartNumber = Skateboard&Supplier = Bobs%20skateboards&DateCreated = 08%2F28%2F2012%2000%3A00%3A00&DateRequired = 08%2F28%2F2012%2000%3A00%3A00&Quantities = 1%2C%203%20%26%205% 20%オフ

リダイレクトするのではなく、単にビューを返すことを試みました。これにより、次のようなURLが得られます。

myDomain / RFQ / CreatePart

ただし、これにより、投稿、リダイレクト、取得パターンをフォローしなくなったため、ユーザーがブラウザを更新して値を再投稿できるという問題が発生します。

よりクリーンなURLを維持しながら、 Post-Redirect-Getパターンを適切に使用する方法はありますか?


2012年9月29日更新

以下のオプションを調査しSessionState、当面は使用することにしました。これにより、ユーザーがトランザクションを完了するまで中間データを保存できると同時に、クリーンURLでpost-redirect-getパターンを使用できるようになります。

SessionState私はこの質問をする前に実際に気づいていましたが、残念ながら私が読んだ情報のいくつかはこれが最善の解決策ではないと信じさせました(ほとんどの記事はパフォーマンスの低下を引用していますが、これの証拠を提供したり理由を説明したりすることはめったにありません)。

この記事を読んだことで、私は今、はるかによく理解SessionStateしています。

4

1 に答える 1

2

オプションは次のとおりです(順序は良いか悪いかを意味するものではありません)

  1. に値を追加するTempDataと、そのユーザーが次のリクエストで読み取るまで値が使用可能になり、その後自動的にクリアされます。
  2. 中間ステップをデータベースに保存します。
  3. 中間ステップをCache(データがユーザー間で共有されている場合)に保存します。
  4. 中間ステップをSessionState(データがユーザーごとの場合)に保存します。
  5. この場合、それが醜い中間URLであるかどうかは誰が気にしますか?
于 2012-09-03T16:12:27.683 に答える