DropDownList.Items.FindByValue()上的NullReferenceException

CDR*_*R12 11 c# asp.net nullreferenceexception

我希望有人可以帮我解决一个小小的谜团......

此代码正在生产中,并在那里工作.问题出现在我的localhost上(我正在测试我在发布到staging之前所做的更改). 这工作到2天前,我不知道它为什么会自发地停止工作.

(这是一个.NET 3.5 Web窗体应用程序)

我有一份可能已报告事件的"组织"列表.该列表从我的数据库中的Organization表填充.

<asp:DropDownList ID="Organizations" runat="server" Width="205" AutoPostBack="True" DataTextField="Name" DataValueField="Id"></asp:DropDownList>
Run Code Online (Sandbox Code Playgroud)

这是绑定列表的代码:

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'S PARENT/GUARDIAN");
ListItem child = Organizations.Items.FindByText("VICTIM'S SON/DAUGHTER");
ListItem partner = Organizations.Items.FindByText("VICTIM'S 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);
Run Code Online (Sandbox Code Playgroud)

当我单击"编辑"图标查看/编辑案例的详细信息并且我的应用程序尝试填充表单时,我在尝试设置"组织"列表的SelectedIndex时会收到NullReferenceException.

Organizations.SelectedIndex = Organizations.Items.IndexOf(Organizations.Items.FindByValue(organizationId));
Run Code Online (Sandbox Code Playgroud)

如果我在这一行设置一个断点(上图),我可以扩展Items集合并看到它确实包含有效数据,我甚至可以找到与我们正在寻找的organizationId匹配的ListItem.但是,一旦我点击F10,就会抛出异常.

我更多地打破了这一行,以确定哪个部分抛出异常.

ListItem li = Organizations.Items.FindByValue(organizationId.Trim());
int idx = Organizations.Items.IndexOf(li);
Run Code Online (Sandbox Code Playgroud)

我在组织上调用了Trim(),以防有任何不应该存在的空格.Organizations.Items.FindByValue(organizationId.Trim()); 抛出异常.这对我来说毫无意义.如果该项目在列表中,为什么找不到?

屏幕截图

断点:查看organizationId

在这里,您可以看到我们正在尝试选择的ListItem.它确实存在于Items集合中.

断点:查看Items集合中的ListItem,它确实存在

我想也许只有一个案例发生了,但事实并非如此.我试图编辑多个案例,并且在填充表单时会发生同样的事情,无论我尝试编辑哪个案例.

欢迎所有建议/想法.提前感谢您的任何帮助.

EDITS

(1)"你能确切地说出抛出了哪个异常吗?" ......这是一个例外细节 异常细节

(2)属性或索引器'System.Web.UI.WebControls.ListControl.SelectedItem'无法分配 - 它是只读的

Organizations.SelectedItem = Organizations.Items.FindByValue(organizationId);
Run Code Online (Sandbox Code Playgroud)

(3)如果我将代码修改为(下面),我得到相同的结果......它抛出相同的异常

ListItem li = Organizations.Items.FindByValue(organizationId);
Run Code Online (Sandbox Code Playgroud)

(4)"你试图将它解析为int吗?你试着检查它的长度吗?" organizationId

(5)这是匹配的ListItem 项目清单

(6)刚刚将代码修改为Organizations.Items.FindByValue(organizationId).Selected = true; 现在在该行上抛出异常.我重启我的机器只是为了咯咯笑,这也没有效果.

CDR*_*R12 6

好吧,浪费了一天半的时间来追逐我的尾巴...这是决议......

我知道它最终会变得愚蠢......

于是我绝望达到了一定程度,导致我开始检查87 ListItemsItems单独收集.其中两个ListItemsnull(??)所以这解释了NullReferenceException在这里看起来如此不合适.一旦我做了更改以null从列表中删除项目,原始代码再次工作.

Organizations.SelectedIndex = Organizations.Items.IndexOf(Organizations.Items.FindByValue(organizationId));
Run Code Online (Sandbox Code Playgroud)

感谢所有花时间帮我排除故障的人!