我放了一个列表框和一个图像框。 现在我希望每次用户点击列表中的其他元素时交换图像。它似乎没有工作
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 ?
}
}
答案 0 :(得分:2)
有几件事。
1。)您应该使用
将代码包装在page_load中if(!IsPostback)
2.。)确保.aspx上列表框中的“AutoPostback”属性设置为true!
修改强>
根据评论中的请求,需要的原因有两个。
ASP.NET ViewState将处理回发值的持久性,因此,您可以使用!IsPostback
条件来确保信息仅绑定一次。这可以防止将来出现任何“怪异”。
默认情况下,当用户更改选择时,ListBoxes / DropDownLists / etc不会自动回发。因此,要实际触发事件,您需要有一个执行回发的按钮,或者按照我的指示更新“AutoPostback”属性,以确保当用户进行更改时触发服务器端代码。