我使用 TempData 在重定向期间保留 ModelState(使用 MvcContrib 技术)。这工作正常。然而,在极少数情况下,用户中止请求,然后立即触发另一个请求(例如,快速单击另一个菜单项)。这会导致 ModelState 错误出现在它不属于的该页面上。
问题是 TempData 存储在 Session 中。这意味着,任何请求都可以获取它,例如首先到达服务器的请求。
是否有任何已知的解决方法?例如,在 TempData 中保留“目标页面”以及保存的 ModelState。
我使用 TempData 在重定向期间保留 ModelState(使用 MvcContrib 技术)。这工作正常。然而,在极少数情况下,用户中止请求,然后立即触发另一个请求(例如,快速单击另一个菜单项)。这会导致 ModelState 错误出现在它不属于的该页面上。
问题是 TempData 存储在 Session 中。这意味着,任何请求都可以获取它,例如首先到达服务器的请求。
是否有任何已知的解决方法?例如,在 TempData 中保留“目标页面”以及保存的 ModelState。
在我看来TempData
,应该只用于立即重定向的操作。例如:
public ActionResult Index()
{
TempData["foo"] = "bar";
return RedirectToAction("About");
}
public ActionResult About()
{
var foo = TempData["foo"];
return View();
}
您应该避免将某些内容存储到 TempData 并呈现视图:
public ActionResult Index()
{
TempData["foo"] = "bar";
// bad :-(
return View("About");
}
使用 Session 来实现您正在寻找的内容,或添加一些唯一 ID,以便您识别正确的请求。
您可以使用的另一种常用技术TempData
是在客户端上序列化模型(如果您愿意,可以使用一种 ViewState)。