ASP.NET MVC: очистка TempData после выполнения метода контроллера - PullRequest
6 голосов
/ 22 мая 2009

Из того, что я прочитал, информация, помещенная в TempData, будет там для текущего и следующего запроса (чтобы вы могли передавать информацию через перенаправления). Проблема в том, что если я перейду к действию контроллера, которое не перенаправляет, информация в TempData все еще будет там для следующего запроса. Я использую TempData для хранения информационных сообщений, которые отображаются пользователю, поэтому теперь я получаю сообщения для первого экрана и на втором экране.

Есть ли хорошее время в жизненном цикле контроллера, чтобы очистить TempData, если он больше не используется?

Ответы [ 3 ]

7 голосов
/ 22 мая 2009

Используйте ViewData вместо TempData, если вы не перенаправляете . Вам никогда не нужно очищать TempData вручную. Если вы используете его только при перенаправлении, оно будет очищено для вас автоматически и в нужное время.

0 голосов
/ 22 мая 2009

Я бы не стал искать здесь определенное место, кроме пользовательского TempDataProvider. Но это сложно. Что делать, если вы хотите нормальное поведение в других контроллерах? Я бы сейчас это ЯГНИ и просто очистил, где нужно, чтобы это очистили. Когда вы заметите шаблон, вы можете поднять его в какое-то обычное место.

0 голосов
/ 22 мая 2009

Я думаю, что вы должны использовать ViewData, если вы не используете POST-REDIRECT-GET . Но если вам действительно нужно поведение, которое вы описали выше, вы должны создать свой собственный TempDataProvider:

public class YourTempDataProvider : SessionStateTempDataProvider
{
    public override void SaveTempData(ControllerContext controllerContext, IDictionary<string, object> values)
    {
        bool redirecting = ...

        if(redirecting)
        {
            base.SaveTempData(controllerContext, values);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...