【问题标题】:ListBox SelectedIndex always -1 in slectedindexchanged event handlerListBox SelectedIndex 在 slectedindexchanged 事件处理程序中始终为 -1
【发布时间】:2013-09-13 15:01:52
【问题描述】:

在示例代码中有两个列表框。在 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>

默认.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 以使其正常工作,但我真的很想知道我做错了什么。 -- 谢谢!

【问题讨论】:

    标签: c# asp.net webforms listbox


    【解决方案1】:

    您不能在每次页面加载时都对 ListBox2 进行数据绑定。试试:

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

    尝试详细了解 ASP.NET 页面生命周期。在回发时,由于视图状态,ListBox2 将具有正确的状态。

    您当前的代码会重置它。因此 -1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      • 2016-09-16
      相关资源
      最近更新 更多