在节点中,标题应该是登录系统的用户名。
此外,我希望缓存结果,因为要检索用户名,我必须访问数据库,因为用户名是电子邮件。
如何使用登录用户的名称修改标题并缓存结果,但是如果另一个用户登录它不会加载缓存的页面,而是会向他呈现一个新页面。
在节点中,标题应该是登录系统的用户名。
此外,我希望缓存结果,因为要检索用户名,我必须访问数据库,因为用户名是电子邮件。
如何使用登录用户的名称修改标题并缓存结果,但是如果另一个用户登录它不会加载缓存的页面,而是会向他呈现一个新页面。
在 v4 中,您可以简单地在视图或控制器中设置标题,它将为该用户缓存请求(其他用户不会看到它)。
@MvcSiteMapProvider.SiteMaps.Current.CurrentNode.Title = "My Username"
当然,我以 CurrentNode 为例,您可以通过遍历树对任何节点执行此操作。
但是,您需要处理用户名的缓存,以防止 MvcSiteMapProvider 之外的每个请求都命中数据库。您可以通过为每个用户创建一个缓存项,将用户名(只要它是唯一的)合并到密钥中来做到这一点。
var key = "My Username";
var userName = HttpContext.Current.Cache.Item[key];
if (userName == null)
{
userName = GetUserNameFromDB();
HttpContext.Current.Cache.Item[key] = userName;
}