Обратная передача веб-страницы ASP.NET - PullRequest
0 голосов
/ 20 августа 2010

У меня есть переменная цены уровня класса внутри страницы, например:

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 и есть ли обходной путь?

Ответы [ 3 ]

4 голосов
/ 20 августа 2010

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

private MyClass myClass
{
    get {
      if (this.ViewState["myVar"] != null)
      {
           return (MyClass)this.ViewState["myVar"];
      }
    }
set{
     this.ViewState["myVar"] = value;
}
}
2 голосов
/ 20 августа 2010

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

0 голосов
/ 20 августа 2010

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

...