TempData не очищается

Я работаю над веб-приложением ASP.NET MVC 3, где я использую TempData для хранения объекта модели , в сценарии, где пользователь не вошел в систему.

Вот последовательность действий:

  1. Использовать форму отправки.
  2. Код (специальный фильтр действий) добавляет модель к TempData, перенаправляет на страницу входа.
  3. Пользователь перенаправлен обратно к действию 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
}

Я обнаружил это статья , в которой говорится:

  1. Элементы удаляются из TempData только в конце запроса, если они были помечены для удаления.
  2. Элементы помечаются для удаления только при чтении.
  3. Элементы можно удалить, вызвав TempData.Keep (ключ).
  4. RedirectResult и RedirectToRouteResult всегда вызывают TempData.Keep ().

Что ж, читая его с помощью TempData ["xxx"] , разве это не "чтение", и поэтому их следует пометить для удаления?

И последний вопрос меня немного беспокоит - поскольку Я делаю перенаправление после POST (PRG). Но этого не избежать.

Есть ли способ сказать «брось этот предмет». TempData.Remove? Или я делаю это неправильно?

9
задан RPM1984 3 October 2011 в 02:57
поделиться