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
    }
}

編集 *

一度に複数の買い物客をサポートしたい場合は、これを行わないでください。

private static List<Shopping> slist; 

ユーザーはお互いのリストを上書きし、間違ったリストを常に表示することになります。「静的」修飾子を削除します。

于 2011-02-07T21:45:01.233 に答える
0

WebFormsを実行してからしばらく経ちましたが、複数のアイテムを割り当てているようですが、ボタンクリックイベントの「ショッピング」が1つだけで、次のように呼び出されます。

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

バインドしているShoppingオブジェクトに対してアイテムを表示する場合は、GridView1のバインドを再確認してください。

于 2011-02-07T22:44:02.933 に答える
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 に答える