web-dev-qa-db-ja.com

Webアプリでのマルチステップ編集のワークフロー設計

複数のルートを介して一部のフォームにアクセスできるWebアプリ(ASP MVC2)があります。最初にフォームが完了すると、ユーザーはフォームに入力したページではなく、そのフォームのデフォルトページにキックバックされました。

今、私はこれに対処したいかなりの領域を再設計しています。簡単に追加できるソリューションが必要です。いくつかのアイデアがありますが、どちらを使用すればよいかわかりません。 「見えない」(つまり、私のURLに触れない)。

だから私はどちらかを考えています:

フォームのリファラーページのフィールドを非表示にすることもできます。

あるいは、TempDataを使用して、リファラーURLのチェックと追加を処理する属性を設定することもできます(これには、ユーザーが2つの異なるフォームを開いてリファラーが干渉しないように、さまざまなパスウェイごとに文字列が含まれる可能性があります)。

フォーム値の問題は、モデルに関連しないフィールドを各ビューに配置する必要があり、ワークフローにGETリクエストがあると壊れてしまうことです。また、各ビューとアクションでこのプロパティを手動で処理する必要があります。

TempData + attributeアプローチは、これを適用するための非常に優れた方法ですが、一度に多くのことを実行しているパワーユーザーが同じフォームに対して競合するリファラーを持つ可能性があります。

後者のアプローチに傾倒しているのは、それがオーバーライドされるEdgeケースが多くないので、よりエレガントで追跡しやすいためですが、それが発生した場合のユーザーエクスペリエンスについて心配しています。トレードオフはそれだけの価値がありますか?

4
Chao

これにどのテクノロジーを使用しているのかはっきりしないので、一般的に答えようと思います。

ユーザーは、フォームを複数回(新しいウィンドウまたは複数のタブ)開いて、異なるコンテキストから起動したり、同じコンテキストから複数回起動したりできるようです。これにより、特にページからフォーム変数を削除することに懸念がある場合、セッション変数の使用が問題になります。

代わりに、フォームをテンプレート(.NETのユーザーコントロール)として作成し、それが使用される各コンテキストのページに含めることを検討することをお勧めします。親ページには、コンテキストの値を保持する単一の静的変数を含めることができます。処理時にフォームからの値を取得し、親ページからコンテキストを取得すると、フォームが表示され、成功すると、コンテキストの適切な場所にリダイレクトされます。もちろん、これは、あなたが話しているルートとリダイレクトが1つの変数で追跡できることを前提としています。その変数とフォームの情報は、さまざまな返品場所にも使用できます。

1
Steve