Я надеюсь, что кто-то может помочь мне решить маленькую тайну....
Этот код находится в производстве и работает там. Проблема возникает на моем 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()); выдает исключение. Для меня это не имеет смысла. Если элемент находится в списке, почему он не найден?
Экранные снимки
Здесь вы можете увидеть ListItem, который мы пытаемся выбрать. Он существует в коллекции Items.
Я подумал, что, возможно, это происходит только для одного случая, но это не так. Я попытался отредактировать несколько случаев, и то же самое происходит, когда заполняется форма, независимо от того, какой случай я пытался отредактировать.
Все советы/идеи приветствуются. Заранее благодарю вас за любую помощь.
редактирует
(1) "Вы можете точно указать, какое исключение выбрано?"... Вот подробное описание исключения
(2) Свойство или индексатор 'System.Web.UI.WebControls.ListControl.SelectedItem' не может быть назначен - он доступен только для чтения
Organizations.SelectedItem = Organizations.Items.FindByValue(organizationId);
(3) Я получаю тот же результат, если я модифицирую код до этого (ниже)... он генерирует то же исключение
ListItem li = Organizations.Items.FindByValue(organizationId);
(4) "Вы пытались разобрать его на int, вы пытались проверить его длину?"
(5) Здесь соответствует ListItem
(6) Просто изменил код на Organizations.Items.FindByValue(organizationId).Selected = true;
Исключение выбрано на этой строке. Я перезагрузил свою машину только для хихиканья, которая также не имела никакого эффекта.