Autopostback сбрасывает мой список - PullRequest
1 голос
/ 08 февраля 2011

Я хочу сохранить элементы в списке, но каждый раз, когда я нажимаю кнопку подтверждения, чтобы добавить один элемент в список, страница обновляется и сбрасывает мой список. Как я могу предотвратить это, пока в то же время есть кнопка добавления, чтобы продолжать добавлять в список?

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

Метод: * +1010 *

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

Ответы [ 3 ]

1 голос
/ 08 февраля 2011

Прекратить сборку / привязку списка при загрузке вашей страницы без проверки 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; 

В итоге пользователи будут писать списки друг друга, а затем постоянно отображать неправильные списки. Удалите «статический» модификатор.

0 голосов
/ 08 февраля 2011

Прошло немного времени с тех пор, как я сделал WebForms, но похоже, что вы назначаете несколько элементов, но только одно «Шоппинг» на событие нажатия кнопки, затем вызывается:

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

Дважды проверьте привязку GridView1, если хотите, чтобы элементы отображались по сравнению с объектом «Покупки», к которому вы привязываетесь.

0 голосов
/ 08 февраля 2011

Не храните бизнес-объекты во 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());
...
...