如何动态更改仅一个节点的标题

时间:2013-03-09 13:16:23

标签: sitemapprovider mvcsitemapprovider

在节点中,标题应该是登录系统的用户的名称。

                        

此外,我希望缓存结果,因为要检索用户名,我必须转到数据库,因为用户名是电子邮件。

如何使用登录用户的名称修改标题并缓存结果,但如果其他用户登录,则不会加载缓存页面,但会向他呈现新页面。

1 个答案:

答案 0 :(得分:0)

在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;
}