ASP.NET MVC TempData используется для неправильного запроса - PullRequest
1 голос
/ 25 марта 2010

Я использую TempData для сохранения ModelState во время перенаправлений (используя технику MvcContrib). Это отлично работает. Однако в редких случаях пользователь прерывает запрос, а затем немедленно запускает другой (например, быстро нажимает на другой пункт меню). Это приводит к появлению ошибок ModelState на той странице, к которой она не относится.

Проблема в том, что TempData хранится в сеансе. Это означает, что любой запрос может получить его, например, тот, который первым приходит на сервер.

Есть ли известные обходные пути? Например. сохранить «страницу назначения» в TempData вместе с сохраненным ModelState.

1 Ответ

2 голосов
/ 25 марта 2010

По моему мнению, 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 для достижения того, что вы ищете, или добавьте уникальный идентификатор, который позволит вам идентифицировать правильный запрос.

Другой распространенный метод, который вы можете использовать вместо TempData, заключается в сериализации модели на клиенте (своего рода ViewState, если хотите).

...