ユーザーが複数のページにまたがる複数ステップのフォームに入力する Web アプリケーションに取り組んでいます。フォームの上部にはタブ ナビゲーションがあり (これらのリンクは現在のページを送信しません)、下部に [次へ] ボタンがあります (送信します)。フォームの送信/検証を処理するためのいくつかの戦略を検討しています。
フォーム ページごとに 1 つのアクション メソッドとビュー。次へを押すと、次のページのアクション メソッドにフォームを送信します。検証エラーがある場合は、前のページにリダイレクトされます。
- URL は説明的であり、コピーして貼り付けることができます
- エラーの場合のみリダイレクト
- リダイレクトにはフォームデータがないため、送信に関するコンテキストが失われ、特定のエラーメッセージを表示するのが難しくなります
- ユーザーがまだ準備ができていないフローのステップにアクセスしようとした場合、ユーザーをリダイレクトするために同じ検証ロジックが機能します。
フォーム ページごとに 1 つのアクション メソッドとビュー。次にヒットすると、フォームが現在のページ アクションに送信されます。検証エラーがある場合、同じビューが返されます。それ以外の場合は、次のページ アクションにリダイレクトします。
- URL は説明的であり、コピーして貼り付けることができます
- リダイレクトは非常に一般的です (これが悪いかどうかはわかりません)
- 検証エラーを表示するときは、フォーム送信と同じリクエストにいるため、無効な入力に完全にアクセスできます
- たとえば、送信も行う「前へ」ボタンを追加する機能が必要な場合は、追加のコンテキストを渡す必要があります
すべてのページに対して 1 つのアクション メソッド。URL には、送信されるステップに関する追加のコンテキストが含まれています (例:
MyController/MyAction/{step}
)。コントローラ メッセージは、検証と現在のステップに応じて、返すビュー ページを選択します。- URL は説明的ではありません (たとえば、ステップ 1 を送信してステップ 2 に進むと、ページ 1 (無効) またはページ 2 が返されるかどうかに関係なく、ユーザーに表示される URL は同じになります)
- リダイレクトなし
- 検証エラーを表示するときは、フォーム送信と同じリクエストにいるため、無効な入力に完全にアクセスできます
ここにリストしていない別の方法
各方法の長所と短所のいくつかを列挙しようとしましたが、知りたいと思います。
- これらの方法の他の長所と短所は何ですか? 私のは正しいですか?私がリストした短所のいくつかは、設計されている可能性がありますか?
- 私が使用すべきこの問題への標準的なアプローチはありますか? もしそうなら、なぜそれが標準的なアプローチなのですか?