Listbox の使用にバグを見つけたと思います。例: 特別なフィールドにロードする Editbutton のある ListBox:
リストボックスには 4 つの項目があります。
- 電話番号: +15454545 (値 2)(インデックス 0)
- 電子メール: Test@testmail.com (値 1)(インデックス 1)
- FaxNumber: +1515515151 (値 3)(インデックス 2)
- 電子メール: Test2@testmail.com (値 1)(インデックス 3)
次に、編集ボタンのコード:
protected void EditKOFC(object sender, EventArgs e)
{
try
{
if (ListBoxKOFC.SelectedItem == null)
{
LabelMPE.Text = "Please select first!";
ModalPopupExtender1.Show();
}
else
{
string value = ListBoxKOFC.SelectedValue;
Session["EditID"] = ListBoxKOFC.SelectedIndex;
string[] meineStrings = ListBoxKOFC.SelectedItem.Text.Split(new Char[] { ':' });
string text = meineStrings[1];
string text2 = text.Substring(1);
TextBoxKOFC.Text = text2;
foreach (ListItem item in DropDownListKOFC.Items)
{
item.Selected = false;
if (item.Value == value)
{
item.Selected = true;
}
}
editing = true;
AddKOFC.Text = "Save";
}
}
catch (Exception ex)
{
GlobalFunctions.Error_Log(ex, ex.TargetSite.ToString());
}
}
そして、問題が発生しました。最初の 3 つの項目を選択すると、問題ありません。4 番目の項目を選択すると、インデックスが異なっていても、2 番目の項目のすべてのデータが使用されます。
Value はここで Index に影響を与えますか? はいの場合、その理由は?! 値に連絡先タイプを保存する必要があるため、それは私にとって本当に問題です。(1=メール、2=電話など);
もうありがとう!
編集: 明確にするために: Edit-Button は、ListBox の外にある Button 自体です。
<asp:TableRow>
<asp:TableCell>
<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="UpdatePanel2">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="AddKOFC" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:DropDownList runat="server" ID="DropDownListKOFC" />
</ContentTemplate>
</asp:UpdatePanel>
</asp:TableCell>
<asp:TableCell>
<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="UpdatePanel1">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="AddKOFC" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:TextBox runat="server" ID="TextBoxKOFC" />
</ContentTemplate>
</asp:UpdatePanel>
</asp:TableCell><asp:TableCell>
<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="UP2">
<ContentTemplate>
<asp:Button runat="server" ID="AddKOFC" OnClick="AddContactInformation" Text="Add Contactinformation" />
<asp:HiddenField ID="HFAdd" runat="server" />
<ajaxToolkit:ModalPopupExtender ID="ModalPopupExtender1" runat="server" BackgroundCssClass="modalBackground"
TargetControlID="HFAdd" PopupControlID="PanelChoose" BehaviorID="MPEchoose">
</ajaxToolkit:ModalPopupExtender>
<asp:Panel ID="PanelChoose" runat="server" BorderStyle="Solid" BackColor="ButtonShadow">
<asp:Label ID="LabelMPE" runat="server"></asp:Label>
<asp:Table ID="Table3" runat="server">
<asp:TableRow>
<asp:TableCell>
<asp:Button ID="ButtonOK" runat="server" Text="Ok" />
</asp:TableCell>
</asp:TableRow>
</asp:Table>
</asp:Panel>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="AddKOFC" EventName="Click" />
<asp:AsyncPostBackTrigger ControlID="ButtonOK" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
</asp:TableCell></asp:TableRow>
<asp:TableRow>
<asp:TableCell>
<asp:Label ID="Label13" runat="server"></asp:Label>
</asp:TableCell></asp:TableRow>
<asp:TableRow>
<asp:TableCell>
<asp:UpdatePanel runat="server" UpdateMode="Conditional" ID="UP3">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="AddKOFC" EventName="Click" />
</Triggers>
<ContentTemplate>
<asp:ListBox runat="server" ID="ListBoxKOFC" ToolTip="The way to contact this person">
</asp:ListBox>
</ContentTemplate>
</asp:UpdatePanel>
</asp:TableCell><asp:TableCell>
<asp:Button ID="ButtonUpdate" runat="server" Text="Edit" OnClick="EditKOFC" />
</asp:TableCell><asp:TableCell>
<asp:Button ID="ButtonDelete" runat="server" Text="Delete" OnClick="DeleteKOFC" />
</asp:TableCell></asp:TableRow>
<asp:TableRow>
より明確にするためにEdit2(または何でも):
これがその外観です。次に、4番目のアイテムを編集したい:
そして、私がデバッグするとき:
4番目のアイテムは選択されていません...前の写真で見ても、そうです!!
ListBoxKOFC 自体を見ると、次のようになります。
コードが完了すると、間違ったアイテムが選択され、編集のためにロードされました。
しかし、4. スクリーンショットでわかるように -> 編集したい項目のインデックスは 3 です。値のみが同じです。しかし、なぜ値を同じにすることができないのですか。インデックスは常に別のものです...
Value はここで Index として機能しますか?! (できませんが、atm にはもうわかりません...) それとも、値が盗まれただけですか?