11

どなたか少しでも謎を解いて頂ければ幸いです…。

このコードは本番環境にあり、そこで機能しています。この問題はローカルホストで発生しています (ステージングにリリースする前に行った変更をテストしています)。 これは2日前まで機能していましたが、なぜ自然に機能しなくなるのかわかりません。

(これは .NET 3.5 Web フォーム アプリです)

インシデントを報告した可能性のある「組織」のリストがあります。このリストは、データベースの 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);

そこにあってはならない空白がある場合に備えて、organizationId で Trim() を呼び出しました。Organizations.Items.FindByValue(organizationId.Trim()); 例外をスローします。これは私には意味がありません。項目がリストにある場合、なぜ見つからないのですか?

スクリーンショット

ブレークポイント: 組織 ID の表示

ここでは、選択しようとしている ListItem を確認できます。それは Items コレクションに存在します。

ブレークポイント: Items コレクションの ListItem を表示します。存在します

1つのケースだけで起こっているのではないかと思っていましたが、そうではありません。複数のケースを編集しようとしましたが、どのケースを編集しようとしても、フォームに入力すると同じことが起こります。

すべてのアドバイス/アイデアを歓迎します。よろしくお願いいたします。

編集

(1) 「どの例外がスローされたか正確にわかりますか?」...ここに例外の詳細があります 例外の詳細

(2) プロパティまたはインデクサー 'System.Web.UI.WebControls.ListControl.SelectedItem' を割り当てることはできません -- 読み取り専用です

Organizations.SelectedItem = Organizations.Items.FindByValue(organizationId);

(3) コードをこれ (以下) に変更すると、同じ結果が得られます...同じ例外がスローされます

ListItem li = Organizations.Items.FindByValue(organizationId);

(4) 「int に解析しようとしましたか? 長さをチェックしようとしましたか?」 組織ID

(5) 一致する ListItem は次のとおりです。 ListItem

(6) コードを変更して、Organizations.Items.FindByValue(organizationId).Selected = true; その行で例外がスローされるようになりました。笑いのためだけにマシンを再起動しましたが、それも効果がありませんでした。

4

1 に答える 1

6

わかりました、これで私の尻尾を追いかけて1日半を無駄にした後...これが解決策です...

私はそれが愚かなものになることを知っていました...

それで私はあるレベルの絶望に達し、コレクションの 87ListItemsを個別に調べ始めました。Itemsそのうちの 2 つListItemsnull(??)NullReferenceExceptionだったので、ここでは場違いに見えました。nullリストからアイテムを削除するように変更すると、元のコードが再び機能しました。

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

この問題のトラブルシューティングを手伝ってくれたすべての人に感謝します!

于 2013-11-14T21:01:52.753 に答える