我想在用户点击按钮时将新项目添加到我的通用列表中,但每个列表仅包含最后一个引入的项目,似乎在每个按钮点击列表中重新初始化:(。
这是代码的一部分:
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,但我认为这不会导致此行为。
我不知道如何在这些条件下保留列表中的项目,如果您知道如何执行此操作,请与我联系。
谢谢!
答案 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)));
}