ジョナスは絶対に正しいです。下のもう少しの内訳。
public class MyModel
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid Id { get; set };
public string StepOneData { get; set; }
public string StepTwoData { get; set; }
}
上記の略奪は単純なので、そこにあなたのフィールドを置き換えます。次に、ウィザードを開始する簡単なアクションから始めます。
public ActionResult WizardStep1()
{
return View(new MyModel());
}
これは。あなたがしたい場合。私達はちょうど別のアクションにポストをリダイレクトされます作成テンプレートウィザードを使用することができます「WizardStep1.cshtml(あるかみそりを使用している場合)ビューを呼び出します。
<WizardStep1.cshtml>
@using (Html.BeginForm("WizardStep2", "MyWizard")) {
ノートの事は、我々は別のアクションにこれを掲示されるということです。WizardStep2アクションこのアクションで
[HttpPost]
public ActionResult WizardStep2(MyModel myModel)
{
return ModelState.IsValid ? View(myModel) : View("WizardStep1", myModel);
}
我々のモデルが有効である場合、我々はチェックし、もしそうなら、私たちは私たちのウィザードに送りますtep2.cshtmlそれ以外の場合は、検証エラーでステップ1に戻します。各ステップで次のステップに送信し、そのステップを検証して移動します。ここで、いくつかの知識豊富な開発者は、ステップ間で[必須]属性やその他のデータ注釈を使用すると、このようなステップ間を移動することはできません。そして、あなたは正しいだろう。だから、まだチェックされていない項目のエラーを取り除く。以下のように。
[HttpPost]
public ActionResult WizardStep3(MyModel myModel)
{
foreach (var error in ModelState["StepTwoData"].Errors)
{
ModelState["StepTwoData"].Errors.Remove(error);
}
最後に、モデルをデータストアに一度保存します。これにより、ウィザードを起動しても不完全なデータをデータベースに保存しないようにするユーザーはいなくなります。
ウィザードを実装するこの方法が、以前に説明した方法よりもはるかに使いやすくメンテナンスされていることを祈っています。
読んでいただきありがとうございます。
「no jQuery」要件について詳しく説明できますか? JavaScriptは許可されていますか? JavaScriptライブラリやフレームワークは許可されていますか? – David
@David迅速な対応に感謝します。私はOrchardCMS v1.3を使用していますが、ClientSideValidationは現在そのコンテキストでは実行できません。さらに、私はいくつかの動的要素を使用しています。私の理解では、そのコンテキストでのClientSideValidationはうまく動作しません(http://xhalent.wordpress.com/2011/01/24/applying-unobtrusive-validation-to-dynamic-contentを参照してください)。 /);私の最初の制限があれば、そこの回避策は役に立たない。 –
NB:http://stackoverflow.com/questions/6402628/multi-step-registration-process-issues-in-asp-net-mvc-splitted-viewmodels-sing?answertab=votes#tab-topの精巧な解決策その多くの情報を維持するための9つの「ステップ」のための健全な練習ではないというコメントがあります。私の目的のためにも、私は少なくとも7つのステップ(最後のものは確認ですが)に私のフォームを分割しているので、問題になる可能性があります。 –