这最初看起来像一场游戏,但我一点一点地结束了这个问题很长一段时间。这是我的情况。我从我的域模型中激活通知。
这些通知只是包含标题和描述的对象,我将其存储在一个集合中,以便将它们呈现在我网站页面的顶部。但是我很难找到适合MVC的“会话”机制。
我首先使用HttpContext.Items来存储我的所有会话数据,但我发现它不适合重定向方案 - 当我将用户重定向到另一个Action方法时。实际上,创建了一个新的HttpContext,并且Items对象丢失了。
因此我尝试将会话内容存储在HttpContext.Session中,但我现在遇到的问题是没有适当的时间来清除会话(我不想从一个请求到另一个请求进行通知)。 OnActionExecuted和OnResultExecuted似乎在View渲染之前运行。
以下是我在布局页面中显示通知的方式:
@foreach(var notification in ISession.Notifications)
{
@Html.Partial("_NotificationPartial", new Mvc.Models.NotificationViewModel(notification))
}
ISession映射到我的IOC容器中的商店(HttpContext.Items / HttpContext.Session)。
你有任何解决方法吗?
答案 0 :(得分:1)
尝试使用TempDataDictionary。它作为TempData属性包含在Controller基类中。它旨在将数据从一个请求持久保存到另一个请求。然后它会自动清除。
在动作方法中:
TempData["Notifications"] = new List<Notification>()
在视图中:
@{
if(TempData["Notifications"] != null)
{
var notifications = TempData["Notifications"] as List<Notification>
}
}