2009-10-26 2 views
0

Нужна помощь с жизненным циклом страницы.Проблема с циклом страницы и viewstate

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

При обновлении страницы необходимо отобразить метку в соответствии со значением в viewstate.

Page_Load не подходит для этого.

В каком событии страницы я должен отображать эту метку?

ответ

5

Так события загрузки страницы потока, как:

  1. Действия по форме вызывает Postback
  2. Page_Load событие
  3. Кнопка Нажмите Событие
  4. Рендер/Unload Событие

На шаге 2 вы читаете переменную из viewstate и устанавливаете метку. На шаге 3 вы задаете значение в представлении.

Как вы заметили, вы используете события в неправильном порядке. Существует два способа решения этой проблемы: поместите код метки метки в событие Render/Unload. Другой способ состоит в том, чтобы реорганизовать ваш код таким образом, чтобы метка была установлена ​​с помощью события Click Button, а не в событии Page_Load; который я бы рекомендовал в качестве правильного курса действий.

Возможно, вы захотите заказать What is the ‘page lifecycle’ of an ASP.NET WebForm?, чтобы получить лучшую ручку на жизненном цикле страницы.


В ответ на комментарий: Если есть несколько меток для установки, вы можете посмотреть встроенный код, чтобы установить метки.Код будет выглядеть следующим образом:

CodePage

<asp:Label id="id1" runat="server" text="<%=Label1Text%>" /> 

CodeBehind

private string m_Label1Text; 
public property string Label1Text { 
    get { return m_Label1Text; } 
    set { m_Label1Text = value; } 
} 

Таким образом, вы установите текст через свойство Label1Text и получает переданы в форме, когда он отображается. Вы можете попробовать это Tutorial здесь, если вам нужна дополнительная информация о кодировке.

+0

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

+0

Спасибо, это хорошо. – samuel

+0

Хороший ответ, пояснение + пример + ссылки на документацию и ответы на комментарии. – samuel

0

Проблема у Вас есть то, что Page_Load работает перед кнопку обработчик щелчка, так что вы получите:

  1. Нажмите кнопку
  2. Проверьте значение ViewState (это не имеет еще не установлены)
  3. Пусковые устройства и устройства для укладки стрелкового оружия Вид спереди

Вы можете попробовать Page_Prerender, это должно произойти после увольнения обработчиков.

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