2010-08-20 6 views
0

У меня есть переменная класса ценового уровня decalred внутри страницы, как это:ASP.NET веб-страница Postback

public partial class _Default : System.Web.UI.Page 
{ 
    private MyClass myVar = new MyClass(); 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      myVar.LoadData(); 
      myVar.ShowData(); 
     } 
    } 

    protected void cmdRefresh_Click(object sender, EventArgs e) 
    { 
     myVar.ShowData(); 
    } 
} 

У меня есть проблема, что после начальной загрузки, в первый раз, что кнопка нажата он, похоже, перезагружает myVar, и все его данные теряются. Это известная проблема с ASP.NET, и есть ли обходной путь?

ответ

4

Используйте ViewState для хранения этого класса, если вам просто нужно сохранить класс для текущей страницы. ЕСЛИ вы хотите сохранить его для всего сайта, а затем просмотрите такие вещи, как Sessions.

private MyClass myClass 
{ 
    get { 
     if (this.ViewState["myVar"] != null) 
     { 
      return (MyClass)this.ViewState["myVar"]; 
     } 
    } 
set{ 
    this.ViewState["myVar"] = value; 
} 
} 
+0

Черт! Слишком быстро для меня! – 5arx

2

Переменная myVar никогда не будет сохранена через обратную передачу, вам нужно использовать некоторый метод кэширования, такой как Application/Session/ViewState/Cookies.

0

Да, это функциональность знаний. В основном ваш объект страницы создается для каждого запроса, поэтому для вас установлены свойства (IsPostBack является одним из них), но вам нужно предпринять шаги, чтобы убедиться, что поля (объявленные в коде) заполняются каждый раз. В этом конкретном случае либо путем извлечения Them, либо сохранения Them в форме (viewstate) или данных сеанса. Какой из них выбрать, должен зависеть от размера данных, времени для повторной проверки, загрузки данных и т. Д.