Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表框错误与SelectedIndex和Value?_C#_Asp.net_Listbox - Fatal编程技术网

C# 列表框错误与SelectedIndex和Value?

C# 列表框错误与SelectedIndex和Value?,c#,asp.net,listbox,C#,Asp.net,Listbox,我想我在使用列表框时发现了一个bug。 示例:带有Editbutton的列表框,可将其加载到特殊字段中: 列表框有4项: 电话号码:+154545(值2)(索引0) 电邮:Test@testmail.com(值1)(指数1) 传真号码:+1515515151(值3)(索引2) 电邮:Test2@testmail.com(值1)(指数3) 然后编辑按钮编码: protected void EditKOFC(object sender, EventArgs e) { try

我想我在使用列表框时发现了一个bug。 示例:带有Editbutton的列表框,可将其加载到特殊字段中:

列表框有4项:

  • 电话号码:+154545(值2)(索引0)
  • 电邮:Test@testmail.com(值1)(指数1)
  • 传真号码:+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());
            }
        }
    
    这就是问题所在。 当我选择前三项时,一切正常。当我选择第四项时,它使用第二项中的所有数据,即使它们有不同的索引

    值是否会影响这里的索引?如果是,为什么?! 这对我来说确实是个问题,因为我需要将contacttype存储在值中。(1=电子邮件,2=电话等)

    谢谢大家准备好了

    编辑: 澄清:编辑按钮本身是列表框外的一个按钮

    <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>
    
    
    
    编辑2以获得更多澄清(或其他信息):

    这就是它的样子。 然后我想编辑第4项:

    当我调试时:

    未选择第四项。。。即使你在之前的照片中看到,它也是

    如果我看一下ListBoxKOFC本身:

    代码完成后,选择并加载了错误的项目进行编辑:

    但正如你在第四章中看到的。屏幕截图->我要编辑的项目的索引是三。 只有值是相同的。 但是为什么值不能相同,索引总是另一个


    值在这里用作索引吗?!(不可能,但atm我再也不确定了…)或者这个值刚刚被窃听了?

    我想我以前有过这个问题。事实证明,您无法将ListBox排序属性设置为true;否则索引将是无用的


    但这可能不是你的情况。

    是的。您的问题是有两个值相同的项。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>
    
    
    沃尔沃汽车
    萨博
    法令
    奥迪
    

    每个选项都应该具有唯一的值


    请记住,当回发发生时,ASP.Net引擎将创建页面的新实例,并应用请求中的视图状态。当它试图重新创建下拉控件时,它会搜索具有正确值的选项,并在找到一个选项时停止。

    首先,列表框中不应该有两个具有相同值的项。若必须具有重复值,则不能将值用作条件

    Asp.Net不将值work视为索引。使用值作为条件的代码是错误的(请参阅下文)

    解决方案: 您需要使用索引作为条件。请尝试以下代码:

    for (int i = 0; i < DropDownListKOFC.Items.Count; i++)
    {
        DropDownListKOFC.Items[i].Selected = false;
    
        if (i == ListBoxKOFC.SelectedIndex)
        {
          DropDownListKOFC.Items[i].Selected = true;
        }
    }
    
    for(int i=0;i
    感谢其他人帮助我理解这个问题! 我只想分享我的小作品,也许它会帮助别人

    加载当前值时,将随机值添加到当前值:

    Random rnd = new Random();
    int random = rnd.Next(1,1000000);
    
    然后将其与值相加:

    ListItem listitem = new ListItem(text, value + random.ToString(), true);
    ListBox.Items.Add(listitem);
    
    如果需要,只需使用子字符串:

    string value = ListBox.SelectedValue;
    value = value.Substring(0, 1);
    

    但是,只有在随机数前面的数字始终相同的情况下,这才有效。

    谢谢你的回答,但我根本没有设置排序属性。我将检查其默认值是否为true;)好的,在我的列表框中没有sortproperty,但是谢谢!哎呀。我以为你是指Windows窗体列表框控件。我也不明白你的问题。有一个ListBoxKOFC,但什么是DropDownListKOFC?您的代码中的问题在哪里?不,正如您在标记中看到的,它的asp.net:)我将进一步说明:D
    带有Editbutton的ListBox
    ?Ups,Editbutton本身是ListItem之外的一个按钮。我会更新这个问题。@DatRid:好的,但我是唯一一个不明白这个问题的人吗?你想达到什么目标<代码>列表框。SelectedValue返回第一个选定项的值。因此,如果选择“全部”,它将始终返回第一项的值。另一方面,
    DropDownList
    只有一个选择。因此,如果它包含相同的项目,也将选择第一个项目。我也不理解LiustBox项目中的索引和值的含义。@Tim Schmelter:我总是只选择一个项目,而不是更多@蒂姆·施梅尔特:嗯,我刚才写下了列表框是如何填充的。啊。。。这是可悲的。至少我能找到一个简单的工作。。。谢谢我记得当我尝试做类似的事情时,我也有同样的感觉
    string value = ListBox.SelectedValue;
    value = value.Substring(0, 1);