Sharepoint 2010客户端对象模型从Url获取列表项
问题描述:
有没有一种方法可以通过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),然后提取列出来自该网址的对象。
答
不,没有任何方法可以直接从URL获取List
对象。正如您已经指出的那样,您可以从列表标题中获取它,并且您还可以通过它的ID获取它(请参阅ListCollection.GetById
)。
我的建议是做一些URL黑客入侵; SharePoint网址遵循可预测的模式。如果用户复制/粘贴列表网址,那么他们肯定会将网址指向一个视图,该视图将以类似/Forms/[ViewName].aspx
的形式结束。在路径中查找“/ Forms /”,获取前面的子字符串,然后使用路径的新结尾作为列表名称。
通过尝试加载列表,捕获列表不存在时抛出的ArgumentException
,并以此为契机向用户显示错误消息,很容易做到防御性编码。
答
试试这个:
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;
}
}
感谢。这是一个明确的DIY案例。 – 2010-11-30 12:18:52