Sharepoint 2010客户端对象模型从Url获​​取List项

时间:2010-11-26 11:06:35

标签: c# sharepoint-2010

有没有办法通过网址获取List对象?

我知道你可以通过标题获得一个列表:

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

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

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

但我希望用户能够在文本框中将浏览器中的网址复制粘贴(例如http://foo/subsite/ListName/Forms/AllItems.aspx),然后从该网址中提取List对象。

2 个答案:

答案 0 :(得分:5)

不,没有直接从URL获取List对象的方法。正如您所指出的,您可以从列表标题中获取它,您也可以通过其ID获取它(请参阅ListCollection.GetById)。

我的建议是做一些网址黑客攻击; SharePoint URL遵循可预测的模式。如果用户复制/粘贴列表URL,他们肯定会拥有视图的URL,这将以/Forms/[ViewName].aspx之类的结尾。在路径中查找“/ Forms /”,获取前面的子字符串,然后使用路径的新结尾作为列表名称。

通过尝试加载列表,捕获列表不存在时引发的ArgumentException并使用它作为向用户显示错误消息的机会,可以轻松地执行一些防御性编码

答案 1 :(得分: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;
    }
}