如何在按钮单击事件期间保留和添加对象列表中的项目

时间:2012-02-05 16:38:57

标签: c# asp.net ajax

我想在用户点击按钮时将新项目添加到我的通用列表中,但每个列表仅包含最后一个引入的项目,似乎在每个按钮点击列表中重新初始化:(。

这是代码的一部分:

 List<ProdusBon> listaProduseBon = new List<ProdusBon>();

protected void Page_Load(object sender, EventArgs e)
{
}

protected void Button1_Click(object sender, EventArgs e)
{
    listaProduseBon.Add(new ProdusBon(-1, Int32.Parse(TextBox2.Text), -1, Int32.Parse (ListBox1.SelectedValue)));
}

我也尝试过使用这段代码:

 List<ProdusBon> listaProduseBon = null;

protected void Page_Load(object sender, EventArgs e)
{
 if (!Page.IsPostBack)
    {
       listaProduseBon = new List<ProdusBon>();
    }
}

protected void Button1_Click(object sender, EventArgs e)
{
    listaProduseBon.Add(new ProdusBon(-1, Int32.Parse(TextBox2.Text), -1, Int32.Parse (ListBox1.SelectedValue)));
}

但在这种情况下引发了一个空引用异常。

我必须保留列表中的所有项目,而不仅仅是最后一项,并且在单击事件时引发了一个要添加到列表中的新项目。

Default.aspx中的所有控件都获得了默认值,只有ListBox将“Enable AutoPostBack”设置为true,但我认为这不会导致此行为。

我不知道如何在这些条件下保留列表中的项目,如果您知道如何执行此操作,请与我联系。

谢谢!

2 个答案:

答案 0 :(得分:4)

页面加载之间会丢失成员变量。如果要在变量之间保持相同的值,可以将变量存储在Session中。

List<ProdusBon> listaProduseBon
{
   get { return (List<ProdusBon>) Session["ProdusBon"]; }
   set { Session["ProdusBon"] = value; }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (listaProduseBon == null) listaProduseBon = new List<ProdusBon>();
}

protected void Button1_Click(object sender, EventArgs e)
{
    listaProduseBon.Add(new ProdusBon(-1, Int32.Parse(TextBox2.Text), -1, Int32.Parse (ListBox1.SelectedValue)));
}

答案 1 :(得分:0)

在按钮上单击事件首先绑定列表按钮,然后从文本框中添加新项目。

protected void Button1_Click(object sender, EventArgs e)
{
    //code to bind your list goes here
    listaProduseBon.Add(new ProdusBon(-1, Int32.Parse(TextBox2.Text), -1, Int32.Parse (ListBox1.SelectedValue)));
}