0

我需要根据登录用户在缓存中存储为菜单动态创建的 xmldatasource。下面的代码为所有用户返回相同的数据,因为我没有提到登录用户。添加缓存时我需要在哪里提及登录名?我还想在从事件接收器添加新站点时重置或删除缓存,因为站点地图必须重新创建。

    private static object _lock = new object();

    public XmlDocument CacheData()
    {            
        XmlDocument item;
        lock (_lock)
        {
            item = (XmlDocument)Cache["SiteMapCache"];
            if (item == null)
            {
                using (SPSite site = new SPSite(SPContext.Current.Site.Url))
                {
                    SPWebApplication webapp = site.WebApplication;
                    item = GenerateMenu(webapp);
                }
                Cache.Add("SiteMapCache",
                    item, null,
                    DateTime.Now.AddMinutes(1),
                    System.Web.Caching.Cache.NoSlidingExpiration,
                    System.Web.Caching.CacheItemPriority.Default,
                    null);
            }
            return item;
        }
    }
4

1 回答 1

0

一不知道你为什么会这样做。就像您构建了一个 Sharepoint OOTB 发布站点一样,用户有权访问的其他子站点将会出现。如果您从缓存的根目录开始,您最终可能会在缓存中加载大量条目,因为每个条目都需要不同。

否则将 USERName 添加到 CacheKey 名称。

然后更改您的代码,使其首先检查“SiteMapCache”+Spcontext.Current.Web.CurrentUser.name 是否为空,是否获取它并将其存储为缓存。

您将需要另一个缓存项,以存储已添加到缓存中的用户列表。

然后,如果创建了一个新站点,则遍历每个站点并将缓存项设置为空。

于 2013-07-01T13:05:36.773 回答