現在、私は、ViewModelを別のActionに渡す際にTempDataを使用しています。TempDataを使用せずにActionResults間でViewModelを渡す
しかし私の同僚は、LoadBalancers以前はTempDataの使用に問題があったため、TempDataを使用すべきではないと私に忠告しました。
ここに私のコントローラの一部があり、私がしたいことが分かります。 TempDataまたはSessionを使用せずに同じプロセスをどのように達成できますか。 お知らせください、ありがとうございます!
public ActionResult Create()
{
MyViewModel viewModel;
if (TempData["viewModel"] != null)
{
viewModel = (MyViewModel)TempData["viewModel"];
//code for getting dropdownlist to show to view
return View(viewModel);
}
viewModel = new RequestViewModel();
//code for getting dropdownlist to show to view
return View(viewModel);
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(MyViewModel viewModel)
{
if (ModelState.IsValid)
{
//collect data, but not yet save to database
TempData["viewModel"] = viewModel;
return RedirectToAction("Confirm");
}
//code to get errors, and dropdownlist items to re-show to view
return View(viewModel);
}
public ActionResult Confirm()
{
if (TempData["viewModel"] != null)
{
var viewModel = (MyViewModel)TempData["viewModel"];
return View(viewModel);
}
return RedirectToAction("Create");
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Confirm(MyViewModel viewModel)
{
if (ModelState.IsValid)
{
//save data to database if confirmed
return View(viewModel);
}
return RedirectToAction("Create");
}
--EDIT--
私は、パラメータを経由してredirectToActionへのViewModelを渡そうとしましたが、私のViewModelは、リダイレクト後に再投入しませんでした。コード:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(MyViewModel viewModel)
{
if (ModelState.IsValid)
{
//collect data, but not yet save to database
return RedirectToAction("Confirm", viewModel);
}
//code to get errors, and dropdownlist items to re-show to view
return View(viewModel);
}
public ActionResult Confirm(MyViewModel viewModel)
{
if (viewModel != null)
{
//some code
return View(viewModel);
}
return RedirectToAction("Create");
}
[HttpPost]
[ActionName("Review")]
[ValidateAntiForgeryToken]
public ActionResult ConfirmPost(MyViewModel viewModel)
{
if (ModelState.IsValid)
{
//save data to database if confirmed
return View(viewModel);
}
return RedirectToAction("Create");
}
いいえは、すべての入力が正しい場合、ユーザーはチェックところViewがあるか確認してください。いずれかのユーザーが、キャンセルボタンを表示して、確認ボタンを押して続行します。 – jomsk1e
ご迷惑をおかけして申し訳ございませんが新しいビューを確認しますか? –
はい、チェックはユーザーが入力を検証してから続行するかどうかを決定できる新しいビューです。 – jomsk1e