1

サンプル コードには 2 つのリストボックスがあります。ListBox1 では、項目は Default.aspx で定義されています。ListBox2 では、コードファイルで定義されています。ListBox1 は期待どおりに動作し、項目が選択されるたびにテキスト ボックスが更新されます。ListBox2 がイベントをトリガーするとき、selectedindex は常に -1 です。

デフォルト.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ListBox ID="ListBox1" runat="server" OnSelectedIndexChanged="lb1_OnSelectedIndexChanged"     AutoPostBack="true">
            <asp:ListItem>a</asp:ListItem>
            <asp:ListItem>b</asp:ListItem>
        </asp:ListBox>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:ListBox ID="ListBox2" runat="server" OnSelectedIndexChanged="lb1_OnSelectedIndexChanged" AutoPostBack="true">
        </asp:ListBox>
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
    </div>
    </form>
</body>
</html>

Default.aspx.cs:

using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        List<string> ab = new List<string>();
        ab.Add("a");
        ab.Add("b");
        ListBox2.DataSource = ab;
        ListBox2.DataBind();

        ListBox1.SelectedIndexChanged += new EventHandler(lb1_OnSelectedIndexChanged);
        ListBox2.SelectedIndexChanged += new EventHandler(lb2_OnSelectedIndexChanged);
    }

    protected void lb1_OnSelectedIndexChanged(object sender, EventArgs e)
    {
        if (ListBox1.SelectedIndex != -1)
        {
            TextBox1.Text = ListBox1.SelectedItem.Text;
        }
    }

    protected void lb2_OnSelectedIndexChanged(object sender, EventArgs e)
    {
        if (ListBox2.SelectedIndex != -1)
        {
            TextBox2.Text = ListBox2.SelectedItem.Text;
        }
    }
}

アイテムのリストは Default.aspx に移動して機能させましたが、これで何が間違っているのか知りたいです。 - ありがとう!

4

1 に答える 1

0

ページの読み込みごとに ListBox2 をデータバインドすることはできません。試す:

Page_Load()...
{
   if(!IsPostBack)
   {
       //databind listbox2
   }
}

ASP.NET ページのライフサイクルを少し読んでみてください。ポストバックでは、ListBox2 はビューステートにより正しい状態になります。

現在のコードはそれをリセットします。したがって、-1 です。

于 2013-09-13T15:12:08.727 に答える