我希望有人可以帮助我解决一个小谜团......
此代码正在生产中,并在那里工作。问题发生在我的本地主机上(我正在测试我在发布到登台之前所做的更改)。 这一直工作到 2 天前,我不知道为什么它会自发停止工作。
(这是一个 .NET 3.5 Web 窗体应用程序)
我有一份可能报告过事件的“组织”列表。该列表是从我的数据库中的组织表中填充的。
<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'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);
当我单击“编辑”图标以查看/编辑案例的详细信息并且我的应用程序尝试填充表单时,当它尝试设置组织列表的 SelectedIndex 时,我得到了 NullReferenceException。
Organizations.SelectedIndex = Organizations.Items.IndexOf(Organizations.Items.FindByValue(organizationId));
如果我在这一行(上图)设置断点,我可以展开 Items 集合并查看它确实包含有效数据,我什至可以找到与我们正在寻找的 organizationId 匹配的 ListItem。但是,一旦我按下 F10,就会引发异常。
我将这条线进一步分解以查明哪个部分引发了异常。
ListItem li = Organizations.Items.FindByValue(organizationId.Trim());
int idx = Organizations.Items.IndexOf(li);
我在 organizationId 上调用了 Trim() 以防万一有任何不应该存在的空白。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;
The exception is throw on that line now。我只是为了傻笑而重新启动了我的机器,这也没有任何效果。