2010-11-26 126 views
5

有沒有一種方法可以通過Url獲取List對象?Sharepoint 2010客戶端對象模型從Url獲​​取列表項

我知道你可以通過標題獲取列表:

ClientContext context = new ClientContext("http://foo"); 

List list = context.Web.Lists.GetByTitle("title"); 

context.Load(list); 
context.ExecuteQuery(); 

但我希望用戶能夠複製,粘貼到一個文本框,從他們的瀏覽器的URL(如http://foo/subsite/ListName/Forms/AllItems.aspx),然後提取列出來自該網址的對象。

回答

5

不,沒有任何方法可以直接從URL獲取List對象。正如您已經指出的那樣,您可以從列表標題中獲取它,並且您還可以通過它的ID獲取它(請參閱ListCollection.GetById)。

我的建議是做一些URL黑客入侵; SharePoint網址遵循可預測的模式。如果用戶複製/粘貼列表網址,那麼他們肯定會將網址指向一個視圖,該視圖將以類似/Forms/[ViewName].aspx的形式結束。在路徑中查找「/ Forms /」,獲取前面的子字符串,然後使用路徑的新結尾作爲列表名稱。

通過嘗試加載列表,捕獲列表不存在時拋出的ArgumentException,並以此爲契機向用戶顯示錯誤消息,很容易做到防禦性編碼。

+1

感謝。這是一個明確的DIY案例。 – 2010-11-30 12:18:52

0

試試這個:

private static List GetListByServerRelativeUrl(string serverRelativeUrl) 
{ 
    using (ClientContext ctx = new ClientContext("http://yoursite")) 
    { 
     var q = from list in ctx.Web.Lists 
       where list.RootFolder.ServerRelativeUrl == serverRelativeUrl 
       select list; 
     var r = ctx.LoadQuery(q); 
     ctx.ExecuteQuery(); 
     return r; 
    } 
} 
相關問題