Неожиданное ArgumentExecption при доступе к значению поля в SPListItem - PullRequest
0 голосов
/ 14 сентября 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;
        }

Однако для одного поля (обычное поле выбора) я получаю ArgumentExecption для этой строки

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

Я использую

SPListItem item = list.GetItemById(itemId);

Чтобы получить предмет.

Я не могу найти, почему я получаю исключение, когда проверяю, существует ли поле? Любые идеи о том, почему я получаю это исключение только для одной области.


Обновление.

При отладке

Вызов GetField () возвращает правильный объект поля. Field.InternalName содержит правильное внутреннее имя поля Если я пытаюсь получить доступ к значению, используя item [«внутреннее имя поля»], оно все равно выдает исключение только для этого одного поля.

Ответы [ 3 ]

1 голос
/ 16 сентября 2010

Иногда происходят странные вещи, и у нас нет логического ответа на эти вопросы. Попробуйте удалить список, а затем снова создать список с нуля. НЕ пытайтесь сохранить его как шаблон и НЕ пытайтесь создать список из этого шаблона.

Одной из возможных причин такого типа уродливых сообщений является то, что безопасность / разрешения не позволяют манипулировать этим полем / столбцом.

Другая возможная причина такого типа нежелательных / неожиданных сообщений заключается в том, что при первом создании поля его тип данных был другим, а затем он был изменен на выбор. Технически не должно быть никаких проблем, но иногда мы сталкиваемся со странным поведением.

1 голос
/ 15 сентября 2010

Вы пробовали отладку?Вопросы, на которые вы должны ответить (потому что мы не можем):

  • Является ли field действительным значением или пустым после вызова GetField()?
  • Если fieldне равно NULL, что на самом деле возвращает field.InternalName?
  • Если field.InternalName возвращает действительное значение, вы можете получить к нему доступ путем жесткого кодирования этого значения в индексаторе?то есть item["fieldInternalName"]

Обнаружение этой информации может помочь вам решить проблему самостоятельно, но если она не добавится в ваш пост, у сообщества будет больше шансов помочь вам.

0 голосов
/ 16 сентября 2010

Я пережил это много раз.Причина этого заключается в том, что если вы вошли в систему как учетная запись не администратора (системная учетная запись), то порог просмотра списка по умолчанию для пользователя равен 8 для столбцов поиска.то есть для просмотра по умолчанию пользователь может получить доступ только к 8 полям поиска.Если вы измените регулирование списка на> 8, оно будет разрешено.Но увеличение этого показателя приведет к снижению производительности.

Перейдите в Центр администрирования >> Управление веб-приложениями >> Выберите веб-приложение >> Раскрывающийся список общих настроек >> Регулирование ресурсов >> Измените «Порог просмотра списка» на болеечем 8

Спасибо, кодовое имя "Сантош"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...