この問題に関する質問がここに投稿されたのはこれが初めてではないことは承知していますが、私の質問に対する回答を見つけることができませんでした。
ページにいくつかの ListBoxes があります。
<tr>
<td class="loqhArea2Area">
<asp:ListBox ID="ListBox1Val1" class="InputItem" runat="server" AutoPostBack="true"></asp:ListBox>
</td>
<td class="loqhArea3Area">
<asp:ListBox ID="ListBox2Val1" class="InputItem" runat="server" AutoPostBack="true"></asp:ListBox>
</td>
<td class="loqhArea4Area">
<asp:ListBox ID="ListBox3Val1" class="InputItem" runat="server"></asp:ListBox>
</td>
</tr>
これらのボックスはある意味で相互にリンクされており、最初のボックスの選択が 2 番目のボックスに入力され、4 番目のボックスに入力されます。それらから情報を取得するために、次のコード スニペットを使用します。
protected override void OnInit(EventArgs e)
{
// Do some other stuff ...
if (!IsPostBack)
{
// Fill the boxes on initial load
}
else
{
// INeedTheData takes an ID-string (in this case "Val1")
// and the selected indexes as ints
INeedTheData("Val1",
ListBox1Val1.SelectedIndex,
ListBox2Val1.SelectedIndex,
ListBox3Val1.SelectedIndex);
}
// Some error handling
}
問題は、SelectedIndexes がすべて を返す-1
ことです。これは明らかに私が必要としているものではありません。
私はこの問題の解決策を求めて狂ったようにグーグルで検索してきました。すべての手がかりやリードは大歓迎です。前もって感謝します!
更新: おそらくこれは誰にとっても手がかりになる可能性があります.私の前任者(残念ながら連絡が取れていません)は、実際に機能するこのかなり奇妙なコードを実装しました. というか作品っぽい。問題は、ある種のより信頼性の高いコードが必要だったので、書き直すことにしました。
INeedTheData("Val1"
, Request.Form.AllKeys.Contains("ctl01$ListBox1Val1") ? Request.Form["ctl01$ListBox1Val1"] == string.Empty ? 0 : int.Parse(Request.Form["ctl01$ListBox1Val1"]) : 0
, Request.Form.AllKeys.Contains("ctl01$ListBox2Val1") ? Request.Form["ctl01$ListBox2Val1"] == string.Empty ? 0 : int.Parse(Request.Form["ctl01$ListBox2Val1"]) : 0
, Request.Form.AllKeys.Contains("ctl01$ListBox3Val1") ? Request.Form["ctl01$ListBox3Val1"] == string.Empty ? 0 : int.Parse(Request.Form["ctl01$ListBox3Val1"]) : 0);
このソリューションは、ハードコードされた html ID を使用してデータを取得するため、望ましくありません。これは、将来ページ上の要素を再構築および再編成するときに変更される可能性があります。とにかく、書き直す理由があるので、ここに入力する必要があると思いました。
前述のとおり、すべてのコメントを歓迎します。ありがとう!
更新 ii (@Deeptechtons への回答): 望ましい動作
ツリー グラフから移動して選択するために使用される 3 つの ListBoxes のグループがあります。最初のボックス ( ListBox1Val1
) は、データベースから直接入力されます。2 番目 ( ListBox2Val1
) は、ユーザーが最初の選択肢を選択するまで空です。そうすることで、最初のリストボックスで選択されたノードの子が 2 番目のリストボックスにロードされます。リストボックス番号 3 ( ) についても同じことが言えListBox3Val1
ます。2 番目のボックスでノードを選択すると、3 番目のボックスにデータが入力されます。