4

Listbox の使用にバグを見つけたと思います。例: 特別なフィールドにロードする Editbutton のある ListBox:

リストボックスには 4 つの項目があります。

  1. 電話番号: +15454545 (値 2)(インデックス 0)
  2. 電子メール: Test@testmail.com (値 1)(インデックス 1)
  3. FaxNumber: +1515515151 (値 3)(インデックス 2)
  4. 電子メール: 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 にはもうわかりません...) それとも、値が盗まれただけですか?

4

4 に答える 4

2

うん。あなたの問題は、同じ値を持つ2つのアイテムを持っていることです. 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 エンジンはページの新しいインスタンスを作成し、要求で受け取ったビュー ステートを適用することに注意してください。ドロップダウン コントロールを再作成しようとすると、正しい値のオプションが検索され、見つかった時点で停止します。

于 2013-08-27T07:07:24.690 に答える
1

私はかつてこの問題を抱えていたと思います。ListBox の sort プロパティを true に設定できないことが判明しました。そうしないと、インデックスは役に立たなくなります。

しかし、これはあなたの場合ではないかもしれません。

于 2013-08-22T09:37:39.307 に答える
0

まず第一に、リスト ボックスに同じ値を持つ 2 つの項目があってはなりません。重複する値が必要な場合は、値を条件として使用できません。

Asp .Net は値の作業をインデックスとして扱いません。間違っている条件として値を使用するのはあなたのコードです(以下を参照)。

if (item.Value == value)
{
    item.Selected = true;
}

解決策: index を条件として使用する必要があります。以下のコードを試してください:

for (int i = 0; i < DropDownListKOFC.Items.Count; i++)
{
    DropDownListKOFC.Items[i].Selected = false;

    if (i == ListBoxKOFC.SelectedIndex)
    {
      DropDownListKOFC.Items[i].Selected = true;
    }
}
于 2013-08-27T07:31:13.750 に答える
0

問題を理解するのを手伝ってくれた他の人に感謝します!私は私の小さな回避策を共有します。多分それは誰かを助けるでしょう!

ロード中に現在の値にランダムな値を追加します。

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);

ただし、これは、ランダムの前に常に同じ数の数字がある場合にのみ機能します。

于 2013-08-29T07:43:25.460 に答える