您好我正在使用SharePoint命名空间进行开发,当我尝试从列表项中检索标题字段时遇到以下错误。
价值不在预期范围内
我知道该字段存在是因为我打印了所有字段。
string value = (string)listItem[listItem.Fields["Title"].Id];
Console.WriteLine("Title = " + value);
更新:用于检索列表项的View在多大程度上可以在哪些字段中使用?此代码失败并出现相同的异常:
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属性都用于检索列表项。
答案 0 :(得分:5)
我不知道你的错误是否已经解决。但我遇到了同样的问题,我找到了问题的解决方案。
你必须去:
中央行政>应用程序管理>管理Web应用程序
选择正在使用的Web应用程序并选择:
“一般设置>资源限制“通过功能区。
在向下滚动并查找“List View Lookup Threshold
”时,默认值为8
会增加该值,直到错误消失。
答案 1 :(得分:1)
“标题”字段可能存在于列表中,但不存在于默认视图中。 你能做到吗?
foreach (var item in list.Items) Console.WriteLine((string)item["Title"]);
答案 2 :(得分:1)
我建议像
if (item.Fields.ContainsField("Last_x0020_Modified"))
{
if (query.ViewFields.Contains("Last_x0020_Modified"))
...
B / c如果在SPQuery.ViewFields中没有请求该字段,你可能无法得到它(例外包括Created字段,ID字段)
答案 3 :(得分:1)
我遇到了这个问题,因为该列不是默认视图的一部分。在创建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();
}
答案 4 :(得分:0)
我不知道为什么,但我从SPListItemCollection创建了一个GridView作为DataSource。我有同样的错误。但我试图从集合中获取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();
一切正常:)
答案 5 :(得分:0)
“标题”字段在默认视图中不是(默认情况下)。如果您查看了视图设置页面,则会选中“标题”,但会将其标记为“链接到带有编辑菜单的项目”。
视图公开的字段实际上名为“LinkTitle”(您可以通过枚举list.DefaultView.ViewFields
来确认。)
问题的解决方案只是将item.Title
替换为item["LinkTitle"].ToString()
。
答案 6 :(得分:0)
如果重命名已经存在的列,则可能会发生此问题。尝试删除它并创建一个同名的新对象。