0

我有从 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”,它工作得很好。以下是新代码:

公共无效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;

}

4

1 回答 1

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 - 处理大型文件夹和列表

只要有可能,通过使用列表的 GUID 或 URL 作为键来获取对列表的引用。

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

于 2012-09-04T07:54:54.587 回答