ASP.NET MVC TempData用于错误请求

时间:2010-03-25 12:07:00

标签: asp.net-mvc tempdata

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

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

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

1 个答案:

答案 0 :(得分: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");
}

使用会话来实现您的目标或添加一些唯一ID,以便您识别正确的请求。

您可以使用的另一种常用技术代替TempDataserialize the model on the client(如果您愿意,可以使用某种ViewState)。