Я работаю над веб-приложением ASP.NET MVC 3, где я использую TempData для хранения объекта модели в сценарии, когда пользователь не вошел в систему.
Вот поток:
- Используйте форму представления.
- Код (фильтр специальных действий) добавляет модель к TempData, перенаправляет на страницу входа.
- Пользователь перенаправлен обратно к действию GET, которое читает TempData и напрямую вызывает действие POST
После шага 3 я думал бы, что TempData будет очищен?
Вот код:
[HttpGet]
public ActionResult Foo()
{
var prefilled = TempData["xxxx"] as MyModel;
if (prefilled != null)
{
return Foo(prefilled);
}
}
[HttpPost]
[StatefulAuthorize] // handles the tempdata storage and redirect to logon page
public ActionResult Foo(MyModel model)
{
// saves to db.. etc
}
Я нашел эту статью , в которой говорится:
- Элементы удаляются из TempData только в конце запроса, если они были помечены для удаления.
- Элементы помечаются для удаления только после прочтения.
- Элементы могут быть помечены тегом TempData.Keep (ключ).
- RedirectResult и RedirectToRouteResult всегда вызывают TempData.Keep ().
Что ж, читая это с TempData["xxx"]
, разве это не «чтение» и поэтому они должны быть помечены для удаления?
И последнее меня немного волнует - поскольку я делаю Redirect после POST (P-R-G). Но этого нельзя избежать.
Есть ли способ, которым я могу сказать "угробить этот предмет". TempData.Remove? Или я делаю это неправильно?