простой способ в котлине
if (kotlin.run{ a=b; a != c}){ ... }
Это также имеет проблемы, потому что я должен явно аннулировать значение сессии во время не обратные передачи, чтобы эмулировать, как ViewState работает.
Почему необходимо явно аннулировать значение (кроме управления памятью, и т.д.)? Разве это не опция проверить Page. IsPostback, и или делают что-то с Переменной сеанса или нет?
Метод LoadViewState на странице является определенно ответом. Вот общее представление:
protected override void LoadViewState( object savedState ) {
var savedStateArray = (object[])savedState;
// Get repeaterData from view state before the normal view state restoration occurs.
repeaterData = savedStateArray[ 0 ];
// Bind your repeater control to repeaterData here.
// Instruct ASP.NET to perform the normal restoration of view state.
// This will restore state to your dynamically created controls.
base.LoadViewState( savedStateArray[ 1 ] );
}
SaveViewState должен создать массив savedState, который мы используем выше:
protected override object SaveViewState() {
var stateToSave = new List<object> { repeaterData, base.SaveViewState() };
return stateToSave.ToArray();
}
Не забывайте также связывать повторитель в Init или Load с помощью кода как это:
if( !IsPostBack ) {
// Bind your repeater here.
}
При создании динамических средств управления... Я только заполняю их на начальной загрузке. Послесловия я воссоздаю средства управления на обратной передаче в событии загрузки страницы и состояние отображения, кажется, обрабатывают перезаполнение значений без проблем.
1) существует, вероятно, способ заставить это работать... просто необходимо удостовериться, что добавили средства управления к дереву в правильный момент. Слишком скоро и Вы не получаете ViewState. Слишком поздно и Вы не получаете ViewState.
2) Если Вы не можете понять это, возможно, можно ли выключить состояние отображения для страницы дыры и затем положиться ли только на querystring для изменений состояния? Любая ссылка, которая была ранее обратной передачей, будет ссылкой на другой URL (или перенаправление обратной передачи).
Это может действительно уменьшить вес страницы и помочь избежать проблем с ViewState.
Я всегда воссоздавал свои динамические средства управления в событии LoadViewState. Можно сохранить количество средств управления, должен был быть создан в состоянии отображения и затем динамично создать это многие из них использующий метод LoadControl в событии LoadViewState. В этом случае у Вас есть доступ к ViewState, но он еще не был восстановлен средствам управления на странице.
protected override void LoadViewState(object savedState)
{
// Put your code here before base is called
base.LoadViewState(savedState);
}
Это то, что Вы имели в виду? Или Вы имели в виду, в каком порядке обрабатываются средства управления? Я думаю, что ответ на это - это квазислучайный.
Кроме того, почему Вы не можете загрузить объекты, с которыми Вы связываете перед Page_Load? Нормально называть Ваш бизнес-слой в любое время в течение жизненного цикла страницы, если Вы имеете к, за исключением предварительного рендеринга и чего-нибудь после.
Я должен явно аннулировать значение сессии во время не обратные передачи, чтобы эмулировать, как ViewState работает.
Я являюсь все еще туманным относительно того, почему Вы не можете хранить любой объект, против которого Вы связываете на сессии. Если Вы могли бы хранить тот объект на сессии, следующее должно работать:
Это должно работать. Однако, если Вы не можете использовать сессию по некоторым причинам, затем необходимо будет проявить немного отличающийся подход, такой как хранение вообще, Вы связываете против в базе данных после привязки управления, затем вытаскивая его из базы данных и снова переплетающий снова на каждой обратной передаче.
Я пропускаю некоторую очевидную деталь о Вашей ситуации? Я знаю, что это может быть очень хитро для объяснения тонкости ситуации, не отправляя код.
Править: Я изменил все ссылки на OnInit к OnPreInit в этом решении. Я забыл, что MS представил это новое событие в ASP.NET 2.0. Согласно их документации жизненного цикла страницы, OnPreInit - то, где динамические средства управления должны быть созданы/воссозданы.