Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Разработка под ASP.NET > Цикл статей про AJAX |
Автор: Exception 11.4.2006, 12:59 | ||
Приветствую всех! Собственно говоря, не знаю, что меня сподвигло на написание этого цикла, наверное желание поделиться опытом... Хотелось бы, чтобы люди не повторяли тех ошибок, которые допускал я и очень хотелось бы ознакомить людей с новой технологией, которая зовётся Web 2.0 или AJAX. Вступление Что же такое AJAX? AJAX буквально расшифровывается как Asynchronous JavaScript And XML - асинхронный JavaScript и XML. Что это за чудо? Думаю, лучше всего об этом написано в http://ru.wikipedia.org/wiki/Ajax. Я лишь приведу цитату:
Приложение AJAX состоит из двух частей:
Обычная схема вхаимодействия такова:
Таким образом, появляется возможность писать Rich UI для Web! Благодаря AJAX мы можем сделать страницу, поддерживающую Drag&Drop, всплывающие меню и даже автозаполнение TextBox'ов. Что самое приятное - страница совсем не перезагружается во время работы с пользователем! Что же такое Atlas? http://atlas.asp.net - это свободная реализация AJAX от Microsoft для ASP .NET. В чём её преимущества?
Это было вступление. Следом за ним идёт вторая часть, которая покажет простейший пример использования Atlas. Оставайтесь с нами ![]() |
Автор: Exception 11.4.2006, 13:53 |
К сожалению, вторая часть статьи, только что мною написанная, умерла ввиду того, что уроды-электрики отрубили свет во всём доме. Теперь буду сохраняться каждую минуту :angry Так что ждите сегодня вечером или завтра. |
Автор: Exception 11.4.2006, 15:17 | ||||||||||||||||||||
Сдерживая злость на электриков, пишу вторую часть... Приготовления На данный момент Atlas находится в состоянии разработки. Но это вовсе не значит, что им ещё рано пользоваться. Напротив - чем раньше Вы начнёте использовать его, тем лучше. На данный момент Atlas распространяется свободно (и будет распространяться), скачать самый новый дистрибутив всегда можно http://atlas.asp.net/default.aspx?tabid=47&subtabid=471. Hello, World! После того, как Вы установили Atlas, в шаблонах сайтов в Visual Studio появится новая иконка - ASP .NET 'Atlas' Web Site. Нажмите "ОК". У Вас появится страница Default.aspx, папка ScriptLibrary и библиотека Microsoft.Web.Atlas.dll в папке Bin. Также Atlas модифицирует файл web.config. Собственно говоря, в папке ScriptLibrary хранятся все скрипты, необходимые для работы Atlas. В библиотеке Microsoft.Web.Atlas.dll хранятся серверные компоненты, о них мы поговорим позднее. Для начала, мы создадим простенький Web-сервис a la Hello, World. Добавьте в проект новый Web-сервис и назовите его WebService.asmx. В codebehind этого сервиса добавьте следующие строчки:
Как видно, наш Web-сервис содержит один лишь метод HelloWorld(), который возвращает строку "Hello, World!". Далее, напишите в самом asmx-файле сервиса следующую строку:
Всё, наш Web-сервис готов! Теперь зайдите в Source странички Default.aspx. И немного наберитесь терпения. Для начала нам необходимо познакомиться с самым важным компонентом Atlas - ScriptManager. Его работа - управлять скриптами Atlas и подключать необходимые к странице. Тег <atlas:ScriptManager> имеет три внутренних тега. Сейчас мы их рассмотрим чуть поближе.
Прекрасно, мы подключили Web-сервис к нашей странице. Теперь добавьте на страницу следующий код:
У нас появится два новых элемента на странице - кнопка "Послать запрос" и div. Как Вы, наверное, уже догадались по его неоднозначному имени, в нём будет отображаться результат запроса. При нажатии на кнопку вызывается функция JavaScript, которую мы сейчас напишем. Добавьте в секцию head пустой тег script:
Теперь можно писать функции. Код JavaScript выглядит так:
Как видно, код прост до невозможности. Как и ожидалось, после нажатия кнопки под ней повилась надпись "Hello, World!". Проверить асинхронность можно очень легко: модифицируйте Web-сервис, добавив в код Web-сервиса команду
Вы можете спокойно просматривать страницу, а в это время код JavaScript ожидает ответа от сервера. В следующей статье мы поговорим об автозаполнении TextBox'ов, как в Gmail. Полный код страницы:
Успехов! |
Автор: Exception 13.4.2006, 18:07 |
Пока я разбираюсь с автозаполнением (не такая простая вещь ![]() ![]() CascadingDropDown - асинхронный дропдаун ![]() CollapsiblePanel - понелька, умеющая сворачиваться ![]() ConfirmButton - позволяет добавить диалог типа "Вы уверены?" к кнопочкам DragPanel - панель, которую можно таскать по странице HoverMenu - типа менюшки, выскакивающей при наведении мыши PopupControl - extender, позволяющий добавить к элементам popup-поведение ReorderList - назначение понятно, лист позволяет перемещать элементы внутри себя TextBoxWaterMark - текстбокс с фоном ToggleButton - чекбокс с картинкой Качать всё это счастье можно http://atlas.asp.net/default.aspx?tabid=47&subtabid=477. Радуйтесь, а я пока пойду разбираться с автозаполнением ![]() |
Автор: Exception 15.4.2006, 00:10 | ||||||||||||||
Автозаполнение Разобрался наконец-то ![]() Итак, для начала нам нужно создать Web-сервис, предоставляющий список строк для автозаполнения. Это сделать нетрудно. Вот код этого сервиса:
Работа этого сервиса проста. Если смотреть на него, как на "чёрный ящик", то можно составить такое описание метода GetWordList: GetWordList Параметры:
Например, если пользователь наберёт "c" на клавиатуре, то в ответ ему придут "chipset" и "cardinal", если, конечно, count больше или равен двум. Хорошо, мы написали сервис. Что дальше? Как обычно, добавьте на страницу контрол ScriptManager:
Далее, добавьте на форму самый что ни на есть обыкновенный TextBox:
Теперь приступим к самому главному. Для добавления к полю AutoComplete-поведения нобходимо объявить соответствующий элемент:
Этот контрол позволяет расширять любой TextBox на странице путём добавления соответствующего тега:
Всё просто, не так ли? Всё, автозаполнение работает! Полный код страницы:
В следующем обзоре мы рассмотрим, как сделать Drag&Drop на странице ![]() Успехов! |
Автор: Exception 15.4.2006, 15:19 | ||||||||||||||||
Drag & Drop Значит, так. На этот раз мы рассмотрим сразу два способа реализации Drag&Drop на странице. Способ №1 Сначала мы рассмотрим стандартный способ. Создайте новую страничку. Далее необходимо заполнить её контентом - дело в том, что панели "ездят", то есть двигаются только внутри самой страницы (что понятно), а посему не могут двигаться там, где страницы уже нет ![]() Допустим, у нас есть заполненная страничка. Теперь нужно проделать довольно-таки стандартную процедуру - поместить на страницу ScriptManager. Думаю, это Вы умеете ![]() Красивыми они у нас не будут - я сейчас не в настроении пускаться в дизайнерские изыски:
Теперь объявим класс CSS floatPanel:
Кстати, если не поставить background-color, то панель будет прозрачной. У нас есть страница и две панели. Что с ними делать? Нам нужно добавить к ним поведение Drag&Drop, то есть, чтобы их можно было двигать по всеёй странице. Для этого мы добавим на страницу ещё один контрол Atlas: DragOverlayExtender. Этот контрол является чем-то сродни AutoCompleteExtender (как мы потом узнаем, они на самом деле родня ближе чем по Control'у). Внутри него может быть помещён (и не один) тег DragOverlayProperties (да-да, это аналог AutoCompleteProperties). В нашем случае это будет выглядеть так:
Кстати, самое интересное, что при добавлении extender'а на страницу у панели появляется свойство DragOverlay с теми же параметрами - оно связывается с DragOverlayProperties. Вот и готова наша страница! Теперь две панели могут перемещаться по всей области страницы. Способ №2 Этот способ подразумевает наличие у Вас Atlas Controls Toolkit, о котором я говорил несколькими постами выше. Он является более удобным и совершенным. Давайте чуточку видоизменим панели. Для начала, уберите из стиля строку
Мы сделаем так, чтобы двигать панель можно было только за определённый участок. Добавим по "заголовку" в панели:
Собственно, объявим класс CSS panelHeader так:
Это будет та область, за которую можно "таскать" мышкой панель. Ну и самое главное - необходимо объявить DragPanelExtender из Atlas Control Toolkit. В нашем случае это объявление выглядит так:
Всё очень просто ![]() Полный код страницы (я пишу только для варианта № 2, для первого надо чуть изменить):
До скорых встреч! P.S. В следующий раз мы рассмотрим ещё парочку контролов из Atlas Control Toolkit, в частности, CollapsiblePanelExtender. |
Автор: TheAviator 23.4.2006, 12:44 |
I'm sorry А разве в ASP.NET 2.0 поддержка динамического обновления не встроена стандарным компонентам типа выпадающего списка и т.д? А зачем тогда Atlas ? |
Автор: Exception 23.4.2006, 14:10 |
Не встроена. |
Автор: celarent 14.7.2006, 12:21 |
здорово! на русском информации, связанной с Atlas мало. Так, в порядке интереса: не хотите этот текст таки отдельной статьей на http://www.ajaxplanet.ru повесить? icq 59375609 |
Автор: Pankon 17.7.2006, 14:17 |
Куда девается результат запроса (Atlas), если страница приемник была закрыта пользователем? И как отследить, что страница приемник была закрыта пользователем? Ну и до кучи - как организовать timeout для запросов при использовании atlas? |
Автор: Pankon 19.7.2006, 14:06 | ||||||
![]()
Все-таки хотелось бы найти решение следующей проблемы.
|
Автор: Exception 19.7.2006, 14:24 |
По сути, никак. Это вообще нереализуемо в web. |
Автор: Pankon 19.7.2006, 18:09 |
![]() |
Автор: mr.DUDA 19.7.2006, 21:11 |
Другое дело если используются Rich Client Applications ;) |
Автор: ivashkanet 5.10.2006, 13:52 | ||
Можно "заставить" клиента опрашивать сервер на том же Аяксе. Хотя я не представляю какой такой запрос может выполняться на сервере больше... ммм... 5-10 сек ![]() Добавлено @ 13:52 поправочка --- публичный запрос. Т.е. от любого встречного ![]() |
Автор: Pankon 5.10.2006, 14:35 | ||
Засекай время: 1. Загрузка файла (несколько МБ) на сервер с клиента. ![]() + 2. Чтение каждой строки из файла с последующим UPDATE соответствующих записей в БД... ![]() + 3. Сообщить пользователю, что его update успешно произведен и были актуализированы n-сотен тысяч записей... ![]() Стоп! Сколько у тебя получилось мммминут? И это очень простой пример.... ![]() |
Автор: ivashkanet 5.10.2006, 14:40 | ||
Интересно............. 1. Если передавать закончили и контрольная сумма не совпадает, то было закрытие 2. Нихрена не понял. Какой такой файл? Его что любой встречный-поперечный на сервер залить может? А его структура, ..... 3. Меньше сотой секунды ![]() Добавлено @ 14:43 Короче вся проблемма в 2. Но эта проблемма в архитектуре приложения |
Автор: Pankon 5.10.2006, 15:01 |
Ну, вообще, текстовый... И естественно не встречный-поперечный, а авторизованный пользователь - представитель фирмы(одной из фирм), которая и создает(как создает-это не важно) такой "специальный" файл для активизации данных портала, для уже "своих" юзверей... ПС. Вообще.. топик был про Atlas...... |
Автор: ivashkanet 5.10.2006, 15:06 |
Pankon, тогда ему, ИМХО, нужно дождаться. А хотя... Главное, что он отправил файл, а вот ответ сервера можно получить и позже (через час, например) Т.е. ответ тебе не нужен ![]() |
Автор: Red Wind 5.10.2006, 23:48 |
Здравствуйте. Есть такой вопрос. Как выложить сайт который построен с использованием атлас на хостинг? Выложил. Ошибок никаких не вылазит. Но фишки которые должны юзать атлас не палят. Может в Web.config надо что-нибудь подправить. Там ещё такая штука написана: <!-- The IFrameHandler enables a limited form of cross-domain calls to 'Atlas' web services. This should only be enabled if you need this functionality and you're willing to expose the data publicly on the Internet. To use it, you will also need to add the attribute [WebOperation(true, ResponseFormatMode.Json, true)] on the methods that you want to be called cross-domain. This attribute is by default on any DataService's GetData method. <add verb="*" path="iframecall.axd" type="Microsoft.Web.Services.IFrameHandler" validate="false"/> --> Так вот, что сделать, что бы атлас корректно заработал. |
Автор: Exception 19.10.2006, 03:26 |
А симптомы какие ![]() |
Автор: davandr 19.10.2006, 12:31 |
Скажите, пожалуйста, а можно ли применять Atlas технологию уже к существующему проекту, созданному не по шаблону 'Atlas' Web Site, а как обычный Web Site? Если да, то пару слов о том, как. |
Автор: ivashkanet 19.10.2006, 13:09 |
davandr, если в паре слов, то, ИМХО, да: Подключаешь библиотеку Atlas-а и юзаешь его фичи. Ведь, по сути, это обычная АСП .нэт страничка, только используящая "нестандартную" библиотеку ![]() |
Автор: davandr 19.10.2006, 13:18 |
Еще меня интересуют такие вопросы - можно ли использовать атлас без вэб-сервисов? - есть такая идея: сделать заполнение грида данными из базы по нажатию кнопки, т.е. я ввожу в каком-то текстбоксе начальные буквы (как в примере с автозаполнением), например, "12"? а мне в грид из базы считываются все соответсвующие строки где значение поля Name начинается с "12"? как такое возможно реализовать и возможно ли вообще? |
Автор: ivashkanet 19.10.2006, 13:24 |
Думаю да, но с сервисами все намного проще ![]() Возможно. Даже не особо сложно, а вот как --- в отдельную тему ![]() |
Автор: $tatic 23.10.2006, 09:56 |
Кстати мне показалось, или действительно многие Atlas-странички в IE не работают (или работают некорректно)? ![]() |
Автор: HUJG 19.12.2006, 16:15 | ||
Поставил AJAX 1.0 RC. Не могу из ф-ции JavaScript вызвать веб-сервис. Компилирую первый пример exeption-а, чуть его подредактировав (atlas->asp и
) При нажатии на батон, выдается ошибка на странице AtlasTest is undefined. |
Автор: Pankon 20.12.2006, 12:57 |
Медераторам: А не пора ли открыть новый форум - > ASP.NET AJAX аля ATLAS |
Автор: Madrid 20.12.2006, 15:15 |
Скачал файлик ASPAJAXExtSetup.msi по этой ссылке: http://www.microsoft.com/downloads/details.aspx?FamilyId=8FA6E076-582B-440F-95CB-C40ED23FDF59&displaylang=en Установил!В шаблонах сайтов в Visual Studio появляется иконка ASP.NET AJAX-Enabled Web Site, хотя выше прочёл что должен был появится пункт ASP .NET 'Atlas' Web Site. Дайте пожалуйста точную ссылку на Atlas! |
Автор: Дрон 20.12.2006, 15:17 | ||
Это нынче сложно. То, что называлось Atlas просто переименовали в ASP.NET AJAX ![]() |
Автор: Pankon 20.12.2006, 15:18 |
Зачем тебе ATLAS, он уже, можно сказать, устарел |
Автор: Madrid 20.12.2006, 16:04 |
т.е. тго что у меня есть вполне достаточно? |
Автор: Pankon 20.12.2006, 16:06 |
для реализации ассинхронных обрашений к серверу - ДА |
Автор: HUJG 20.12.2006, 16:29 |
Madrid Вот ссылка на Atlas если нужно http://www.microsoft.com/downloads/details.aspx?FamilyId=D746076A-3352-4407-B9D5-832BA4DFFC7B&displaylang=en В нем хоть у меня примеры работают, в отличии 1.0 RC ![]() |
Автор: Madrid 20.12.2006, 16:47 | ||
Благодарю!!!! |
Автор: Competitor 17.1.2007, 15:10 |
Насколько я понял, Ajax по большому счету нужен для того, чтобы дергать серверные методы из клиентского скрипта? Если не прав, поправьте |
Автор: Pankon 24.1.2007, 23:54 |
Ну вот и ASP.NET AJAX 1.0 от 23.01.2007 Читаем http://ajax.asp.net/ Качаем http://go.microsoft.com/fwlink/?LinkID=77296 |
Автор: Zakonnic 3.2.2007, 15:25 | ||||||
Хех... А у меня Atlas не захотел работать под Opera. Правда, это была старая версия, сейчас может умеет? В любом случае, реализовал вариант без Атласа, описанный в Wikipedia. Весь atlas заменяют 3 java-функции. Повозиться, правда, приходится. Зато все везде работает и ничего при этом не требует. Вот этот вариант, собранный из кусков и чуть подправленный: Default.aspx - обычная страница, где на onmouseover динамически подгружаются данные.
Service.aspx - тоже обычная страница, где удалено все ненужное.
Да! Все правильно. Там ничего больше нет. Хотя можете дописать и посмотреть, что приходит в ответ. Service.aspx.cs
За комментариями - в Википедию, статья "AJAX". |
Автор: Pankon 9.2.2007, 18:16 |
http://ajax.asp.net/ajaxtoolkit/Accordion/Accordion.aspx тоже не плохо |
Автор: Pankon 19.7.2007, 13:51 | ||
Часто встречающиеся исключение
http://weblogs.asp.net/leftslipper/archive/2007/02/26/sys-webforms-pagerequestmanagerparsererrorexception-what-it-is-and-how-to-avoid-it.aspx ПС. Ссылка предоставлена Idsa в одном из топиков |
Автор: EuGenius_Krivbass 30.1.2008, 13:26 |
Так а что? Цикл статей прекратился? Где обещанный CollapsiblePanelExtender? |
Автор: hahol 31.12.2008, 22:40 |
![]() емаааа народ ..... ваще чёт чашко я тут все понимаю =) наверно это изза того что я в асп меньше недели ) ) ) посоветуйте литературку - только просьба ))) - НА Русском - читабельную (что бы был учебник а не справочник , где все все все ... а как это использовать хз ((( ... ) а да .... чуть не забыл ))) у мя VS Team Edition 2008 в ней есть какието компоненты для работы с ajax они подойдут или надо качать с той ссцылки которую давал автор статей ? ![]() |