47

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

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

編集: 私の上司は現在、「javascript はありません」と言っています。その制限を回避する方法について何か考えはありますか?

4

8 に答える 8

46

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

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

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

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


うわー、あなたの上司は臭いです。

この回答は、javascript が無効になっている ****** 人 (はい、両方とも) にはほとんど問題なく機能します。CSS を介して前後のボタンを非表示にし、JavaScript コードで再表示するように微調整できます。このように、JavaScript を使用するユーザーにはウィザードが表示され、JavaScript を使用しないユーザーにはフォーム全体が表示されます (次へ/前へのボタンなし)。

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

于 2008-11-17T22:29:24.043 に答える
20

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

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

于 2008-11-18T17:05:22.683 に答える
12

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

于 2009-02-03T19:49:41.597 に答える
4

さまざまなパネルをすべてクライアント側にして...すべて同じフォームに...そして最後の送信ボタンを押すと、すべての値を同時に投稿できます。

于 2008-11-17T22:28:37.243 に答える
3

Javascript を使用できず、セッション変数でサーバー リソースを使いたくない場合は、別のステップで入力される値をシリアル化および逆シリアル化し、非表示の入力フィールドを使用して前後に渡すこともできます。ASP.NET Webforms の ViewState に少し似ています。

于 2008-11-24T22:13:40.127 に答える
2

ログイン ウィザードを作成し、その背後にあるアイデアをブログに記録しました。リンク テキスト

于 2009-09-22T20:03:44.190 に答える
1

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

于 2011-09-12T15:59:57.947 に答える
1

この質問には、非常にシンプルで柔軟で拡張可能な方法があります: How to simple my statefull interlaced modal dialogs in ASP.NET MVC

于 2011-12-19T16:36:08.100 に答える