2010-11-26 128 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; 
    } 
} 
相关问题