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;
}