我的ASP.NET MVC网站上有成员的消息传递系统。 邮件被标记为已读或未读。
现在我想在导航栏中显示一个标签,上面写着"你有x个新消息"如果有的话。这,无论我在网站上的哪个位置(不仅在讨论页面上)。
我可以请求在网站的每个页面上检索未读邮件的数量,但这对我来说似乎很糟糕。
您还推荐其他什么方式? (缓存,cookie等) 我认为这是一个众所周知的场景。
答案 0 :(得分:0)
您可以尝试其他方法:首次存储未读消息的数量。使用SignalR
之类的东西来通知并在用户收到新消息时更改号码
答案 1 :(得分:0)
如果您有兴趣实时处理此问题,请考虑SignalR技术:http://signalr.net/。
如果没有,你可以考虑使用MessagesCount属性的BaseController和BaseViewModel。
答案 2 :(得分:0)
假设您有一张Messages
的表格:
Id INT
Created DATETIME
ReceiverUserId INT
Message NVARCHAR(MAX)
...
如果您想从某个日期/时间(称为LastVisited
)获取新消息的数量,您可以使用SQL查询:
SELECT COUNT(*)
FROM Messages
WHERE ReceiverUserId = @CurrentUserId
AND Created > @LastVisited
这个查询速度快吗?是的,如果您创建了索引(ReceiverUserId, Created)
。
但是这个值不经常更改,因此您可以使用缓存。
如果您使用IoC容器,例如Autofac,Castle Windsor等,您可以为每个登录用户创建不同的容器,并将用户特定的对象(值)存储在此容器中。
您还可以在Session
中存储此原始值(新消息的数量)。