2011-09-15 95 views
0

我有一個SP Web部件,它從數據表中提取數據並顯示格式。這個Web部件的大部分實例都能正常工作,但是這個特定的實例在被調用時會返回null。但是,如果我登錄到網站(而不是匿名),則Web部件會返回該列表。很奇怪。我檢查了所有涉及的Web對象,它們都從父級繼承,不需要登錄即可查看。Sharepoint OpenWeb()在未登錄時返回null

下面的代碼片段:(請記住我繼承了這個代碼,它絕不是「好」)

public static DataTable GetDataTableFromSPList(string webUrl, string listName, Int32 numToReturn, string sortCol, string ascend) 
{ 
      SPListItemCollection coll = null; 
      DataTable dt = null; 

       string siteUrl = GetUrlPrefix(); 
       using (SPSite site = new SPSite(siteUrl + webUrl)) 
       { 
        using (SPWeb web = site.OpenWeb()) //this returns NULL when logged in anon??? 
        { 
         try 
         { 
          SPList list = null; 
          list = web.Lists[listName]; 

          SPQuery query = new SPQuery(); 
          string qry = "<OrderBy><FieldRef Name='" + sortCol + "' Ascending='" + ascend.ToUpper() + "' /></OrderBy>"; 

          query.Query = qry; 
          query.RowLimit = Convert.ToUInt32(numToReturn); 
          coll = list.GetItems(query); 

          if (coll != null) 
          { 
           dt = coll.GetDataTable(); 
          } 
         } 
         catch (Exception ex) 
         { 
          WriteLog(ex.Message, System.Diagnostics.EventLogEntryType.Error); 
         } 
        } 
       } 

      return dt; 
} 

回答

1

我從來沒有經歷過這樣的問題,要麼,但在閱讀一對夫婦的後有關它的文章,似乎這是「默認行爲」。

的OpenWeb()方法返回了 「最低」 的網頁,它可以找到,例如:

和你代碼是這樣的:

var web = site.OpenWeb("subsite/subsite1"); 

該web對象將代表ng「subsite」而不是「subsite1」,因爲「subsite1」不存在。

對你來說,這絕對是一個權限問題。爲整個網站集合啓用匿名訪問,還是具體說明,是否啓用了您嘗試使用代碼調用的網頁?如果是這樣,用戶(匿名)可以打開網頁嗎?

解決它最簡單的方法,是包裝與SPSecurity.RunWithElevatedPrivileges的方法,但它不是很優雅。

OpenWeb() Reference

SPSecurity.RunWithElevatedPrivileges Reference

+0

是,整個網站爲匿名訪問啓用。 RunWithElevatedPrivs確實解決了這個問題..我很想知道發生了什麼。 –

相關問題