2012-08-31 39 views
0

我有一个代码,它从Sharepoint 2010文档库中提取一些图像。当我登录时,测试一切正常,但发布时会强制登录屏幕。代码访问文档库强制登录[更新]

这里是踢球者:如果我通过普通的HTML参考图像,发布的页面不需要登录。它只是当我试图拉入图像,并建立一个列表到asp:文字控制。

据我所知,列表中的权限允许匿名读取。某处某处有鱼腥味。请帮忙!

下面是我使用的代码:

public void GetBanners() { 

string strCode = ""; 

using (SPSite oSite = SPContext.Current.Site) { 

    SPList oList = oSite.AllWebs[0].Lists["MainPage Banner Library"]; 
    SPView lv = oList.Views["All Pictures"]; 
    SPListItemCollection lic = oList.GetItems(lv); 

    foreach (SPListItem li in lic) { 
     if(li["Enabled"] is bool && (bool)li["Enabled"] == true) { 
      if(li["URL"] is string && li["URL"].ToString() != "") { 
       strCode = strCode + "<a href=\"" + GetURL(li["URL"].ToString()) + "\" target=\"_blank\"><img src=\"/MainPage Banner Library/" + li["Name"].ToString() + "\" alt=\" \" /></a>"; 
      } else { 
       strCode = strCode + "<img src=\"/MainPage Banner Library/" + li["Name"].ToString() + "\" alt=\" \" />"; 
      } 

     } 
    } 
} 
ltBanners.Text = strCode; 
} 

更新: 拉奎拉的答案是种它。我把第一行改成SPWeb oSite = SPContext.Current.Site.RootWeb;而不是“SPSite oSite = SPContext.Current.Site”,它工作得很好。下面是新的代码:

公共无效GetBanners(){

string strCode = ""; 

    SPWeb oSite = SPContext.Current.Site.RootWeb; 
    SPList oList = oSite.Lists["MainPage Banner Library"]; 
    SPView lv = oList.Views["All Pictures"]; 
    SPListItemCollection lic = oList.GetItems(lv); 

    foreach (SPListItem li in lic) { 
     if(li["Enabled"] is bool && (bool)li["Enabled"] == true) { 
      if(li["URL"] is string && li["URL"].ToString() != "") { 
       strCode = strCode + "<a href=\"" + GetURL(li["URL"].ToString()) + "\" target=\"_blank\"><img src=\"/MainPage Banner Library/" + li["Name"].ToString() + "\" alt=\" \" /></a>"; 
      } else { 
       strCode = strCode + "<img src=\"/MainPage Banner Library/" + li["Name"].ToString() + "\" alt=\" \" />"; 
      } 

     } 
    } 

ltBanners.Text = strCode; 

}

回答

0

这可能是导致您的问题,因为这需要读取所有列出了网络后再行SPList oList = oSite.AllWebs[0].Lists["MainPage Banner Library"];做一个标题比较来返回你之后的列表。

尝试使用SPList oList = oSite.AllWebs[0].Lists[ListGUID];SPList oList = oSite.AllWebs[0].GetList(ServerRelativeListURL);。从MSDN - Handling Large Folders and Lists

尽可能

报价,通过使用列表的GUID或URL作为重点掌握到列表的引用。

通过使用列表的GUID或显示名称作为索引器,您可以从SPWeb.Lists属性中检索SPList对象。使用SPWeb.Lists [GUID]和SPWeb.GetList(strURL)始终优于使用SPWeb.Lists [strDisplayName]。使用GUID更好,因为它是唯一的,永久的,并且只需要单个数据库查找。显示名称索引器检索站点中所有列表的名称,然后与它们进行字符串比较。如果您有一个列表URL而不是GUID,则可以使用SPWeb中的GetList方法在检索列表之前在内容数据库中查找列表的GUID。