Autopostback重置我的列表

时间:2011-02-07 21:42:40

标签: c# .net button controls autopostback

我想将项目存储到列表中,但每次按确认按钮将一个项目添加到列表中页面将刷新并重置我的列表。如何阻止这种情况发生,同时有一个添加按钮继续添加到列表中?

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
    }
    else
    {
        slist = (List<Shopping>)ViewState["Items"];
    }
}

列表:

private static List<Shopping> slist;
        public List<Shopping> GetShopping()
        {
            return slist;
        } 

按钮点击:

slist = new List<Shopping>(); 
            Shopping s = new Shopping();
            s.Item1 = txtItem1.Text;
            s.Item2 = txtItem2.Text;
            s.Item3 = txtItem3.Text;
            s.Item4 = txtItem3.Text;

            slist.Add(s);
            ViewState["Items"] = slist;
            showShopping();

方法:

showShopping()
{
GridView1.DataSource = GetShopping();
            GridView1.DataBind();
}

3 个答案:

答案 0 :(得分:1)

停止在页面加载上构建/绑定列表,而不检查Page.IsPostBack

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
       // bind / load lists and controls here
    }
    else
    {
       //this is a post back, don't reload everything
    }
}

编辑*

如果您希望一次支持超过1个购物者,请不要这样做。

private static List<Shopping> slist; 

用户最终会在每个其他列表上书写,然后不断显示错误的列表。删除'静态'修饰符。

答案 1 :(得分:0)

不要在ViewState中存储业务对象。使用会话

private List<Shopping> ShoppingList
{
   get { 
          var shopping = Session["Shopping"] as List<Shopping>;
          if (shopping == null)
          {
              shopping = new List<Shopping>();
              Session["Shopping"] = shopping;
          }
          return shopping;
       }
   set { Session["Shopping"] = value; }
}

按钮处理程序

var shopping = ShoppingList;
shopping.Add(new Shopping());
...

答案 2 :(得分:0)

自从我完成WebForms以来已经有一段时间了,但看起来你分配了多个项目,但是按钮点击事件只有一个“购物”,然后调用:

showShopping() { GridView1.DataSource = GetShopping(); GridView1.DataBind(); }

如果要显示项目而不是要绑定的Shopping对象,请仔细检查GridView1绑定。