[英]Listbox Bug with SelectedIndex and Value?
我想我在使用Listbox時發現了一個錯誤。 示例:帶有編輯按鈕的ListBox將其加載到特殊字段中:
列表框有4個項目:
然后是editbuttoncode:
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());
}
}
在那里我得到了問題。 當我選擇前三項時,一切都很好。 當我選擇第4項時,它會使用第二項中的所有數據,即使它們具有不同的索引!
價值是否會影響指數,如果是,為什么?! 它對我來說真的是一個問題,因為我需要在值中存儲contacttype。 (1 =電子郵件,2 =電話等);
全部謝謝!
編輯:澄清:編輯按鈕是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.屏幕截圖中看到的那樣 - >我要編輯的項目的索引是三個。 只有價值是一樣的。 但為什么價值不一樣,指數又是另一個......
這里的價值作為指數嗎?! (不可以,但我現在還不確定......)或者價值只是被竊聽?
是的。 您的問題是有兩個具有相同值的項目。 ASP.Net下拉列表作為標准HTML選擇控件呈現給瀏覽器,格式如下:
<select name="cars">
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="fiat">Fiat</option>
<option value="audi">Audi</option>
</select>
http://www.w3schools.com/html/tryit.asp?filename=tryhtml_select2
每個選項都應該具有唯一值。
請記住,當回發發生時,ASP.Net引擎會創建頁面的新實例並應用請求中帶來的視圖狀態。 當它嘗試重新創建下拉控件時,它會搜索具有正確值的選項,並在找到時停止。
我想我曾經遇到過這個問題。 事實證明,您無法將ListBox排序屬性設置為true; 否則索引將毫無用處。
但這可能不是你的情況。
首先,您不應該在列表框中有2個具有相同值的項目。 如果必須具有重復值,則不能將value用作條件。
Asp .Net不會將Value工作視為索引。 您的代碼使用值作為錯誤的條件(參見下文)。
if (item.Value == value)
{
item.Selected = true;
}
解決方案:您需要使用索引作為條件。 試試以下代碼:
for (int i = 0; i < DropDownListKOFC.Items.Count; i++)
{
DropDownListKOFC.Items[i].Selected = false;
if (i == ListBoxKOFC.SelectedIndex)
{
DropDownListKOFC.Items[i].Selected = true;
}
}
感謝其他人幫助我理解這個問題! 我將分享我的小工作,也許它會幫助別人!
在加載時將隨機值添加到當前值:
Random rnd = new Random();
int random = rnd.Next(1,1000000);
然后使用值將其添加到togheter:
ListItem listitem = new ListItem(text, value + random.ToString(), true);
ListBox.Items.Add(listitem);
如果你需要它,只需使用substring:
string value = ListBox.SelectedValue;
value = value.Substring(0, 1);
但是,只有當你總是在隨機數量前面有相同數量的數字時,這才有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.