我无法获取我的 SharePoint ListItem 字段

Posted

技术标签:

【中文标题】我无法获取我的 SharePoint ListItem 字段【英文标题】:I can't get my SharePoint ListItem Fields 【发布时间】:2011-06-07 02:06:50 【问题描述】:

我想显示某个 ListItem 的所有字段。这包括 LookUpFields 和 ChoiceFields。但我似乎只能显示文本字段,如标题。如何显示我的 ListItem 的所有字段? 问题是当我尝试以显示“标题”的方式显示列表项的其他字段时出现错误,就好像我输入的字符串不作为该列表项中的字段存在一样。但它们确实存在并且充满了价值! 在不出现 ObjectReference 错误的情况下显示列表项的自定义字段的好方法是什么? 我也收到此错误:字典中不存在给定的键。

    private void foo()
    
        using (ClientContext context = new ClientContext(ApplicationContext.Current.Url))
        
            _list = context.Web.Lists.GetByTitle("MyList").Title);
            _items = _list.GetItems(CamlQuery.CreateAllItemsQuery());
            context.Load(_items);
            context.ExecuteQueryAsync(
                new ClientRequestSucceededEventHandler(OnListItemsRequestSucceeded),
                new ClientRequestFailedEventHandler(OnListItemsRequestFailed));
        
    
private void OnListItemsRequestSucceeded(Object sender, ClientRequestSucceededEventArgs args)
    
        // this is not called on the UI thread
        Dispatcher.BeginInvoke(ShowListItemDetails);
    
public void ShowListItemDetails()
    
foreach (ListItem i in _items)
        
TextBox_Details.Text += i["Title"].ToString() + Environment.NewLine;
// Now the rest of the fields of this item.
        

编辑:还有一个大问题是我无法让调试器工作。此代码在本地 Sharepoint 站点上作为 Silverlight Webpart 运行。我将调试器附加到 iexplorer.exe,但它不会中断。 如果我能让调试器工作,那将是一个很大的帮助。

【问题讨论】:

而问题实际上是什么?当您转储更多字段时会出现什么问题?您在处理非文本字段时遇到什么问题? Ondrej 可能的意思是您应该向我们提供您在处理非文本字段时遇到的错误。另外:在你的 foreach ListItem 循环中设置一个断点,你可以访问所有字段(只是为了看看它们在那里)。 【参考方案1】:

您已经告诉查询您需要从列表中提取哪些字段

CamlQuery camlQuery = new CamlQuery();
            camlQuery.ListItemCollectionPosition = itemPosition;
            camlQuery.ViewXml =
                @"<View>
                    <ViewFields>
                      <FieldRef Name='Title'/>
                      <FieldRef Name='Category'/>
                      <FieldRef Name='Estimate'/>
                    </ViewFields>
                    <RowLimit>10</RowLimit>
                  </View>";
            ListItemCollection listItems = list.GetItems(camlQuery);
            clientContext.Load(listItems);
            clientContext.ExecuteQuery();

更多详情

http://msdn.microsoft.com/en-us/library/ee857094.aspx#SP2010ClientOM_Accessing_Large_Lists

【讨论】:

我看过这个例子,但还没有尝试过。是否必须为这些自定义字段提供 CamlQuery?我的印象是 CamlQuery.CreateAllItemsQuery() 会给我 ListItem 的每个字段。 不完全是它们还有其他一些可用的方法,但我的动机是告诉你需要命名所有列 我试过你的方法。当我尝试使用查询中提供的字段名时,我得到'null'。 TextBox_Details.Text += i.FieldValues["Production"]; ...结果是一个空异常 blogs.technet.com/b/speschka/archive/2009/11/01/… 试试这篇文章 关于如何调试你只需要在你的 VS2010 上按 f5 a2zdotnet.com/View.aspx?Id=174【参考方案2】:

要获取项目属性,您需要在 ClientContext.Load 方法的第二个参数中指定所需的所有项目属性

例如

        string server = "http://localhost";
        ClientContext context = new ClientContext(server);
       Web web = context.Web;
        var spList = web.Lists.GetByTitle("MyTitle");
        CamlQuery query = new CamlQuery();
        var items = spList.GetItems(query);
        context.Load(items, 
            itema => itema.Include(
                item => item,
                item => item["ComplexProperty"]));
        context.ExecuteQuery();`

【讨论】:

以上是关于我无法获取我的 SharePoint ListItem 字段的主要内容,如果未能解决你的问题,请参考以下文章

使用Graph API获取SharePoint组名称

无法在Sharepoint 2013在线自定义列表中使用SPD获取Lookup字段值

ListIt2 模块的 CMSMS htaccess 重写

为啥我的 Sharepoint WebPart 部署(名义上),但仍无法添加到页面/表单?

无法从 C# 和图形资源管理器中的 Sharepoint 图形获取驱动器项目和驱动器文件夹

SharePoint 2010 - 设置peoplepicker-searchadforests,无法删除属性并获取 用no -url param设置之后