ASP。列表和图片

时间:2011-02-16 18:58:49

标签: asp.net image list

我放了一个列表框和一个图像框。 现在我希望每次用户点击列表中的其他元素时交换图像。它似乎没有工作

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

public partial class _Default : System.Web.UI.Page 
{
    string[] pictures = { "~/createWii.jpg", 
                               "~/DKC4_wii.png",
                                "~/Donkey-Kong-Country-1.jpg", 
                                "~/DSCallOfDutyBlackOps.jpg", 
                                "~/DSPreviewsCodmw2.jpg", 
                                "~/DSPreviewsAliceInWonderLAnds.jpg",
                               "~/DSPreviewPicross3d.jpg",
                               "~/createii.jpg", 
                       };
string[] picturesNames = { "picture1", "picture2", "picture3", "picture4", "picture5", "picture6", "picture7", "picture8" };

protected void Page_Load(object sender, EventArgs e)
{
    for (int i = 0; i < pictures.Length; i++)
    {
            ListBox1.Items.Add(new ListItem(picturesNames[i],pictures[i]));
    }

    Image1.ImageUrl = "~/Donkey-Kong-Country-1.jpg";


    ListBox1.DataSource = picturesNames;
    ListBox1.DataBind();
}
protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    Image1.ImageUrl = pictures[ListBox1.SelectedIndex];// it tells me that there is index out of range each time. why ?
}

}

1 个答案:

答案 0 :(得分:2)

有几件事。

1。)您应该使用

将代码包装在page_load中
if(!IsPostback)

2.。)确保.aspx上列表框中的“AutoPostback”属性设置为true!

修改

根据评论中的请求,需要的原因有两个。

  1. ASP.NET ViewState将处理回发值的持久性,因此,您可以使用!IsPostback条件来确保信息仅绑定一次。这可以防止将来出现任何“怪异”。

  2. 默认情况下,当用户更改选择时,ListBoxes / DropDownLists / etc不会自动回发。因此,要实际触发事件,您需要有一个执行回发的按钮,或者按照我的指示更新“AutoPostback”属性,以确保当用户进行更改时触发服务器端代码。