如何在视图渲染后清除会话
本文关键字:清除 会话 视图 | 更新日期: 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>
}
}