访问SPListItem中的字段值时出现意外的参数异常

时间:2010-09-14 15:53:07

标签: sharepoint sharepoint-2010

我有以下帮助方法返回字段中的值。

public static string GetValueFrom(SPListItem item, string fieldName)
        {
            string value = string.Empty;
            if (item.Fields.ContainsField(fieldName))
            {
                SPField field = item.Fields.GetField(fieldName);

                if (item[field.InternalName] != null)
                {
                    value = item[field.InternalName].ToString();
                }
            }
            return value;
        }

但是对于一个Field(正常的选择字段),我在这行上得到一个ArgumentExecption

if (item[field.InternalName] != null)

我正在使用

SPListItem item = list.GetItemById(itemId);

获取物品。

当我检查该字段是否存在时,我无法找到为什么我得到异常? 关于为什么我只为一个字段获取此异常的任何想法。


更新

调试时

对GetField()的调用返回正确的字段对象。 Field.InternalName包含字段的正确内部名称 如果我尝试使用项目[“字段的内部名称”]来访问该值,它仍然会抛出并且只有这一个字段的例外。

3 个答案:

答案 0 :(得分:1)

你试过调试吗?你应该回答的问题(因为我们不能):

  • 调用field后,GetField()是有效值还是null?
  • 如果field不为空,field.InternalName实际返回了什么?
  • 如果field.InternalName返回有效值,您是否可以通过在索引器中对该值进行硬编码来访问它?即item["fieldInternalName"]

找到这些信息可能会帮助您自己解决问题,但如果没有将其添加到您的帖子中,那么社区就有更好的机会帮助您。

答案 1 :(得分:1)

有时会发生奇怪的事情,我们对这些问题没有合理的答案。尝试删除列表,然后从头开始再次创建列表。请勿尝试将其另存为模板,也不要尝试从该模板创建列表。

此类丑陋消息的一个可能原因是安全/权限不允许操纵该字段/列。

此类不需要/意​​外消息的另一个可能原因是,当第一次创建字段时,其数据类型不同,稍后将其更改为选择。从技术上讲,这样做应该没有问题,但有时我们会面临奇怪的行为。

答案 2 :(得分:0)

我经历了很多次。原因是如果您以非管理员帐户(系统帐户)身份登录,则查询列的用户的默认列表视图查找阈值为8。即对于默认视图,用户只能访问8个查找字段。如果您将列表限制更改为> 8,它将被解析。但增加这一点会降低性能。

转到中央管理员>>管理Web应用程序>>选择Web应用程序>>常规设置下拉菜单>>资源限制>>将“列表视图查找阈值”更改为8以上

谢谢, - 代表“Santosh”