我有2个按钮和一个ListBox
。当我点击第一个按钮时,它应该从ListBox
中移除所选项目,但它不会 - ListBox
保持不变。代码有什么问题?
static List<string> Blist = new List<string>();
public int x;
protected void Page_Load(object sender, EventArgs e)
{
Blist = (List<string>)Session["items"];
if (Blist != null)
{
ListBox1.Items.Clear();
for (int i = 0; i < Blist.Count; i++)
ListBox1.Items.Add(Blist[i]);
}
}
protected void Button1_Click(object sender, EventArgs e)
{
x= ListBox1.SelectedIndex;
if (x >= 0)
{
ListBox1.Items.RemoveAt(x);
string m = Blist[x];
Blist.Remove(m);
Session["items"] = null;
Session["items"] = Blist;
}
}
protected void Button2_Click(object sender, EventArgs e)
{
Session["items"] = null;
}
答案 0 :(得分:4)
当您的页面回发时(单击该按钮时),Page_Load处理程序再次触发。当它这样做时,它会重新填充你的清单。要防止这种情况,您需要检查其页面是否回发或初始加载。您可以通过检查Page.IsPostBack
是真还是假来执行此操作。如果是真的则意味着页面被回发(通过点击按钮或其他)。如果它不是真的,则表示它是页面的初始加载。
protected void Page_Load(object sender, EventArgs e)
{
Blist = (List<string>)Session["items"];
if (!Page.IsPostBack)
{
if (Blist != null)
{
ListBox1.Items.Clear();
for (int i = 0; i < Blist.Count; i++)
ListBox1.Items.Add(Blist[i]);
}
}
}