問題:在SPSite或SPWeb對象的URL中使用具有不正確大小寫的SharePoint API(對象模型)創建網站列會導致新列如果試圖通過「網站欄庫」進行編輯,則會拋出異常。如何確定SharePoint網站的正確(區分大小寫)URL
SharePoint通常非常容忍以大小寫不敏感的方式接受URL,但有幾種情況下它完全崩潰。例如,在創建站點列時,它以某種方式在創建時存儲和使用該URL,並且在嘗試通過站點列畫廊(LAYOUTS中的fldedit.aspx頁面)編輯字段定義時最終拋出以下錯誤。
Value does not fall within the expected range.
at Microsoft.SharePoint.SPFieldCollection.GetFieldByInternalName(String strName, Boolean bThrowException)
at Microsoft.SharePoint.SPFieldCollection.GetFieldByInternalName(String strName)
at Microsoft.SharePoint.ApplicationPages.BasicFieldEditPage.OnLoad(EventArgs e)
at System.Web.UI.Control.LoadRecursive()
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
如何可靠地獲取站點/網站的正確URL? SPSite.Url和SPWeb.Url屬性似乎返回它們實例化的任何情況。
換句話說,該網站集使用以下URL置備:http://server/Path/Site
然後,如果我創建使用SharePoint對象模型的新網站欄和實例的SPSite和的SPWeb對象時碰巧使用http://server/path/site,網站列將會變得可用,但是當試圖通過圖庫訪問它時,會產生上述錯誤。如果我更正了地址欄中的URL,我仍然可以查看/修改所討論的SPField的定義,但生成的默認URL是僞造的。
清澈如泥?
示例代碼:(這是因爲案件的敏感性問題的一個壞榜樣)
// note: site should be partially caps: http://server/Path/Site
using (SPSite site = new SPSite("http://server/path/site")) {
using (SPWeb web = site.OpenWeb()) {
web.Fields.AddFieldAsXml("..."); // correct XML really here
}
}
你在哪裏運行創建站點列的代碼?通過功能接收器? – UnhipGlint 2010-03-17 23:59:43
@UnhipGlint我目前只是在服務器上的控制檯應用程序中運行它。最終它可能會在特性接收器中結束,或者可能會根據需要調用服務器控件/ .ashx。 – Goyuix 2010-03-18 03:06:55