2015-06-29 4 views
0

Это изначально выглядело как игра, но после бит я закончил эту проблему довольно долгое время. Вот моя ситуация. Я запускаю уведомления из моей модели домена.Как очистить сеанс после просмотра рендеринга

Эти уведомления являются объектами, содержащими заголовок и описание, которые я храню в коллекции, чтобы отображать их в верхней части страниц моего веб-сайта. Однако у меня возникли проблемы с поиском соответствующего механизма «сеанса» с MVC.

Я начал с использования HttpContext.Items для хранения всех моих данных сеанса, но я узнал, что он не подходит для сценариев перенаправления - когда я перенаправляю пользователя к другому методу действий. В действительности создается новый HttpContext и объект Items теряется.

Следовательно, я попытался сохранить свой сеанс в HttpContext.Session, но проблема, с которой я сейчас сталкиваюсь, заключается в том, что нет времени для очистки сеанса (я не хочу передавать уведомления с одного запроса другому) , OnActionExecuted и OnResultExecuted кажутся запущенными до того, как откроется представление.

Вот как я показывать уведомления на моей странице Layout:

@foreach(var notification in ISession.Notifications) 
{ 
    @Html.Partial("_NotificationPartial", new Mvc.Models.NotificationViewModel(notification)) 
} 

ISession отображается в магазин (HttpContext.Items/HttpContext.Session) в моем контейнере МОК.

У вас есть обходная идея?

ответ

1

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

В методе действия:

TempData["Notifications"] = new List<Notification>() 

По мнению:

@{ 
    if(TempData["Notifications"] != null) 
    { 
     var notifications = TempData["Notifications"] as List<Notification> 
    } 
} 
+0

Или 'TempData.Add (ключ, значение)', хотя это будет сгенерировано исключение, если ключ уже существует. –