2013-07-01 78 views
0

我需要根據登錄用戶在緩存中爲菜單存儲動態創建的xmldatasource。下面的代碼爲所有用戶返回相同的數據,因爲我沒有提到登錄用戶。在添加緩存時,我需要在哪裏提及登錄名?我也想重置或刪除緩存,同時從事件接收器添加一個新的站點,因爲站點地圖必須重新創建。如何在基於登錄用戶的sharepoint 2010中緩存

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

回答

0

one不知道爲什麼你會這樣做。就像您構建了Sharepoint OOTB發佈網站一樣,用戶有權訪問的其他子網站也會出現。如果你忽略了緩存的根源,那麼你最終會在緩存中加載大量的條目,因爲每個條目都需要不同。

否則將USERName添加到CacheKey名稱。

然後更改您的代碼,以便首先檢查「SiteMapCache」+ Spcontext.Current.Web.CurrentUser.name是否爲null,如果它是獲取並將其存儲爲緩存。

您將需要另一個緩存項目,以存儲已添加到緩存的用戶列表。

然後,如果創建了一個新站點,則循環遍歷每個站點並將緩存項目設置爲空。

相關問題