У меня проблема с поддержанием состояния на странице ASP.NET AJAX. Короткая версия: мне нужен какой-то способ обновить страницу ViewState после асинхронного обратного вызова, чтобы отразить любые изменения состояния, сделанные сервером во время асинхронного вызова.
Кажется, это общая проблема, но я опишу свой сценарий, чтобы помочь объяснить:
У меня есть элемент управления в виде сетки, который имеет некоторые улучшения JavaScript, а именно, возможность перетаскивать столбцы и строки. Когда столбец или строка помещаются в новую позицию, вызывается метод AJAX для уведомления стороны сервера управления и запуска соответствующего события на стороне сервера («OnColumnMoved» или «OnRowMoved»).
Вызовы ASP.NET AJAX по умолчанию отправляют всю страницу как запрос. Таким образом, страница проходит полный жизненный цикл, состояние представления сохраняется, и состояние элемента управления восстанавливается до вызова метода RaiseCallbackEvent.
Однако, поскольку вызов AJAX не обновляет страницу, ViewState отражает состояние original элемента управления даже после перемещения столбца или строки. Таким образом, во второй раз, когда происходит действие на стороне клиента, AJAX-запрос отправляется на сервер, и страница и элемент управления восстанавливаются снова, отражая состояние first элемента управления, а не состояние после первого столбца или строка была перемещена.
Эта проблема распространяется на многие последствия. Например, если у нас есть действие на стороне клиента / AJAX для добавления нового элемента в сетку, а затем перетаскивается строка, сетка строится на стороне сервера с на один элемент меньше, чем на стороне клиента.
И, наконец, наиболее серьезно для моего конкретного примера, фактический объект источника данных, с которым мы работаем, хранится на странице ViewState. Это было конструктивное решение, позволяющее хранить копию манипулированных данных с сохранением состояния, которая может быть либо зафиксирована в БД после многих манипуляций, либо отброшена, если пользователь отступает. Это очень трудно изменить.
Итак, опять же, мне нужен способ обновления страницы ViewState при обратном вызове после запуска метода AJAX.