列表项未删除

时间:2012-12-10 18:00:05

标签: c# asp.net listbox

我有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;
}

1 个答案:

答案 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]);
         }
     }
 }