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」の代わりに、問題なく機能しました。以下は新しいコードです。

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;

}

4

1 に答える 1

0

SPList oList = oSite.AllWebs[0].Lists["MainPage Banner Library"];これは、Web のすべてのリストを読み取り、タイトルの比較を行って目的のリストを返す必要があるため、問題を引き起こしている行である可能性があります。

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 は一意で永続的であり、必要なデータベース ルックアップは 1 回だけであるため、GUID を使用することをお勧めします。表示名インデクサーは、サイト内のすべてのリストの名前を取得し、それらと文字列を比較します。GUID ではなくリストの URL がある場合は、SPWeb で GetList メソッドを使用して、リストを取得する前にコンテンツ データベースでリストの GUID を検索できます。

于 2012-09-04T07:54:54.587 に答える