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

问题描述 投票:0回答:8

您好,我正在使用 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 属性都用于检索列表项。

c# sharepoint sharepoint-2007
8个回答
5
投票

不知道你的错误是否解决了。但我面临着同样的问题,并且找到了问题的解决方案。

你必须去:
管理中心 > 应用程序管理 > 管理 Web 应用程序
选择正在使用的 Web 应用程序并选择:
通过功能区“常规设置 > 资源限制”。

向下滚动并查找“

List View Lookup Threshold
”,默认值为
8
增加值直到错误消失。

参考链接


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
投票

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

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

1
投票

我建议类似的东西

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

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


0
投票

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

视图暴露的字段实际上被命名为“LinkTitle”(您可以通过枚举

list.DefaultView.ViewFields
来确认这一点)。

问题的解决方案只需将

item.Title
替换为
item["LinkTitle"].ToString()


0
投票

我不知道为什么,但我从 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();

一切正常:)


0
投票

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

或者在我遇到的另一个例子中,我不小心用希腊语写了一个列名字母!例如。 “Is合作”我是一个希腊角色


0
投票

我正在使用

CamlQuery
并根据某些代码值进行条件过滤以使用
<Eq>
<Contains>
子句。问题是,我的条件是设置
<true>
<false>
,它的计算不正确,因此它不是一个有效的比较运算符,它抛出了这样的错误。

解决方案当然是使用正确的运算符进行比较。

© www.soinside.com 2019 - 2024. All rights reserved.