1

我使用 TempData 在重定向期间保留 ModelState(使用 MvcContrib 技术)。这工作正常。然而,在极少数情况下,用户中止请求,然后立即触发另一个请求(例如,快速单击另一个菜单项)。这会导致 ModelState 错误出现在它不属于的该页面上。

问题是 TempData 存储在 Session 中。这意味着,任何请求都可以获取它,例如首先到达服务器的请求。

是否有任何已知的解决方法?例如,在 TempData 中保留“目标页面”以及保存的 ModelState。

4

1 回答 1

2

在我看来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)。

于 2010-03-25T12:55:21.060 回答