我有以下帮助方法返回字段中的值。
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包含字段的正确内部名称 如果我尝试使用项目[“字段的内部名称”]来访问该值,它仍然会抛出并且只有这一个字段的例外。
答案 0 :(得分:1)
你试过调试吗?你应该回答的问题(因为我们不能):
field
后,GetField()
是有效值还是null?field
不为空,field.InternalName
实际返回了什么?field.InternalName
返回有效值,您是否可以通过在索引器中对该值进行硬编码来访问它?即item["fieldInternalName"]
找到这些信息可能会帮助您自己解决问题,但如果没有将其添加到您的帖子中,那么社区就有更好的机会帮助您。
答案 1 :(得分:1)
有时会发生奇怪的事情,我们对这些问题没有合理的答案。尝试删除列表,然后从头开始再次创建列表。请勿尝试将其另存为模板,也不要尝试从该模板创建列表。
此类丑陋消息的一个可能原因是安全/权限不允许操纵该字段/列。
此类不需要/意外消息的另一个可能原因是,当第一次创建字段时,其数据类型不同,稍后将其更改为选择。从技术上讲,这样做应该没有问题,但有时我们会面临奇怪的行为。
答案 2 :(得分:0)
我经历了很多次。原因是如果您以非管理员帐户(系统帐户)身份登录,则查询列的用户的默认列表视图查找阈值为8。即对于默认视图,用户只能访问8个查找字段。如果您将列表限制更改为> 8,它将被解析。但增加这一点会降低性能。
转到中央管理员>>管理Web应用程序>>选择Web应用程序>>常规设置下拉菜单>>资源限制>>将“列表视图查找阈值”更改为8以上
谢谢, - 代表“Santosh”