簡體   English   中英

帶有SelectedIndex和Value的Listbox Bug?

[英]Listbox Bug with SelectedIndex and Value?

我想我在使用Listbox時發現了一個錯誤。 示例:帶有編輯按鈕的ListBox將其加載到特殊字段中:

列表框有4個項目:

  1. 電話號碼:+15454545(值2)(索引0)
  2. 電子郵件:Test@testmail.com(價值1)(索引1)
  3. FaxNumber:+1515515151(Value 3)(Index 2)
  4. 電子郵件:Test2@testmail.com(價值1)(索引3)

然后是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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM