web-dev-qa-db-ja.com

ASP.Net MVCでウィザードを作成する方法

私たちのサイトには、さまざまなデータが複数のページにわたって収集される複数の「ウィザード」があり、最後のステップまでデータベースにコミットできません。

ASP.Net MVCでこのようなウィザードを作成するための最良/正しい方法は何ですか

編集:私の上司は今「javascriptなし」と言っています-その制限を回避する方法についての考え?

47
Joe

私は最善/正しい方法があるとは思いませんが、それを行う方法は...

各ウィザードは独自のページを取得します。各ステップは独自のdivを取得します。すべてのステップは同じ形式です。

前/次のボタンは基本的に、プロセスの各ステップでdivを非表示/表示します。最後のステップの送信ボタンは、フォーム全体を送信します。 jQueryを使用してこれを実装するのは非常に簡単です。また、ウィザードのすべてのステップが単一のViewPageにあるため、メンテナンスが簡単です。

コントローラー側では、2つのコントローラーメソッドがあります。表示用にフォームを準備するHttpVerbs.Getバージョンと、FormsResultを取得して解析し、ユーザーの回答を送信するために必要な情報を取得するHttpVerbs.Postバージョンです。ストレージ/その他のプロセスに。


うわー、あなたの上司は悪臭を放ちます。

この答えは、javascriptが無効になっている******(そうです、どちらも)の人にはほぼ正常に機能します。それを微調整して、CSSを介して1つ前のボタンを非表示にし、JavaScriptコードで表示することができます。このように、JavaScriptを使用しているユーザーはウィザードを表示し、JavaScriptを使用していないユーザーはフォーム全体([次へ]/[前へ]ボタンなし)を表示します。

もう1つのオプションは、ウィザードの各ステップのビューを作成することです。フォームの中間結果をセッションに保存できます。この方法では、実装に多くの時間と労力がかかります。つまり、昼食時に費やす約20分の労力で、JavaScriptルートの実装がいかに簡単であるかを実証するときに、上司から時間外を絞ることができるでしょう。

45
Will

JavaScriptを使用できない場合は、コントローラーのメソッドを使用して各ステップをビューにし、データベースに送信する準備ができるまでデータをセッションに保持します。

ActionLink HtmlHelperメソッドを使用して、[次へ]ボタンと[前へ]ボタンを作成できます。

20
Matthew

別の方法は、ウィザードで作成している不完全なオブジェクトをデータベースに保存し、主キーをウィザードの次のステップに渡すだけです。これは、データベースフィールドの一部をnullにできるようにする必要があることを知っていますが、主キーをCookieに保存して、後でユーザーがウィザードに戻ることができるという利点もあります。このオプションは、JavaScriptまたはセッション状態を必要としません。

12
Ben Mills

異なるパネルをすべてクライアント側にする...すべて同じフォームに...最終送信ボタンが押されると、すべての値を同時に送信できます。

4
Joel Martinez

JavaScriptを使用できず、サーバー変数をセッション変数に費やしたくない場合は、さまざまな手順で入力されている値をシリアル化および逆シリアル化し、非表示の入力フィールドを使用して値をやり取りすることもできます。 ASP.NET WebフォームのViewStateに少し似ています。

3
rodbv

私はログインウィザードをまとめ、それが役立つ場合はブログの背後にあるアイデアを文書化しました: link text

2
Piers Lawson

この質問には非常にシンプルで柔軟で拡張可能な方法があります: ASP.NET MVCでステートフルインターレースモーダルダイアログを簡略化する方法

1
soflexible557

NuGetで利用できる単純なコンポーネントMVCWizard.Wizardを使用できます。 WizardControllerを使用すると、部分ビューを使用してウィザードを作成できます。ウィザード全体を単一のビューでレンダリングするAutoWizardControllerもあります。これらのすべてのコンポーネントは、セッションと連動してモデルの状態を保存します。

1
Max Zerbini