Отслеживание состояния с помощью ASP.NET AJAX / ICallbackEventHandler

голоса
9

У меня есть проблема с сохранением состояния в странице ASP.NET AJAX. Короткая версия: Мне нужен способ обновления страницы ViewState после асинхронной обратного вызова было сделано, чтобы отразить любые изменения состояния сервера во время разговора асинхронным.

Это, как представляется, является общей проблемой, но я опишу мой сценарий, чтобы объяснить:

У меня есть сетки, как элемент управления, который имеет некоторые улучшения JavaScript, а именно - возможность перетаскивать столбцы и строки. Когда столбец или строка отбрасывается в новое положение, метод АЯКСА вызывается для уведомления управления на сторону сервера и запустить соответствующую сторону сервера события ( «OnColumnMoved» или «OnRowMoved»).

ASP.NET AJAX вызовов, по умолчанию, отправить всю страницу как запрос. Таким образом, страница проходит через весь жизненный цикл, ViewState это сохраняется и состояние управления восстанавливается до метода RaiseCallbackEvent вызывается.

Однако, так как вызов AJAX не обновляет страницу, то ViewState отражает оригинальное состояние управления, даже после того , как столбец или строка была перемещена. Так во второй раз происходит на сторону клиента действие, запрос AJAX идет на сервер и страница и управления построены обратно снова , чтобы отразить первое состояние управления, было перенесено не состояние после первого столбца или строки.

Эта проблема распространяется на многие последствия. Например, если у нас есть действие на стороне клиента / AJAX, чтобы добавить новый элемент в сетке, а затем ряд тащится, сетка построена на стороне сервера один меньше пункта, чем на стороне клиента.

И, наконец, и наиболее серьезно для моего конкретного примера, реальный объект источника данных мы действуем на хранится в странице ViewState. Это дизайнерское решение, чтобы позволить хранение динамической копии манипулируют данные, которые могут быть либо совершенны в БД после многих манипуляций или отбрасываются, если пользователь аннулирует. Это очень трудно изменить.

Так, опять же, мне нужен способ для страницы ViewState будет обновляться на обратный вызов после того, как метод AJAX обжигают.

Задан 05/08/2008 в 14:52
источник пользователем
На других языках...                            


5 ответов

голоса
1

Проверьте это сообщение в блоге: настраивая ICallbackEventHandler и ViewState . Автор , кажется, обращаясь к самой ситуации , что вы испытываете:

Поэтому при использовании ICallbackEventHandler у вас есть два препятствия, преодолеть, чтобы иметь обновленное управление состоянием для обратных вызовов. Во-первых это проблема ViewState только для чтения. Другая на самом деле регистрация изменений пользователя сделал на страницу до запуска обратного вызова.

Посмотреть блог для его предложений о том , как решить эту проблему. Кроме того, проверить этот пост на форуме , который обсуждает ту же проблему.

Ответил 05/08/2008 в 15:25
источник пользователем

голоса
0

Я на самом деле нашел оба этих ссылок вы указали, но отметили, что они просто с описанием проблемы, а не решить ее. Автор блога предлагает обходной путь с помощью другого поставщика ViewState, но, к сожалению, не возможность в этом случае ... мне действительно нужно оставить сведения о ViewState в покое и просто подключить к тому, что делается вне коробки.

Ответил 05/08/2008 в 15:54
источник пользователем

голоса
1

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

Ответил 07/08/2008 в 17:19
источник пользователем

голоса
0

Я нашел довольно элегантное решение с RadAjaxManager Telerik в . Она работает довольно хорошо, по сути регистрации каждого элемента управления , который может вызывать постбэк, а затем зарегистрировать каждый элемент управления , который должен быть повторно нарисованным после этого постбэк выполняется асинхронно. RadAjaxManager будет обновлять DOM после асинхронного постбэк и переписать ViewState и все затронутые элементы управления. После взятия заглянуть в Рефлектор, он выглядит немного запутано под капотом, но он подходит моим целям.

Ответил 08/08/2008 в 05:18
источник пользователем

голоса
0

Я не понимаю, почему вы должны использовать пользовательский элемент управления для этого, когда ASP.NET AJAX встроенной UpdatePanel делает то же самое.

Это только добавляет сложности, дает меньшую поддержку, и делает его более трудным для других, чтобы работать на вашем приложении.

Ответил 08/08/2008 в 05:56
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more