Я вижу некоторые правильные ответы здесь, но я не вижу подробных объяснений, поэтому я решил, что я бы включил:
ASP.NET имеет довольно сложный жизненный цикл запросов / ответов. Каждый цикл проходит через набор событий, таких как Init
, Load
и т. Д. Согласно этой статье , и конкретно этому изображению , существует метод под названием TrackViewState()
выполняется после события Init
, но до события InitComplete
. Это означает, что любые изменения в ViewState
не будут сохраняться (отслеживаться), если они сделаны в событии Init
, как это сделал OP.
Существует дополнительный метод, называемый LoadViewState()
, который берет данные ViewState
, которые были отправлены через значение формы __VIEWSTATE
, и загружает их в текущую коллекцию ViewState
. Это выполняется после события InitComplete
, но до события PreLoad
. Это означает, что значения, уже установленные до ViewState
до выполнения LoadViewState()
, скорее всего будут перезаписаны.
Теперь, зная, когда происходят эти 2 события, и зная методы постоянства ViewState
, которые выполняются до и после них, мы можем сделать вывод, что самым ранним событием, в котором можно безопасно установить значения ViewState
, является событие PreLoad
, Значения, установленные ранее этого события, вероятно, будут перезаписаны и, следовательно, не будут сохранены.
Итак, чтобы ответить на ваш вопрос, установите значение ViewState
в методе OnPreLoad()
или сделайте так, как предлагали другие, и сделайте это в методе OnLoad()
, и ваши значения должны быть сохранены.