2013-12-16 6 views
3

Я видел эту проблему много, и обычно это связано с тем, что переменные ViewState оцениваются слишком рано в жизненном цикле страницы, или что EnableViewState является ложным, но я проверил для обоих из них и они такие, как я ожидал.ViewState Variable Reset After Postback

Мой код:

public Int32 MyNumber 
{ 
    get 
    { 
     if (ViewState["MyNumber"] != null) 
     { 
      return (Int32)ViewState["MyNumber"]; 
     } 

     return 0; 
    } 
    set 
    { 
     ViewState["MyNumber"] = value; 
    } 
} 

protected override void OnLoad(EventArgs e) 
{ 
    base.OnLoad(e); 

    if (!this.IsPostBack) 
    { 
     MyNumber = 23; 
    } 
} 

protected override void OnPreRender(EventArgs e) 
{ 
    base.OnPreRender(e); 

    var numberValue = MyNumber; 
} 

Когда OnPreRender сначала вызывается, numberValue является 23. Каждый последующий вызов после этого это 0. Каждый раз, когда есть постбэк оказывается, чтобы сбросить.

Вопрос

Как получить значение упорствовать после обратной передачи?

Что я Пробовал

Доведение присвоение значения вне проверки для постбэка, но тогда теряется смысл использования ViewState в первую очередь.

+0

Это не скомпилировано. – SLaks

+0

Спасибо, отредактирован. Я отредактировал код прямо в попытке упростить вопрос и оставил там «нуль» (в любом случае в моем коде, имеющем отношение к этой проблеме, нет ничего другого). –

+0

нет никаких проблем с вашим кодом. Проверьте, является ли 'EnableViewState' ложным в' web.config'. –

ответ

-1

На самом деле у вас есть недостающий заказ в вашем кодексе, и это делает сброс значения нуля каждый раз между почтовыми пакетами :) ... в методе onload, который вы написали метод base.onload() перед вашим блоком кода и которые приводят к возврату Viewstate к 0.

Пожалуйста, молодец, что исправление кода:

public Int32 MyNumber 
     { 
      get 
      { 
       if (ViewState["MyNumber"] != null) 
       { 
        return (Int32)ViewState["MyNumber"]; 
       } 

       return 0; 
      } 
      set 
      { 
       ViewState["MyNumber"] = value; 
      } 
     } 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      Response.Write(MyNumber.ToString()); // Result now is 23 :) 
     } 

     protected override void OnLoad(EventArgs e) 
     { 

      // I replaced the order of the code here to get the value of the Viewstate in MyNumber property .. 
      if (!this.IsPostBack) 
      { 
       MyNumber = 23; 
      } 

      base.OnLoad(e); 
     } 

     protected override void OnPreRender(EventArgs e) 
     { 
      base.OnPreRender(e); 

      var numberValue = MyNumber; 
     } 

удачи :).

0

Я не знал, что был также ViewStateMode, который вызвал бы это поведение, если оно установлено на Disabled, которое было (на главной странице).

Я установил это на Enabled на мой контроль, и мои значения ViewState сохраняются, как я надеюсь.

 Смежные вопросы

  • Нет связанных вопросов^_^