我的代码正在从Sharepoint 2010文档库中提取一些图像。当我登录并测试一切正常时,但是当它发布时会强制登录屏幕。
这是踢球者:如果我通过普通HTML引用图像,则发布的页面不需要登录。只有当我尝试将图像拉入并将其列表构建到asp:literal控件中时才会出现。
据我所知,列表上的权限允许匿名读取。某处有点腥。请帮忙!
以下是我正在使用的代码:
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;
}
更新: Aquila的答案就是这样的。我把第一行更改为SPWeb oSite = SPContext.Current.Site.RootWeb;而不是“SPSite oSite = SPContext.Current.Site”,它工作得很好。以下是新代码:
public void 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 :(得分: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。