2016-04-09 8 views
1

Привет всем и спасибо заранее,asp.net сохраняют список значений между постбэков

Я сделал класс в моем файле .cs, а затем объявлен список <> его, как это ...

public partial class MyClass : System.Web.UI.Page 
    { 
     public List<PrecioStock> PreciosYStocks = new List<PrecioStock>(); 


     protected void Page_Load(object sender, EventArgs e) 
     { 
... 
... 

    public class PrecioStock 
    { 
     public string Precio; 
     public string Stock; 

     public PrecioStock(string Precio, string Stock) 
     { 
      this.Precio = Precio; 
      this.Stock = Stock; 
     } 

     public void SetPrecio(string nuevoPrecio) 
     { 
      this.Precio = nuevoPrecio; 
     } 

     public void SetStock(string nuevoStock) 
     { 
      this.Stock = nuevoStock; 
     } 

     public string GetPrecio() 
     { 
      return this.Precio; 
     } 

     public string GetStock() 
     { 
      return this.Stock; 
     } 

    } 

Затем я заполняю это так, с текстами некоторых Textboxes' ...

  PreciosYStocks.Clear(); 

      foreach (ListItem items in ControlListaGenerico.Items) 
      { 
       if (items.Selected) 
       { 
        for (int i = 0; i < TablaDeDatos.Rows.Count; i++) 
        { 
         if(items.Value.Equals(TablaDeDatos.Rows[i]["ID_FORMATO"].ToString())) 
         { 
          TextBox Precio = (TextBox)Precio_Stock_PN.FindControl("NuevoPrecioTB_" + items.Value); 
          Precio.Text = TablaDeDatos.Rows[i]["PRECIO"].ToString(); 

          TextBox Stock = (TextBox)Precio_Stock_PN.FindControl("NuevoStockTB_" + items.Value); 
          Stock.Text = TablaDeDatos.Rows[i]["STOCK"].ToString(); 

          PreciosYStocks.Add(new PrecioStock(Precio.Text, Stock.Text)); 

          break; 
         } 
        } 
       } 
      } 

Ну, это, кажется, хорошо заполняющая, но проблема в том, что при нажатии на кнопку UPDATE в DetailsView, это создает сообщение назад, данные теряются, и я больше не могу к нему обращаться.

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

Я читал о путях «viewState» и «Session», но не знаю, как их реализовать, в случае, если они являются ответом на это.

Пожалуйста, помогите и еще раз спасибо.

+1

Если они одного пользователя, то Сеанс путь. Вы найдете информацию об этом с помощью быстрого поиска. Если они являются глобальными для всех пользователей, то они должны находиться в объекте Application для всех для доступа или статических в этом классе, если они не нужны в другом месте. –

+0

@Mazinger Что вы точно пробовали с [viewstate] (https://msdn.microsoft.com/en-us/library/ms227551 (v = vs.85) .aspx) и [sessionstate] (https: // msdn .microsoft.com/en-us/library/6ad7zeeb.aspx), который не работает? –

+0

Привет, Евгений, я не знаю, как их использовать в моем списке: внутри определения класса ?, в методах get и set ?, когда я добавляю элементы в список? Я смущен этим. – Mazinger

ответ

1

Если данные не слишком велики (в вашем случае это не так много данных), вы можете записать их на страницу ViewState. Таким образом, он возвращается с каждой обратной передачей. Если вы сохраните его в Session, тогда вы получите множество данных, хранящихся в Session, которые больше никогда не понадобятся.

Вот образец.

  • Создайте класс, который представляет любые данные, необходимые для хранения. (У вас может быть более одного, но одно проще.)
  • Храните все, что вам нужно для сохранения в этом классе.
  • В событии PreRender, когда внесены изменения в страницу, вы записываете свой класс в ViewState.
  • В мероприятии Load вы его прочитали. Если читать нечего (это загрузка первой страницы), вы создаете новый экземпляр своего класса.

    public partial class YourPage: System.Web.UI.Page 
    { 
        private PageState _pageState; 
    
        protected void Page_Load(object source, EventArgs e) 
        { 
         _pageState = ViewState["pageState"] as PageState ?? new PageState(); 
        } 
    
        protected void Page_PreRender(object sender, EventArgs e) 
        { 
         ViewState["pageState"] = _pageState; 
        } 
    } 
    
    [Serializable] 
    public class PageState 
    { 
        //Whatever data you need to persist 
    } 
    
+0

OK Скотт, он работает! Большое спасибо! – Mazinger