0

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

1 回答 1

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]);
         }
     }
 }
于 2012-12-10T18:12:32.563 回答