繁体   English   中英

SharePoint ListItem 错误:“值不在预期范围内”

[英]SharePoint ListItem Error: “Value does not fall within the expected range”

您好我正在使用 SharePoint 命名空间进行开发,当我尝试从列表项中检索标题字段时遇到以下错误。

值不在预期范围内

但是我知道该字段存在,因为我打印了所有字段。

string value = (string)listItem[listItem.Fields["Title"].Id];
Console.WriteLine("Title = " + value);

更新:用于检索列表项的视图在多大程度上在哪些字段可用? 此代码失败并出现相同的异常:

SPListItemCollection items = list.GetItems(list.DefaultView);
foreach (SPListItem listItem in items)
{
  try
  {
    Console.WriteLine("Title = " + listItem.Title);
  }
  catch (Exception e) 
  { 
    Console.WriteLine("Exception: " + e.Message); 
  }
}

在这两种情况下,list.DefaultView 属性都用于检索列表项。

我不知道你的错误是否解决了。 但是我遇到了同样的问题,我找到了解决问题的方法。

您必须 go 才能:
管理中心 > 应用程序管理 > 管理 Web 应用程序
select Web 应用在使用和选择:
通过功能区“常规设置 > 资源限制”。

在该向下滚动并查找“ List View Lookup Threshold ”,默认值为8 ,增加该值直到错误消失。

参考链接

我遇到了这个问题,因为该列不是默认视图的一部分。 在创建 SPListItemCollection 时直接查询特定列,而不是依赖视图。

  SPList cityList = web.Lists[cityListName];
  SPListItemCollection items = cityList.GetItems("Title","LocCode");
  foreach (SPListItem item in items)
     {
          cityName = item["Title"].ToString().Trim();
          cityCode = item["LocCode"].ToString().Trim();
     }

我建议像

if (item.Fields.ContainsField("Last_x0020_Modified"))
{
    if (query.ViewFields.Contains("Last_x0020_Modified"))
    ...

B/c 如果在 SPQuery.ViewFields 中没有请求该字段,您可能无法获取它(例外包括 Created 字段、ID 字段)

“标题”字段可能存在于列表中,但不存在于默认视图中。 你能做这个吗?

foreach (var item in list.Items) Console.WriteLine((string)item["Title"]);

我不知道为什么,但我从 SPListItemCollection 创建了一个 GridView 作为数据源。 我有同样的错误。 但我试图从集合中获取数据表:

SPListItemCollection res = da.getAllItems();
DataTable dt = res.GetDataTable();

然后我在我的 GridView 中看到包含列表项标题的字段称为“LinkTitle”。 所以,我重写了我的代码: SPListItemCollection res = da.getAllItems();

gridView.DataSource = res.Cast<SPListItem>().Select(a=> a["LinkTitle"] );
gridView.DataBind();

一切正常:)

“标题”字段(默认情况下)在默认视图中不可用。 如果您查看视图设置页面,标题被选中,但它被标记为“链接到带有编辑菜单的项目”。

视图公开的字段实际上名为“LinkTitle”(您可以通过枚举list.DefaultView.ViewFields来确认这一点)。

您的问题的解决方案只是将item.Title替换为item["LinkTitle"].ToString()

如果您重命名已存在的列,则可能会出现此问题。 尝试删除它并创建一个具有相同名称的新文件。

或者在我发生的另一种情况下,我不小心用希腊语写了一个列名的字母。 例如。 "IsCooperation" Ι 是一个希腊字符

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM