1

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

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();
}
4

3 回答 3

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; 

用户最终会在彼此的列表上书写,然后不断地显示错误的列表。删除“静态”修饰符。

于 2011-02-07T21:45:01.233 回答
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());
...
于 2011-02-07T22:12:38.140 回答
0

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

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

如果您希望显示项目与您绑定到的 Shopping 对象,请仔细检查您的 GridView1 绑定。

于 2011-02-07T22:44:02.933 回答