| « Поставить закладку » « Сделать стартовой » | |||
|
|||
|
AJAX. Взаимодействие с жизненным циклом страницы
Итак, запись в таблице отредактирована, осталось её сохранить. Первое, что приходит на ум - это целиком AJAX решение, когда данные собираются из редактируемой строки DataGrid, отправляются на сервер, и в случае успеха клиентская PostBack функция перерисовывает строку таблицы уже только для просмотра. Однако, если первая часть этой идеи не вызывает никаких трудностей, то перерисовка таблицы ставит несколько вопросов. Во-первых, для общего случая нужно найти способ получить с сервера представление ItemTemplate каждого элемента управления в редактируемой строке, т.е. как отображаются колонки в режиме просмотра. Далее полученным с сервера данным вместе с представлением найти соответствующие места на странице куда всё это вставить. И произвести вставку. Как альтернативный вариант, можно попробовать собрать на сервере всю строку таблицы, найти на клиенте её место на странице и вставить. Даже если найти способ всё это сделать относительно небольшим количеством кода, остается следующий вопрос. Что делать с состоянием страницы, ведь ViewState страницы хранит другие данные и при первом же PostBack (например, в случае фильтрации или сортировки), таблица всё еще будет считать, что определенная строка находится в состоянии редактирования, а значения элементов "поднимутся" из ViewState старые. "Достучаться" до объектной модели не возможно, так как при асинхронном вызове, объектная модель страницы не инициализирована, а значит AJAX метод ничего не знает о существующих в жизненном цикле страницы объектах. Теоретически, можно поступить как это делает ASP .NET 2, а именно инициализировать почти все шаги жизненного цикла, кроме Render. Далее изменить объекты страницы на новые и это гарантирует, что при следующем обращении к странице мы получим ожидаемый положительный результат. При таком решении есть два значительных минуса: для достаточно простого логического действия, отрисовки строки таблицы, приходится писать много кода, и при этом нагрузка на сервер остается на том же уровне, что и при простом PostBack. По сути, единственным плюсом становится то, что пользователь не видит как перерисовывается вся страница. Пока что, на мой взгляд правильным решением будет вызов функции
__doPostBack
в клиентской CallBack функции.
CODE
function updateEq(controlID) {
var _eqInfo = AdminEditor.EqEditor.GetEqInfoMetaData().value; var lastind = controlID.lastIndexOf('_'); var prefix = controlID.substring(0, lastind + 1); _eqInfo.DepartmentID = document.getElementById(prefix + "ddlstDepartment").value; _eqInfo.DeviceModelID = document.getElementById(prefix + "ddlstDevicemodelID").value; _eqInfo.OfficeID = document.getElementById(prefix + "ddlstOffice").value; _eqInfo.RoomID = document.getElementById(prefix + "ddlstRoom").value; _eqInfo.InvNumber = document.getElementById(prefix + "txtInvNumber").value; _eqInfo.Comment = document.getElementById(prefix + "txtComment").value; tmp = document.getElementById(prefix + "txtComissDate").value; if(tmp.length > 0) { arr = tmp.split("."); _eqInfo.ComissDate = new Date(arr[2], arr[1]-1, arr[0]); } _eqInfo.Discarded = document.getElementById(prefix + "chkDiscardedE").checked; var deviceID = document.getElementById(prefix + "deviceID").value; AdminEditor.EqEditor.UpdateEq(deviceID, _eqInfo, updateEq_callback); } В этом коде, нахождение элементов управления в строке по ID кнопки является более универсальным, чем в предыдущих примерах. Находится префикс, собираемый ASP.NET в зависимости от положения элемента управления в тех или иных панелях, пользовательских "контролах" и наконец, от номера редактируемой строки в таблице. Например, ниспадающий список выбора офиса в редактируемой строке может выглядеть так: grdEquipment__ctl6_ddlstOffice, что означает что он принадлежит таблице grdEquipment, строке _ctl6. Но, в общем префикс может быть и длиннее. В первой строке вышеприведенной функции с сервера получаем структуру для дальнейшего заполнения её данными и отправки на сервер. Т.е. фактически, получаем метаданные, на основе которых формируем объект и отправляем его на сервер для сохранения. После вызова серверного метода, управление передается клиентской функции:
CODE
function updateEq_callback(res) {
if(res.value.length > 0) alert(res.value); else { __doPostBack("","LoadData"); } } При отсутствии ошибок, она реализует PostBack страницы. Единственное, что примечательно в этом коде, это то что в качестве параметра eventArgument отправляю флаг "LoadData", который интерпретирую в жизненном цикле страницы как считывание актуальной информации из базы данных. В противном случае, таблица бы заполнилась данными из старого ViewState или из устаревшей сессии, что при обновлении неверно. Вот, пожалуй и всё. Источник: Vorant's Blog ( Блоги на Realcoding.NET ) Рубрика: AJAX
Подгрузка через AJAX HTML-кода, содержащег....
При разработке CMS S.Builder наша команда активно использовала AJAX. Теперь вот решили поделиться накопленным опытом. Начнем с этого хабратопика. Не буду здесь затрагивать различные фреймворки и библиотеки. Свой код всегда роднее. Для работы с AJAX-ом в S.Builder написана библиотека sbAJAX. Можете качать и пользоваться :). В этом файле есть функция sbEvalJS. Для тех, кто не знает, объясню. При подгрузке через AJAX и вставке на страницу HTML-кода, содержащего JavaScript, JavaScript выполняться не будет или полезут баги. Эта функция как раз решает поставленную задачу.
Подробнее... |
Рубрика: AJAX
| Добавлено: 19.11.2008
Обзор нового релиза самой мощной Ajax библ....
Хотя наш обзор немного запоздал, оригинальный Dojo 1.2 вышел в релизной версии ещё 6-го октября, но сейчас мы наверстаем упущенное. И так, Dojo Toolkit — это самая мощная и гибкая ajax-библиотека из всех, что есть на рынке, она активно развивается и имеет большое комьюнити. Кстати, это самое комьюнити, совместно с компанией Sitepen, имеет ещё несколько проектов, среди которых и Cometd и некоторые другие, не менее интересные, о которых мы скоро вам расскажем. Сегодня же все внимание на флагманский продукт — Dojo 1.2.
Подробнее... |
Рубрика: AJAX
| Добавлено: 19.11.2008
Firebug 1.3 и 1.4 alpha — что нового и инт....
Если вы профессиональный веб-разработчик и постоянно имеете дело с разработкой и отладкой сложных AJAX приложений, то наверняка знаете и используете Firebug — плагин для браузера Firefox, предназначенный для отладки и исследования веб-приложений. Текущая его версия, 1.2х достаточно стабильная и функциональна, чтобы помочь в 99% проблем, которые могут возникнуть при разработке. Но и этот инструмент не лишён если не недостатков, то некоторых фич, которые могли бы облегчить работу. И даже идеальный инструмент можно сделать ещё более идеальным, как бы это не звучало.
Подробнее... |
Рубрика: Вебмастеру
| Добавлено: 19.11.2008
Остальные статьи: |
Цитата дня (все,добавить):
|
Realcoding.NET
© 2003-2008 |
Контакты |
Реклама на сайте
|