现在我正在做的是在将ViewModel传递给另一个Action时使用TempData。
但我的同事告诉我,我不应该使用TempData,因为他们在我们的LoadBalancers之前遇到了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");
}
- 编辑 -
我还尝试通过参数将viewModel传递给redirectToAction,但我的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");
}
答案 0 :(得分:2)
假设页面加载的检查方法除了返回视图之外什么都不做,你能不能使用
return View("Check", viewmodel);
答案 1 :(得分:0)
您遇到的问题是由于TempData使用服务器会话来存储其内容,这在多服务器环境中存在问题。您可以实现自己的tempdata提供程序,以使其使用cookie。一些可能的解决方案:
https://stackoverflow.com/a/28355862/1942895
https://brockallen.com/2012/06/11/cookie-based-tempdata-provider