如何在视图渲染后清除会话

本文关键字:清除 会话 视图 | 更新日期: 2023-09-27 18:00:33

这最初看起来像是一个游戏,但一点接一点地,我在很长一段时间内都遇到了这个问题。这是我的情况。我从我的域模型中启动通知。

这些通知只是包含标题和描述的对象,我将它们存储在集合中,以便将它们呈现在我的网站页面的顶部。然而,我很难用MVC找到合适的"会话"机制。

我开始使用HttpContext。项来存储我的所有会话数据,但当我将用户重定向到其他操作方法时,我发现它不适合重定向场景。实际上,创建了一个新的HttpContext,Items对象也丢失了。

因此,我尝试将会话内容存储在HttpContext中。会话,但我现在的问题是没有合适的时间来清除会话(我不想从一个请求到另一个请求继续通知)。OnActionExecuted和OnResultExecuted似乎在呈现视图之前运行。

以下是我如何在布局页面中显示通知:

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

ISession被映射到我的IOC容器中的一个存储(HttpContext.Items/HttpContext.Session)。

你有什么变通办法吗?

如何在视图渲染后清除会话

尝试使用TempDataDictionary。它作为TempData属性包含在Controller基类中。它旨在将数据从一个请求持久化到另一个请求。然后它会自动清除。

行动方式:

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

视图中:

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