2010-11-29 7 views
3

asp.net mvc 2を使用して複数ステップフォームを作成する予定です。したがって、Webアプリケーションには5ページが5ステップに相当します。各ステップには、前と次の2つの送信ボタンがあります。各ステップの入力データは、後で見直すために保存されます。たとえば、ステップ1,2,3,4のデータをすでに入力しており、ステップ5に入っています。 「前」を2回クリックすると、前に入力したデータでステップ3が表示されます。同様に、私が「次へ」をクリックすると、入力されたデータもステップ4で保持されます(今度はステップ3にあるので)。各ステップで使用されるモデルは非常に異なる場合があります。MVCを使用した複数ステップウィザードフォーム

私は各ステップのデータを保存するソリューションを探しています。私はセッションとTempDataを考えている、それらの両方は、私が使用することを考慮しなければならない欠点を持っている

  1. セッション

    • デフォルトのセッションはクッキーのセッションなので、Webブラウザあればセッションはうまく動作しません。 Cookieが有効になっていません。私もここで懸念している、IEはクッキーanabledを持っていない場合、セッション変数は、俳優がホスト名を使用してWebアプリケーションにアクセスするケースでのみ失われます。 セッションはIPアドレスのURLがのIEで正常に動作します。
    • クッキーレスセッション:安全ではない、多くの制約があり、ポストの問題(http://stackoverflow.com/questions/3972433/mvc2-cookieless-session-issue-using-postまたはhttp://forums.asp.net/p/1517391/3634908.aspx)を持っている
  2. Tempdata:tempdataは1つの要求に対してただ存続します。

本当にありがとうございます。

ありがとうございました!

答えて

2

私は常にセッションを使用しています。私はあなたにクッキーを使用していない人の心配を見てきましたが、私は多くのユーザーがクッキーを拒否しているとは思わないので、最近は問題ではないと思います。

私のセッション設定は、保存と検索が簡単でセットアップが簡単です。 (さらに多くのサーバーに)スケールアウトすると、アプリケーションを簡単にセットアップして、SQL Serverデータベースにセッション状態を格納することができます。

非表示フィールドは、ユーザーが非表示フィールドの値を編集できるため、ステップ間に機密情報が格納されていない場合に使用されることがあります。

投稿間で共有する情報がたくさんあり、多くの非表示フィールドを必要としない場合は、ストレージにオブジェクトを作成することもできます(セッション中に作成する場合など)オブジェクトを直列化し、base64でエンコードし、それを1つの隠しフィールドに格納します。

+0

ミシェルに感謝、私もセッションを好む。しかし、別のスレッドに大きな懸念があります。http://stackoverflow.com/questions/4303579/session-lost-when-using-hostname-instead-of-ip-address-ie MVCがIISにデプロイされ、ユーザーがIEを使用してIPアドレスの代わりにホスト名でアプリケーションにアクセスすると、セッション変数はnullになります。私はなぜIEがIPアドレスurl(このケースではCookieを有効にする必要はない)でうまく動作するのか不思議であり、firefoxもすべての場合にうまく機能します。あなたは私と同じ問題に遭遇しますか?情報を共有していただきありがとうございます – khoailang

+0

あなたの投稿を読んでいます。それは私が自分自身を経験したことのない何かです、あなたはそれを経験しませんでしたか? – Michel

1

データをデータベースに保存することに反対していますか?そうすれば、彼らが "Prev"に行くときに、そのページのデータをデータベースから取り出すだけです。そのページを「一時」として保存することもできますし、ユーザーがまだ正式に保存していないことを示すステータスにすることもできます。それでは、セッションやそのようなことについて心配する必要はありません。

+0

Nickさん、ありがとうございます。データベースに一時データを保存するつもりはありません。 – khoailang

0

TempDataは、バックグラウンドでセッション変数を使用して実装されているため、セッションに関する懸念事項はTempDataの使用にまで及んでいます。

ウィザードが非常に長くて複雑な場合は、おそらくDBに残るでしょう。そうでない場合は、すべてのデータをすべての手順でフォームフィールドに格納し、すべてのデータを手順。

+0

あなたの回答に感謝します。JonoW – khoailang

0

私はJonoWに同意、私は(私のために働いています)手順の間でデータを格納するための隠しフィールドを入れて検討する

+0

Fanciscoさん、ありがとうございます。たとえば、私はすべてのステップに大きなモデルを持っています。ステップ1では、ユーザーは1つのフィールドだけを入力すればよい。だから、私は1つのTextboxFox(...)と残りの1つはHiddenFor(...)、正しいだろうか?私は本当にMVC2の入力検証機能を利用したいので、部分的な検証属性を作成するのが好きですか? (http://blog.stevensanderson.com/2010/02/19/partial-validation-in-aspnet-mvc-2/)上記のすべての – khoailang

+0

は、MVC2でセッションが重要な意味を持っていますか!?!?!? – khoailang

関連する問題