非常奇怪的,今天在使用VS2005时,新建一个my.aspx页,然后在上面拖入listBox和button这两个东东后,在后台加这样的代码:    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            for (int i = 0; i < 10; i++)//生成10个值
                ListBox1.Items.Add(new ListItem("a" + i.ToString(), "a"));
        }    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Response.Write(ListBox1 .SelectedIndex);//显示选中索引值    
     }不管我选中的是第八项,还是第九,还是其它,其测试结果却一直为:0。
而当我把Page_load的代码删除,在.aspx页手动加上10个选项的却可以。所以想问下,以上问题如何解决?
感谢!

解决方案 »

  1.   

    这句代码有问题:ListBox1.Items.Add(new ListItem("a" + i.ToString(), "a"));
    换成ListBox1.Items.Add("a" + i.ToString());就可以了asp.net是多线程的,简单的说就是在一个事件中改变一个全局变量的值,在另一个事件中,是无法直接获得改变后的值的.两个线程间是相互独立的...
      

  2.   

    ListBox1.Items.Add("a" + i.ToString());
      

  3.   

    protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                for (int i = 0; i < 10; i++)//生成10个值
                { 
                    ListBox1.Items.Add(new ListItem("a" + i.ToString()));
                    ListBox1.Items[i].Value = "a" + i.ToString();
                   
                }
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            Response.Write("text"+ListBox1.SelectedItem.Text+"Value:"+this.ListBox1.SelectedValue);//显示选中文本和索引值
        }
      

  4.   

    ListBox1.Items.Add(new ListItem("a" + i.ToString(), "a" + i.ToString());
    改成这样看看
      

  5.   

    你试试;
    protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                for (int i = 0; i < 4; i++)//生成4个值
                    ListBox1.Items.Add(new ListItem("a" + i.ToString(), "a"));
                for (int i = 4; i < 10; i++)//生成6个值
                    ListBox1.Items.Add(new ListItem("a" + i.ToString(), "b"));
            }这时候,你选前4个,返回的都是第一个;你选后6个,返回的都是第6个!
      

  6.   

    asp.net是多线程的,简单的说就是在一个事件中改变一个全局变量的值,在另一个事件中,是无法直接获得改变后的值的.两个线程间是相互独立的...
    ——————————————————————————————————————————
    这个回复挺有“仙”气的,怎么想出来的?
      

  7.   

    或者,你也可以换个位置试验一下:    protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                for (int i = 0; i < 10; i++)//生成10个值
                    ListBox1.Items.Add(new ListItem("a","a" + i.ToString()));
            }    }ListBox 是按照浏览器发过来的value值然后与item从前向后逐一匹配的,一旦value相同,立刻结束查找,这最后找到的位置就是 SelectedIndex。