Подтвердить что ты не робот

Исключение NullReferenceException в DropDownList.Items.FindByValue()

Я надеюсь, что кто-то может помочь мне решить маленькую тайну....

Этот код находится в производстве и работает там. Проблема возникает на моем localhost (я тестирую изменение, которое я сделал до того, как я выйду на стадию). Это работало до 2 дней назад, и я понятия не имею, почему это самопроизвольно прекратило бы работать.

(Это приложение .NET 3.5 Web Forms)

У меня есть список "Организации", которые, возможно, сообщили об инциденте. Список заполняется из таблицы Organization в моей базе данных.

<asp:DropDownList ID="Organizations" runat="server" Width="205" AutoPostBack="True" DataTextField="Name" DataValueField="Id"></asp:DropDownList>

Здесь код для привязки списка:

Organizations.DataSource = _service.ListOrganizations()
        .Where(o => o.IsDeleted == false && o.ReportedBy == true)
        .OrderBy(o => o.Name);
Organizations.DataBind();
Organizations.Items.Insert(0, new ListItem("Please make a selection", "-1"));
// Find the "VICTIM...." items
ListItem victim = Organizations.Items.FindByText("VICTIM");
ListItem guardian = Organizations.Items.FindByText("VICTIM PARENT/GUARDIAN");
ListItem child = Organizations.Items.FindByText("VICTIM SON/DAUGHTER");
ListItem partner = Organizations.Items.FindByText("VICTIM SPOUSE/DOMESTIC PARTNER");
ListItem unknown = Organizations.Items.FindByText("UNKNOWN");
// Move the "VICTIM...." items to the top of the list, under the default item
Organizations.Items.Remove(victim);
Organizations.Items.Remove(child);
Organizations.Items.Remove(guardian);
Organizations.Items.Remove(partner);
Organizations.Items.Remove(unknown);
Organizations.Items.Insert(1, victim);
Organizations.Items.Insert(2, guardian);
Organizations.Items.Insert(3, child);
Organizations.Items.Insert(4, partner);
Organizations.Items.Insert(5, unknown);

Когда я нажимаю на значок "edit", чтобы просмотреть/отредактировать детали Case, и мое приложение пытается заполнить форму, я получаю исключение NullReferenceException, когда оно пытается установить список SelectedIndex в списке организаций.

Organizations.SelectedIndex = Organizations.Items.IndexOf(Organizations.Items.FindByValue(organizationId));

Если я установил точку останова в этой строке (выше), я могу расширить коллекцию Items и увидеть, что она содержит достоверные данные, и я даже могу найти ListItem, который соответствует организации, которую мы ищем. Однако, как только я нажму F10, вы получите исключение.

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

ListItem li = Organizations.Items.FindByValue(organizationId.Trim());
int idx = Organizations.Items.IndexOf(li);

Я назвал Trim() на organizationId на всякий случай, если бы не было никаких пробелов, которых не должно было быть. Organizations.Items.FindByValue(organizationId.Trim()); выдает исключение. Для меня это не имеет смысла. Если элемент находится в списке, почему он не найден?

Экранные снимки

Breakpoint: view organizationId

Здесь вы можете увидеть ListItem, который мы пытаемся выбрать. Он существует в коллекции Items.

Breakpoint: view ListItem in Items collection, it does exist

Я подумал, что, возможно, это происходит только для одного случая, но это не так. Я попытался отредактировать несколько случаев, и то же самое происходит, когда заполняется форма, независимо от того, какой случай я пытался отредактировать.

Все советы/идеи приветствуются. Заранее благодарю вас за любую помощь.

редактирует

(1) "Вы можете точно указать, какое исключение выбрано?"... Вот подробное описание исключения The exception detail

(2) Свойство или индексатор 'System.Web.UI.WebControls.ListControl.SelectedItem' не может быть назначен - он доступен только для чтения

Organizations.SelectedItem = Organizations.Items.FindByValue(organizationId);

(3) Я получаю тот же результат, если я модифицирую код до этого (ниже)... он генерирует то же исключение

ListItem li = Organizations.Items.FindByValue(organizationId);

(4) "Вы пытались разобрать его на int, вы пытались проверить его длину?" organizationId

(5) Здесь соответствует ListItem ListItem

(6) Просто изменил код на Organizations.Items.FindByValue(organizationId).Selected = true; Исключение выбрано на этой строке. Я перезагрузил свою машину только для хихиканья, которая также не имела никакого эффекта.

4b9b3361

Ответ 1

Хорошо, потратив полтора дня на погоню за моим хвостом... вот резолюция...

Я знал, что это станет чем-то глупым...

Итак, я достиг определенного уровня отчаяния, что привело меня к тому, что я начал осматривать 87 ListItems в коллекции Items по отдельности. Два из ListItems были null (??), так что объясняет NullReferenceException, который казался таким неуместным здесь. Как только я сделал изменение, чтобы удалить элементы null из списка, исходный код снова работал.

Organizations.SelectedIndex = Organizations.Items.IndexOf(Organizations.Items.FindByValue(organizationId));

Спасибо всем, кто нашел время, чтобы помочь мне устранить эту проблему!