私はいくつかの部分で完成したフォームを持つプロジェクトを持っています。例えば。パート1にはあなたの名前が含まれ、パート2にはあなたの住所が含まれる場合があります。ポストリダイレクト - 長い/ウィザードスタイルのフォームでパターンを取得する
MVCには、すべてのフォームデータを保持するための各パーツと1つのモデルを表すいくつかのビューがあります。
私は、各パーツの完成時にフォームデータを保存し、次のパーツで保存されたレコードを取り出すことができます(モデル全体が各段階で利用可能になります)。
バックとフォワードボタンを使用してブラウザから「フォームが再送信される可能性があります」という警告が表示されないように、Post-Redirect-Getを使用しています。
コントローラー・コード
[HttpGet]
[Route("Form/Part/{id}")]
public ActionResult Part(int id, int? recordId)
{
var model = new MyVM();
if(recordId.HasValue) {
// get record from DB
// map record to 'model'
}
return View("Form.{id}", model);
}
[HttpPost]
[Route("Form/Part/{id}")]
public ActionResult Part(int id, MyVM model)
{
// map model to entity
// save/update entity
return RedirectToAction($"Form/Part/{id + 1}", new { recordId = recordId })
}
私の質問は、新しく作成された/更新されたレコードのIDを保持し、次のフォームの部分にそれを渡す方法がベストです。私は失われた戻るボタンクエリ文字列でrecordId
などのブラウザを使用する場合recordId
routeValue
として作品を渡すと、それが壊れるなくなり
。
私はこのセッションをおそらく保存することを検討していますが、テストの理由からを再生したいとは思わないでしょう。
このようなことを達成するための推奨方法はありますか?現在の記録を把握するための様々な方法についての考えは大変高く評価されます。
クッキーと考えることができます(また、 'id'が' null'の場合は、その値をクッキーでチェックしてください)。また、現在のステップを追加して、ユーザーがログオフしてから後で完了するように戻ってきてもよい(最後のステップで削除する) –