我希望有人能帮我解决一个小谜团......
这段代码在生产环境中运行正常。问题发生在我的本地主机上 (我正在测试一个在发布到staging之前所做的更改)。 这个功能之前一直在工作,但是两天前突然停止了工作,我不知道为什么会这样。
(这是一个 .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'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);
我调用了 Trim() 函数来确保 organizationId 中没有不应该存在的空格。 Organziation.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;
。现在异常抛出在这行。我重新启动了我的机器,但是没有效果。