SharePoint列表项错误:"值不在预期范围内"

7

你好,我正在使用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属性来检索列表项。
8个回答

5
我不知道你的错误是否已经解决。但我曾遇到同样的问题,并找到了解决方案。
你需要前往以下位置:
中央管理 > 应用程序管理 > 管理 Web 应用程序
选择正在使用的 Web 应用程序并选择:
通过 Ribbon 选择“常规设置 > 资源限制”。
在那里向下滚动并查找“列表视图查找阈值”,默认情况下值为 8,请将其增加到消除错误为止。
参考链接:Reference Link

1
我曾经遇到过这个问题。我已经验证了我的字段名称是正确的。此外,微软似乎已将其默认值从8更改为12。在我的开发环境中,我有12个,但在出现问题的暂存环境中只有8个。我必须在IIS中重置应用程序池以使设置更改生效。 - Joe Rattz

2

我遇到了这个问题,因为该列不是默认视图的一部分。在创建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();
     }

1
我建议使用类似于以下的代码:
if (item.Fields.ContainsField("Last_x0020_Modified"))
{
    if (query.ViewFields.Contains("Last_x0020_Modified"))
    ...

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


1

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

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

任何对 item["Title"] 的引用尝试都会抛出该异常。 - Ries
我遇到了相同的问题。 - Shyam sundar shah

0

我不知道为什么,但我从 SPListItemCollection 创建了一个 GridView 作为 DataSource。我遇到了同样的错误。但我尝试从 collection 中获取 dataTable:

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();

一切都运行良好 :)


0
我正在使用CamlQuery,并根据特定的代码值进行条件过滤,以使用或子句。问题是,我的条件设置为或,这样计算是不正确的,因此它不是一个有效的比较运算符,会抛出此类错误。
解决方案当然是使用正确的运算符进行比较。

0

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

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

解决您的问题的方法很简单,只需将item.Title替换为item["LinkTitle"].ToString()即可。


0

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

或者在我遇到的另一种情况下,我不小心用希腊字母写了列名中的一个字母!例如,“ΙsCooperation”,其中“Ι”是希腊字符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接