gpt4 book ai didi

c# - DropDownList.Items.FindByValue() 上的 NullReferenceException

转载 作者:可可西里 更新时间:2023-11-01 08:47:26 28 4
gpt4 key购买 nike

希望有人能帮我解开一个小谜团....

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

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

我有一个可能已经报告事件的“组织”列表。该列表是从我的数据库中的组织表中填充的。

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

这是绑定(bind)列表的代码:

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());抛出异常。这对我来说毫无意义。如果该项目在列表中,为什么找不到?

屏幕截图

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;现在在该行上抛出异常。我只是为了咯咯笑而重新启动我的机器,这也没有任何效果。

最佳答案

好吧,在浪费了一天半的时间之后...这是解决方案...

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

因此,我达到了一定程度的绝望,导致我开始分别检查 Items 集合中的 87 个 ListItemsListItems 中的两个是 null(??),所以这解释了在这里看起来很不合适的 NullReferenceException。一旦我做出更改以从列表中删除 null 项目,原始代码就会再次运行。

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

感谢所有花时间帮助我解决此问题的人!

关于c# - DropDownList.Items.FindByValue() 上的 NullReferenceException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19985089/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com