ASP .NET 2.0 Эталонные страницы


Оглавление (нажмите, чтобы открыть):

Развитие ASP.NET

Когда компания Microsoft выпустила ASP NET 1.0, даже она не ожидала, что эта технология будет принята с таким энтузиазмом. ASP NET быстро превратилась в стандарт для разработки веб-приложений с помощью технологий Microsoft и стала серьезным конкурентом для всех остальных платформ, предназначенных для разработки веб-приложений. С тех пор ASP.NET несколько раз обновлялась. В следующих разделах будет показано, как ASP.NET развивалась на протяжении этих лет.

ASP.NET 1.0 и 1.1

Когда версия ASP.NET 1.0 впервые вышла на арену, она главным образом ориентировалась на модель проектирования веб-страниц посредством так называемых веб-форм (Web Forms). Как будет объясняться позже, модель веб-форм представляет собой просто абстракцию, которая позволяет моделировать страницу в виде комбинации объектов.

При запросе браузером конкретной страницы ASP.NET сначала создает объект для самой страницы, а затем для всех остальных элементов управления ASP NET, которые присутствуют внутри нее. После этого страница и ее элементы управления проходят через ряд событий жизненного цикла, после чего — по завершении обработки страницы — они визуализируют окончательный вариант HTML и удаляются из памяти. За все, что происходит между этим, по большей части отвечает программирование ASP.NET.

ASP.NET 2.0

Благодаря удачному проектному решению ASP.NET 1.0 и 1.1, лишь несколько из появившихся в ASP.NET 2.0 изменений являлись исправлениями для существовавших функциональных возможностей. В целом в ASP.NET 2.0 была сохранена та же самая базовая абстракция (модель веб-форм) и просто добавлены новые возможности более высокого уровня, наиболее заметные из которых перечислены ниже:

Мастер-страницы

Мастер-страницы представляют собой многократно используемые шаблоны страниц. Например, их можно применять для обеспечения внутри каждой страницы в веб-приложении одинакового верхнего колонтитула, нижнего колонтитула и элементов управления навигацией.

Темы

Темы позволяют определять стандартный набор характеристик внешнего вида для веб-элементов управления. После определения их можно применять на веб-сайте, придавая ему единообразный внешний вид.

Навигация

Платформа навигации ASP.NET включает механизм для определения карт сайтов, которые описывают логическую организацию страниц на веб-сайте. Кроме того, имеется также набор навигационных элементов управления, которые используют эту информацию, чтобы предоставить пользователям возможность перемещаться по сайту.

Безопасность и членство

В ASP.NET 2.0 было добавлено несколько средств, связанных с безопасностью, в том числе автоматическая поддержка для хранения учетных данных пользователей, система авторизации на основе ролей и готовые элементы управления для решения типичных задач безопасности, таких как вход в систему, регистрация и восстановление забытого пароля.

Элементы управления источниками данных

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

Веб-части

Веб-приложением одного из наиболее распространенных типов является портал, предусматривающий централизованное размещение различной информации с использованием отдельных панелей на единственной веб-странице. Веб-части (Web Parts) предоставляют готовую платформу для создания портала с плавающей компоновкой, конфигурируемыми представлениями и даже поддержкой перетаскивания.

Профили

Профили позволяют сохранять касающуюся пользователей информацию в базе данных без написания специального кода. Вместо этого ASP.NET берет на себя выполнение всей трудоемкой работы по извлечению данных профилей, когда в этом возникает необходимость, и по их сохранению в случае внесения каких-то изменений.

Модель поставщиков

Многие из появившихся в ASP.NET 2.0 средств работают через абстракцию, которая называется моделью поставщиков. Прелесть этой модели состоит в том, что она позволяет использовать простые поставщики для создания кода страниц. Если требования изменяются, модифицировать страницы не понадобится — достаточно будет просто создать специальный поставщик и обновить конфигурацию веб-сайта.

Например, самые серьезно настроенные разработчики быстро поймут, что стандартная реализация профилей представляет собой слишком универсальное решение, которое может не удовлетворять конкретным имеющимся потребностям.

Например, если необходимо использовать какие-то существующие таблицы базы данных, сохранять зашифрованную информацию или настраивать объем кэшируемых данных для улучшения производительности, эта реализация точно не подойдет. Однако средство профилей можно настроить так, чтобы оно отвечало конкретным потребностям за счет создания собственного поставщика профилей. Это позволит пользоваться удобными средствами профилей, но управлять низкоуровневыми деталями.

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

ASP.NET 3.5

Разработчикам, впервые столкнувшимся с версией ASP.NET 3.5, наверняка интересно узнать, что случилось с версией ASP.NET 3.0? Как ни странно, но таковая не существует. В Microsoft под названием .NET Framework 3.0 выпустили набор следующих новых технологий: WPF (Windows Presentation Foundation), представляющая собой новую привлекательную технологию по построению пользовательских интерфейсов для создания многофункциональных клиентов; WCF (Windows Communication Foundation), которая является технологией для создания ориентированных на сообщения служб; и WF (Windows Workflow Foundation) — технология, позволяющая моделировать сложные бизнес-процессы в виде последовательности действий (дополнительно с применением визуального конструктора).

Однако .NET Framework 3.0 не включает новой версии CLR или ASP.NET. Следующая версия ASP.NET появилась в .NET Framework 3.5.

По сравнению с ASP NET 2.0, версия ASP. NET 3.5 представляет собой более плавное развитие. Новые функциональные возможности в этой версии относятся в основном к двум таким технологиями, как LINQ и Ajax.

Технология LINQ

Технология LINQ (Language Integrated Query — язык интегрированных запросов) представляет собой набор расширений для языков C# и Visual Basic. Она позволяет писать на C# или Visual Basic код, способный манипулировать находящимися в памяти данными во многом в той же манере, что и запросы к базе данных.

Исчерпывающую информацию по LINQ ищите в следующем разделе — LINQ.

Технология ASP.NET AJAX

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

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

Разработчикам веб-приложений удается обходить подобные ограничения за счет применения языка JavaScript, который является пока что единственным широко поддерживаемым языком для написания клиентских сценариев. В ASP.NET во многих наиболее мощных элементах управления присутствует приличный объем кода JavaScript.

Например, элемент управления Menu немедленно реагирует на наведение пользователем курсора мыши на различные подзаголовки. При его использовании страница не производит обратную отправку серверу до тех пор, пока пользователь не щелкнет на каком-то элементе.

Разработчики используют серверные элементы управления вроде Menu внутри традиционных страниц ASP.NET и получают преимущества, которые предоставляют встроенные в элементы клиентские сценарии. Но даже в случае применения таких более совершенных элементов управления обратная отправка данных серверу все равно неизбежна.

Например, если необходимо обновить информацию в какой-то части страницы, единственно возможным вариантом в случае обычной страницы ASP.NET является обратная отправка этой страницы серверу и получение совершенно нового HTML-документа. Такое решение работает, но далеко от идеала.

Поэтому разработчики начали пытаться решить эти проблемы за счет использования дополнительного клиентского кода и его применения более совершенными способами. Одним из наиболее обсуждаемых на сегодняшний день примеров является технология программирования клиентской стороны под названием Ajax (Asynchronous JavaScript and XML — асинхронный JavaScript и XML).

Ajax позволяет странице связываться с сервером и обновлять содержимое без полной обратной отправки. Обычно в странице Ajax используется код клиентского сценария для выполнения асинхронного запроса «за кулисами». Сервер получает этот запрос, выполняет некоторый код и затем возвращает необходимые странице данные (зачастую в виде блока XML-разметки).

После этого клиентский код получает новые данные и использует их для выполнения еще какого-то действия, например, для обновления части страницы. Хотя концептуально Ajax является довольно простой технологией, она позволяет создавать страницы, которые функционируют очень похоже на непрерывно выполняющиеся приложения.

Чтобы посмотреть на пример работы Ajax не нужно далеко ходить. На нашем сайте данная технология используется в строке поиска. Когда вы вводите текст в поле поиска данные, полученные из базы данных, автоматически обновляются в списке «Полезные ссылки» без перезагрузки самой страницы.

ASP.NET 4

В самой последней версии ASP.NET предлагаются новые улучшения и усовершенствования. Наиболее значительные из них перечислены ниже:

Согласованная визуализация XHTML

В ASP.NET 3.5 стала возможной визуализация веб-страниц ASP.NET в виде HTML-документов, но тогда ничего не подозревающим разработчикам все равно требовалось позаботиться о нескольких вещах (например, корректировать параметры в конфигурационном файле для получения по-настоящему правильного XHTML). В ASP.NET 4 этих шероховатостей больше нет, и XHTML получается достаточно чистым и без всяких требующих внимания особенностей.

Обновленное обнаружение браузера

В ASP.NET 4 поставляются обновленные файлы определений браузеров, что позволяет отвечающему за визуализацию механизму на стороне сервера распознавать и предоставлять корректно направленную поддержку для более широкого спектра браузеров. Улучшена поддержка следующих браузеров: Internet Explorer 8, Firefox 3.5, Opera 10, Safari 4, а также мобильные браузеры для устройств BlackBerry, IPhone, IPad и Windows Mobile.


Сжатие данных состояния сеансов

В NET 2.0 появилось новое пространство имен System.I0.Compression, обеспечивающее поддержку сжатия gzip. Теперь ASP.NET его может использовать для сжатия данных, передаваемых функционирующей за пределами процесса службе состояния сеансов. Применение подобного приема может быть целесообразно только при весьма ограниченных обстоятельствах, но когда это действительно подходит, производительность улучшается почти автоматически.

Состояние представления по запросу

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

Расширение возможностей для кэширования

Кэширование является одной из главных функций в ASP.NET, но за исключением зависимостей кэша SQL Server, никакими новыми возможностями кэширование со времен .NET 1.0 не пополнялось.

В ASP.NET 4 разработчики из Microsoft, наконец, начали предлагать точки для расширения возможностей кэширования, которые позволят им (и другим разработчикам) использовать новые типы механизмов кэширования, в том числе распределенные решения кэширования вроде Windows Server AppFabric и memcached.

Элемент управления Chart

В течение многих лет разработчики приложений ASP.NET должны были осваивать модель рисования GDI+ или приобретать элементы управления у сторонних производителей для создания более-менее прилично выглядящих диаграмм.

Теперь в составе ASP.NET предлагается впечатляющий элемент управления Chart, который позволяет создавать целый ряд красиво визуализируемых двух- и трехмерных диаграмм (в том числе линейных, столбчатых, с кривыми, секторных, тороидальных и точечных с элементами вроде планок, погрешностей и линий Боллинджера внутри).

Переделанный интерфейс Visual Studio

Хотя интерфейс Visual Studio 2010 в целом сохранил прежний дизайн, он был полностью переделан с использованием .NET и WPF (Windows Presentation Foundation). Кроме того были добавлены новые средства вроде расширенной функции IntelliSense.

Маршрутизация

В ASP.NET MVC включена поддержка для осмысленных и дружественных в отношении поисковых механизмов URL-адресов. В ASP.NET 4 можно использовать ту же самую технологию маршрутизации для перенаправления запросов веб-форм.

Более эффективные инструменты для развертывания

В Visual Studio теперь можно создавать так называемые веб-пакеты т.е. сжатые файлы, включающие в себя содержимое приложения и прочие детали, такие как схемы баз данных SQL Server и настроек IIS.

Веб-пакеты также работают вместе с новым средством трансформации web.config, позволяющим четко разделить параметры, которые должны применяться к тестовой сборке приложения, и параметры, применяемые к развертываемому экземпляру.

Наконец, упрощена загрузка и предварительная компиляция нового развертываемого приложения за счет использования модуля подготовки приложений IIS (Application Warm-Up).

Хотя все перечисленные средства, несомненно, полезны, наиболее впечатляющие новые добавления для разработки приложений ASP. NET поставляются в двух дополнительных компонентах — ASP.NET MVC и ASP.NET Dynamic Data. Оба средства предлагают забыть о части традиционной модели разработки ASP.NET и использовать вместо нее другой подход, обладающий как своими преимуществами, так и своими недостатками.

Во многих отношениях они являются началом нового направления в области программирования веб-приложений. Если какой-то из них подходит для удовлетворения имеющихся потребностей, он может значительно сократить объем выполняемых работ.

Компонент ASP.NET MVC

Компонент ASP.NET MVC (Model-View-Controller — модель-представление-контроллер) предлагает совершенно другой способ для построения веб-страниц по сравнению со стандартной моделью веб-форм.

Суть его состоит в разбиении приложения на три отдельных логических части. Модель включает весь бизнес-код приложения, например, логику доступа к данным и правила верификации. Представление создает для модели подходящее представление за счет ее визуализации в HTML-страницы. Контроллер координирует весь этот процесс за счет обработки операций взаимодействия с пользователем, обновления модели и передачи информации в представление.

В схеме MVC некоторые традиционные концепции ASP.NET, в том числе веб-формы, веб-элементы управления, состояние представления, обратные отправки и состояние сеанса, отходят на второй план. Это вынуждает разработчиков учиться смотреть на вещи по-другому (и мириться с временным спадом продуктивности).

Одним схема MVC кажется более чистой и больше подходящей для веб-приложений. Другие считают, что она заставляет прилагать дополнительные усилия и никакой очевидной выгоды при этом не приносит. Но если хоть какой-нибудь из перечисленных ниже моментов является важным, обязательно стоит рассмотреть вариант применения ASP.NET MVC:

Разработка через тестирование. Благодаря четкому разделению частей в приложении ASP.NET MVC, можно легко создать для него модульные тесты. В случае применения веб-форм автоматизированное тестирование является утомительным и зачастую невозможным.

Контроль над HTML-разметкой. В случае веб-форм программировать приходится с использованием развитого набора объектов, которые сами заботятся об управлении состоянием и генерацией HTML-разметки. В случае ASP.NET MVC содержимое вставляется больше похожим на привязку данных образом.

И хотя это означает, что проектирование страниц со сложным форматированием может потребовать больших усилий, это также означает возможность полностью контролировать каждую деталь в разметке. Это очень полезно при планировании написания какого-то клиентского сценария JavaScript либо использования сторонней библиотеки сценариев JavaScript, такой как jQuery. (С другой стороны, если нет желания возиться с HTML, то веб-формы будут более подходящей платформой для разработки приложений.)

Контроль над URL-адресами. Хотя ASP.NET разработчикам продолжает предлагаться больший контроль над маршрутизацией URL-адресов, в ASP.NET MVC эта концепция является встроенной.

За сопоставление URL-адресов и логики приложения отвечают контроллеры, а это значит, что вместо /Products/List.aspx?category=Beverages можно использовать такие конфигурации URL, как /Products/List/Beverages. Такие понятные и удобные для чтения URL-адреса упрощают и делают более эффективной поисковую оптимизацию.

Однако если вы предпочитаете иметь возможность проектировать приложения быстро за счет применения высокоуровневой модели, способной заботиться об управлении состоянием самостоятельно, и набора многофункциональных веб-элементов управления, то моделью разработки по-прежнему остаются веб-формы.

Компонент ASP.NET Dynamic Data

Компонент ASP.NET Dynamic Data (Динамические данные ASP.NET) представляет собой вспомогательную платформу, которая позволяет быстро создавать управляемые данными приложения. При использовании в сочетании с LINQ to SQL или LINQ to Entities (как бывает практически всегда) он предоставляет комплексное решение, проводящее от схемы базы данных до полнофункционального веб-приложения с поддержкой для просмотра, редактирования, вставки и удаления записей.

Важно понимать, что Dynamic Data является не просто средством для генерации кода и разметки, облегчающим жизнь разработчикам, которые ленятся разрабатывать собственные специальные приложения. Вместо этого он представляет собой основанную на шаблонах, состоящую из различных компонентов и детально настраиваемую платформу, которая идеально подходит для создания приложений, ориентированных на данные.

На самом деле Dynamic Data может рассматриваться как логическое расширение многофункциональных элементов управления данными, которые уже имеются в ASP.NET (наподобие GridView, DetailsView и FormView). Но вместо того, чтобы заставить изменять множество различных элементов управления данными на множестве различных страниц для получения желаемого эффекта, Dynamic Data позволяет использовать шаблоны полей, которые определяются один раз и применяются везде.

Если объединить такое чистое проектное решение с новыми средствами, такими как проверка достоверности на основе схемы данных и упрощенная фильтрация на основе отношений внешнего ключа, то станет сразу же понятно, почему Dynamic Data является столь привлекательной платформой для разработки веб-приложений, фокусирующихся на просмотре и редактировании записей в базах данных.

ASP .NET 2.0: Эталонные страницы

Вы можете найти рассылки сходной тематики в Каталоге рассылок.

Статистика

Программирование (VB,C#,ASP,.NET): новости, советы, примеры

Выпуск # 36

Новый выпуск!

Здравствуйте!
Очередной выпуск рассылки Kbyte.Ru!

Содержание выпуска

Голосование на Kbyte.Ru

Голосование на Kbyte.Ru через E-Mail!
Чтобы проголосовать через E-Mail, выберите ответ, если у Вас настроен почтовый клиент, должно появиться окно с новым сообщением, ничего не изменяйте, а просто отправьте пустое письмо и в течение некоторого времени Ваш голос будет зачтен.
Для голосования через сайт, перейдите по этой ссылке: http://kbyte.ru/Voting/. Как часто Вы посещаете наш сайт?
Каждый день ( 5 )
Довольно часто ( 2 )
Два-три раза в неделю ( 5 )
Один раз в неделю ( 0 )
Несколько раз в месяц ( 0 )
Как придется ( 1 )
Я здесь впервые и обязательно зайду еще ( 0 )
Я здесь впервые и больше не приду ( 2 )

Всего голосов: 15

Последнее на форумах

Добрый день!
У меня следующая проблема, есть код, что-то подобное:
Try
If a = 1 Then
Return 2
End If
If a = 2 Then
Return 3
End If
Return 0
Catch
Return 0
Finally

End Try

Это код функции, насколько я понимаю, последний Return 0 в блоке Try выполняться не должен, если, например a = 1 или a = 2, но, он выполняется!? В режиме Deabug видно, что a = 1, происходит Return 2, а потом Return 0, при этом, обращение в блок Catch не происходит, т.е. ошибки нет. Почему так происходит!?


Очень срочно нужно создать в ASP .NET динамически контрол DataList и заполнить его данными, так, как будто он уже был размещен на странице.
Как это сделать? Хелп! Горю!!

Как это сделать?

.NET + сжать папку в zip | Автор: ANATARIUS
Добавлено: 26.10.2006 / 11:30 | ответов: 2 | просмотров: 12

Доброе время суток!
С файлами я вроде разобрался, а вот как на Visual Basic .NET сжать всю папку в zip?

To Edlin | Автор: ANATARIUS
Добавлено: 26.10.2006 / 04:32 | ответов: 5 | просмотров: 22

Тут кто-то говорил, что делается раздел Примеры кодов. А можно узнать, когда на него можно будет посмотреть?

Доброе время суток!
Есть такая функция — Join, как ее использовать для ArrayList?
Я пробую, но у меня происходит какая-то ошибка 🙁

Привет!
Я нашел, чем можно прочитать текст, но он почему-то читает только английский текст!?
Помогите, что я делаю не так?

Привет!
Подскажите куда копать для создания авторизации?

Запущена перавая бета-версия FMC.
Подробности смотрите в разеделе «Мой профиль».

Последние статьи

Эта статья будет полезна только тем людям, у которых установлен Microsoft Word 2000 или выше! Мы научимся делать всё возможное с документами MS WORD при помощи VB 2003/2005 .NET.

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

ASP .NET 2.0: Эталонные страницы
Автор: Немиро Алексей | добавлено: 27.08.2006 / 04:08 | просмотров: 718

Как известно, большинство сайтов имеют однотипную, общепринятую разметку страниц, неотъемлемой частью которой является верхний и нижний колонтитулы и, пожалуй, самая главная часть — тело страницы, хотя конечно, бывают и исключения. ASP .NET 2.x предлагает уникальный метод создания одинаковой разметки для страниц сайта – это использование, так называемых, эталонных страниц. Если вы работали с ранними версиями ASP(ASP, ASP .NET 1.x), то, наверное, помните, что постоянно приходилось копировать HTML-код страницы с элементами ASP. Конечно, использование включаемых файлов (include) в классическом ASP, и пользовательских элементов управления (*.ascx) в ASP .NET 1.x, значительно упрощало разработку Web-сайтов, но это не сравнится с тем, что предлагает ASP .NET 2.x.

Описание ошибок VB
Автор: [root] | добавлено: 29.07.2006 / 06:58 | просмотров: 853

В данном обзоре содержится русскоязычное описание ошибок Visual Basic 5.0/6.0.

Горячие клавиши VB 6.0
Автор: [root] | добавлено: 20.07.2006 / 13:21 | просмотров: 1003

В данном обзоре рассмотрены горячие клавиши Visual Basic 5.0/6.0, которые значительно ускоряют процесс разработки и тестирования программ.

ASP .NET 2.0: Файл Global.asax
Автор: Немиро Алексей | добавлено: 17.07.2006 / 18:04 | просмотров: 888

Файл Global.asax является необязательным файлом приложений ASP .NET и содержит дополнительный код, отвечающий за обработку событий, происходящих на уровне приложения. Этот файл должен находиться в корневом каталоге Web-приложения. В ASP .NET 1.1 сей файл автоматически создавался Visual Studio при создании нового Web-проекта, в ASP .NET 2.0 Visual Studio Global.asax автоматически не создает, но его можно добавить в проект вручную. Все изменения, внесенные в файл Global.asax отслеживаются средой ASP .NET, и приложение перезагружается.

Как узнать страну по IP-адресу?
Автор: Amit Gupta | добавлено: 17.07.2006 / 08:09 | просмотров: 32761

Интернет широко распространен в большинстве стран и континентов. Узнать страну посетителей вашего веб-сайта может быть не легкой задачей, особенно если вы не знаете как это сделать.

В этой статье мы создадим пример базы данных Microsoft Access и пользовательский интерфейс в среде Visual Basic 6.0. Сделать это будет относительно несложно, поскольку для работы с нашей базой данных мы будем использовать компонент ADODC Componenet (Microsoft ADO Data Control 6.0 (OLEDB)). Мы добавим DataEnvironment и DataReport и буквально, в течении минуты, мы уже сможем экспортировать наш DataReport в Microsoft Word Document. (.doc).

Наследование в VB.Net
Автор: Увалиев Николай (Neco) | добавлено: 16.04.2006 / 03:22 | просмотров: 1192

Если кто-нибудь уже сталкивался с мелкомягким контролом DataGridView, то наверняка порадовался обилию возможностей, которые он предлагает. Однако, когда дело доходит до реального кодинга, начинаешь хотеть чего-то большего. Мне, к примеру, понадобилось, чтобы внутри таблицы был ComboBox – конечно, он там есть, но мне понадобилось, чтобы в нём можно было ЛИБО печатать, ЛИБО выбирать. Т.е., если в списке не оказалось нужной нам вещицы, то мы могли впечатать её и тем самым дополнить список.

Форум своими руками, на ASP
Автор: Немиро Алексей | добавлено: 08.04.2006 / 12:13 | просмотров: 2119

Как известно, форум – это средство общения пользователей сети Интернет, и в тоже время, это большой справочник вопросов и ответов определенной тематики, и, пожалуй, ни один современный сайт не может обойтись без форума. В данной статье я расскажу, как можно быстро сделать собственный форум на ASP, причем, для этого не надо никуда ходить, искать и закачивать какие-либо дополнительные программы, и даже вовсе не обязательно быть программистом. Для этого достаточно иметь Windows 2000/XP и комплект программ MS Office, а именно — MS Access. В качестве реактора ASP-страниц, можно использовать обычный Блокнот.

Интересные коды и решения

Как получить строку параметров текущего запроса?
Дата добавления: 31.07.2006 / 15:38 | просмотров: 169 | платформа: ASP .NET (VB)

Как создать новую папку (каталог)?
Дата добавления: 31.07.2006 / 12:36 | просмотров: 179 | платформа: VB

Как поменять заголовки всех окон в системе?
Дата добавления: 31.07.2006 / 12:51 | просмотров: 161 | платформа: VB

Проверить существование каталога (папки)
Дата добавления: 31.07.2006 / 17:37 | просмотров: 122 | платформа: ASP .NET (VB)

Как отправить E-Mail?
Дата добавления: 01.08.2006 / 11:52 | просмотров: 202 | платформа: ASP

Проверка существования директории
Дата добавления: 31.07.2006 / 12:41 | просмотров: 184 | платформа: VB

Как установить анимированный курсор?
Дата добавления: 16.08.2006 / 19:49 | просмотров: 135 | платформа: VB

Перекодировка текста с латинской раскладки в русскую
Дата добавления: 16.08.2006 / 19:12 | просмотров: 174 | платформа: VB

Как программно изменить тему страницы?
Дата добавления: 31.07.2006 / 13:40 | просмотров: 147 | платформа: ASP .NET (VB)

Как преобразовать десятичное число в шестнадцатеричное?
Дата добавления: 16.08.2006 / 20:25 | просмотров: 132 | платформа: VB

Юмор на Kbyte.Ru

«Придите и уберите скрепку, которая стучится по стеклу изнутри экрана. Я не могу из-за нее работать. Она мне все нервы измотала! Она постоянно говорит мне, что я не умею печатать! Это вы, наверное, нарочно сделали! Я ненавижу этот компьютер. «

Рейтинг: 157
Всего голосов: 230
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

— Дети, что для вас было труднее всего в третьем классе?
— Объяснять продавщице, для кого покупается водка!

Рейтинг: 34
Всего голосов: 60
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

— Михал Ефремович, а как вы намерены бороться с этими, как их там, зарплатами в конвертах?
— Да нет ничего проще, Владимир Владимирович, запретим конверты!

Рейтинг: 119
Всего голосов: 195
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

Гуляя по лесу, программист набрел на пещеру.
— А! — крикнул он.
— А. А. А. — ответило эхо.
— Эхо! — позвал он.
— Echo is ON, — ответило эхо.

Рейтинг: 43
Всего голосов: 62
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

Конфеты для программистов: «Мышки на сервере».

Рейтинг: 33
Всего голосов: 65
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1


В нашем подъезде около охранника стоит аквариум с рыбками. Аквариум большой, рыбки красивые. За ними постоянно ухаживают. Рядом на стенде висит объявление: «Рыбок не кормить!»
Ниже нетрезвой дрожащей рукой подписано: «А поить можно».

Рейтинг: 48
Всего голосов: 72
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

Чем русский отличается от цыгана? Цыган никогда не хает тех, у кого он коня своровал.

Рейтинг: 45
Всего голосов: 63
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

Удалить папку вместе с ее содержимым?

Рейтинг: 32
Всего голосов: 65
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

Рабинович узнал о возвращении Гагарина на Землю:
— Вылететь из Советского Союза, облететь вокруг земли — и все это для того, чтобы снова вернуться!

Рейтинг: 26
Всего голосов: 41
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

Приходит новый русский в магазин и говорит:
— Дайте мне надувную постель 2 метра в длину, 2 метра в ширину и чтобы внутри морская вода была с подсветкой, рыбками, крабами и всякими морскими штуками.
Ночь, новый русский лег спать на новую постель. Вдруг из постели на него глаз смотрит. Новый русский:
— Ты кто?
— Кто, кто Кусто!

Рейтинг: 29
Всего голосов: 42
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

Выпуск подготовил: R-KDR-19826

Copyright (c) Nemiro AS, 2005-2006

Знакомство с ASP.NET 2.0

Written on 27 Декабря 2006 . Posted in ASP.NET

ОГЛАВЛЕНИЕ

Каждый раз, разрабатывая проект и создавая Web-приложение, пользуются различными средствами для создания архитектуры приложения, редактирования кода и публикации результатов своего труда на Web-сервере. При этом для конечного пользователя Web-приложение любой сложности остается набором HTML-страниц, каждая из которых имеет свой уникальный URL. По большом счету, пользователю нет дела до того на какой платформе или с использованием какой технологии создано приложение. У пользователя есть цель, которую он хочет достичь и универсальное средство, практически любой используемый им Web-браузер. В этом заключено огромное преимущество приложений для Internet по сравнению с приложениями для настольных систем – существование общепринятого «языка общения», HTML кода. Для того, чтобы развернуть Web-приложение достаточно установить его на сервер, после чего приложение может быть доступно любому клиенту с установленным Web-браузером. К сожалению, здесь тоже существует очевидная проблема в обработке HTML кода браузерами разных производителей.

Задача разработчика заключается в том, чтобы создать приложение, генерирующее HTML код, оптимальный для большинства браузеров, которыми пользуется конечный пользователь. Каждая технология, используемая для создания Web-приложения, позволяет генерировать HTML код, поэтому, в конечном итоге, выбор технологии, на основе которой будет создано Web-приложение, зависит лишь от удобства и скорости разработки и простоты развертывания и поддержки конечного продукта.

Преимущество технологии ASP.NET перед остальными в высокой степени абстракции, построенной над стандартным HTML кодом: использование объектно-ориентированной парадигмы, поддержку нескольких языков программирования, наличие универсального основания, содержащего тысячи уже готовых для использования в проектах решений – Microsoft .NET Framework.
При этом для разработки приложения может быть использована любая среда разработки или даже текстовый редактор, позволяющий создавать, редактировать и сохранять текстовые файлы. Если же разработчик желает воспользоваться всей мощью Microsoft .NET Framework и ASP.NET и, при этом, затратить как можно меньше усилий, то ему нужно воспользоваться подходящей для его задач средой разработки. Одним из наиболее эффективных средств создания Web-приложений ASP.NET является Microsoft Visual Studio. Поддержка ASP.NET 2.0 включена в версию Visual Studio 2005.

В данной статье кратко рассказывается о большинстве новых возможностей ASP.NET 2.0, новой версии среды ASP.NET. Далее в тексте считается, что читатель знаком с технологией ASP.NET 1.0 или ASP.NET 1.1. Если рассматриваемая тема выходит за рамки статьи, то непосредственно в тексте располагается гиперссылка на статью, содержащую подробную информацию. Также, в конце статьи приводится список литературы в порядке изложения информации в данной статье.

Использование нескольких языков программирования

Microsoft .NET Framework и Visual Studio 2005 поддерживает несколько языков программирования, таких как Visual Basic, Visual C#, Visual C++, Visual J#. Поскольку эти языки используют единую среду выполнения CLR (Common Language Runtime) и соответствуют общим стандартам CLS (Common Language Specification), то сборка, созданная с применением одного из .NET языков, может быть использована в проекте, разрабатываемом на другом языке программирования, также, как если бы эта сборка и приложение были написаны на одном и том же языке.

С выходом Microsoft .NET Framework 2.0 стало возможно использовать в одном и том же проекте разные языки программирования. То, что Web-приложение ASP.NET может быть написано на нескольких языках программирования, очень удобно, если уже есть проверенные решения на одном из языков, а проект пишется с использованием другого языка, либо, если в команде имеются разработчики, использующие различные языки программирования. О том, как использовать разные языки в одном проекте можно прочитать вэтой статье.

Технология разделения кода

Основа всего в Web-приложении – это страница. Пользователь, пользуясь браузером, перемещается между страницами, периодически возвращаясь к уже просмотренным ранее страницам, вводя какие-то данные в HTML формы и получая некоторый результат. В ASP.NET страница чаще всего представляет собой Web-форму, содержащую различные элементы управления, реагирующую на события, создаваемые пользователем.

ASP.NET 1.x позволяет разделять код логики от кода представления, то есть помещать код программной логики страницы в файл .cs или .vb, отдельно от кода собственно страницы, размещаемом в .aspx файле. Эта технология называется Code-Behind. Таким образом, дизайн страницы может быть изменен не затрагивая кода страницы, что позволяет разделить ответственность за внешний вид и работу страницы между дизайнером и программистом. Для этого в .aspx файле можно задать параметры директивы Page.

Но для поддержки редактирования с помощью Microsoft Visual Studio .NET в ASP.NET странице необходимо указать класс, соответствующей данной странице и файл, в котором находится код этого класса. Для этого директива Page преобразуется с использованием ключевых слов Codebenind и Inherits.

В ASP.NET 2.0 используется иной механизм разделения кода. В директиве Page при этом необходимо использовать другие ключевые слова: CodeFile и Inherits.

В этом случае код класса программной логики страницы будет размещен в файле указанном в атрибуте CodeFile. Надо отметить, что Visual Studio 2005 использует разделяемые классы (partial classes).

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

Используемая в Visual Studio 2003 модель Code-Behind обладает несколькими весьма существенными недостатками. Прежде всего, используя Visual Studio разработчику необходимо компилировать проект перед публикацией, поскольку ASP.NET компилирует страницы, только если указан атрибут Src, не используемый Visual Studio. При этом, поскольку среда ASP.NET обнаруживает изменение даты создания сборки, после каждой замены старой сборки в каталоге bin происходит перезапуск домена приложения, что выливается во временную «заторможенность» в работе приложения.
Visual Studio 2005 использует новые ключевые слова, поддерживаемые средой выполнения ASP.NET 2.0, а среда выполнения, в свою очередь, использует новую технику компиляции страниц. Это позволяет решить проблему замены сборки на более новую.

Несмотря на это, Visual Studio 2005 по-прежнему позволяет отказаться от разделения кода и поместить код программной логики в самом файле страницы, и использовать теги . Более того, по умолчанию Visual Studio создает именно страницы без разделения кода.

Компиляция страниц по требованию

Сравним действия, которые совершает ASP.NET 2.0 и ASP.NET 1.0, когда пользователь запрашивает файл с расширением .aspx. В ASP.NET 1.x среда выполнения анализирует директиву Page страницы, осуществляет поиск соответствующего класса в сборке приложения, затем на основании кода страницы создается класс, производный от класса программной логики страницы. В случае если сборка отсутствует, то осуществляется поиск файла программной логики, указанного в атрибуте Src директивы Page. Если файл найден, то происходит компиляция сборки, если нет, то ASP.NET выбрасывает исключение.

В ASP.NET 2.0 среда выполнения также анализирует директивы Page, осуществляет поиск сборки соответствующей классу логики страницы, после чего создается класс страницы. В отличие от ASP.NET 1.x, родительским классом для класса страницы является System.Web.UI.Page, поскольку создаваемый динамический класс является собственно классом страницы (используются разделяемые классы для класса страницы и класса программной логики), а не потомком класса программной логики. Поэтому, если в ASP.NET 1.x класс Web-формы мог называться также как и сама Web-форма.

В ASP.NET 2.0 это недопустимо, поскольку элемент управления System.Web.UI.Form является элементом класса.

Основным преимуществом ASP.NET является то, что в случае отсутствия сборки, необходимой для выполнения страницы, происходит компиляция только файла программной логики страницы, без перекомпиляции всей сборки.Поскольку существует динамическая компиляция, то необходимо обеспечить возможность создавать код, общий для всех страниц приложения. Для этой цели в ASP.NET 2.0 существуют специальные директории, являющиеся дочерними директориями корневой директории приложения, одна из которых App_Code, служит для хранения файлов, содержащих общий код для всех страниц. При выполнении динамической компиляции, код из директории App_Code компилируется и становится доступным для всех страниц Web-приложения. При этом Visual Studio 2005поддерживает код, находящийся в директории App_Code,поэтому работает подсветка синтаксиса и IntelliSense.

Исследовать генерируемые средой выполнения ASP.NET 2.0 файлы, и подробно разобраться в процессе компиляции можно изучив содержимое директории: %WINDIT%\Microsoft.NET\Framework\версия\Temporary ASP.NET Files\имя_приложения, куда ASP.NET 2.0помещает динамически созданные сборки. Либо, вызвав ошибку на ASP.NET страницев режиме отладки выбрать ссылку Show Complete Compilation Source.

Если же необходимо заренеескомпилировать проект, перед развертыванием на сервере в ASP.NET 2.0 существует возможность полной или частичной прекомпиляции Web-приложения. Подробнее о прекомпиляции можно прочесть в этой статье.

Изменения в структуре проекта Visual Studio

В версии Visual Studio 2005 больше нет файлов .csproj или .vbproj, которые раньше создавались для каждого из типов проектов ASP.NET. Вместо файлов проекта Visual Studio использует структуру директорий, таким образом, для того чтобы включить в проект существующий файл достаточно просто скопировать его в директорию проекта. Следует отметить, что если файл или директория удаляется из дерева файлов проекта в окне Solution Explorer, то файл или директория физически удаляются из файловой системы.

Страница ASP.NET 2.0

Директива @Page

Для внесения новых возможностей в ASP.NET 2.0 было необходимо внести изменения и дополнения в класс страницы Page.Поскольку для установке свойств страницы в design-time используются атрибуты директивы Page, то здесь будут рассмотрены новые атрибуты, появившиеся для реализации механизмов персонализации, шаблонов дизайна, оформления и асинхронной работы станиц. Подробнее о назначении новых атрибутов можно узнать в части статьи, посвященной новым свойствам и методам класса Page.

Указывает на то, какой из интерфейсов IHttpHandler или IHttpAsyncHandler реализует класс страницы. После установки этого атрибута в true, генерируемый динамически класс страницы будет реализовать от IHttpAsyncHandler, в противном случае класс будет реализовать IHttpHandler. Если класс страницы реализует IHttpAsyncHandler, то код страницы может выполнятся асинхронно до наступления нового события в жизненном цикле страницы PreRender, ко времени наступления которого происходит синхронизация и подготовка HTML-кода для отправки браузеру клиента.

Позволяет установить ограничение по времени, отведенное для выполнения асинхронных операций. По умолчанию этот параметр равен 45 секундам.

Устанавливает набор региональных параметров (Culture), используемый для страницы.

Позволяет включить или выключить поддержку тем оформления. По умолчанию включено.

Указывает путь к шаблону, который будет использован для создания кода этой страницы.

Позволяет установить идентификатор темы оформления, которая будет использоваться для изменения установленной темы оформления (в атрибуте Theme или в файле web.confg).Таким образом можно установить общую тему оформления для всего сайта, а с помощью атрибута StyleSheetTheme вносить некоторые изменения в общее оформление страницы и/или некоторых элементов управления, содержащихся на странице.


Указывает название темы оформления, которая будет использована для оформления кода данной страницы.

Устанавливает набор региональных параметров (Culture), используемый для пользовательского интерфейса страницы.

Жизненный цикл страницы

Жизненный цикл страницы ASP.NET начинается с получения и обработки Web-сервером IIS запроса к данной странице и передачи этого запроса среде выполнения ASP.NET. В момент получения запроса, среда выполнения загружает класс вызываемой страницы, устанавливает свойства класса страницы, выстраивает дерево элементов, заполняет свойства Requestи Response и вызывает метод IHttpHandler.ProcessRequest.После этого среда выполнения проверяет каким образом была вызвана эта страницы и если страница вызвана путем передачи данных с другой страницы, о чем будет рассказано далее, то среда выполнения устанавливает свойство PreviousPage.

Стоит отметить также, что помимо рассмотренных ниже этапов выполнения страницы существуют еще и этапы уровня приложения, не специфичные для страницы. Подробно об этапах выполнения приложения написано вэтой статье.

Этап Описание
Запрос станицы Запрос страницы осуществляетс ядо начала жизненноцо цикла страницы. Когда пользователь осуществляет запрос, среда выполнения ASP.NET устанавливает, необходимо ли осуществить компиляцию страницы и начать жизненный цикл, либо можно выдать в качестве ответа страницу из кеша, таким образом не выполняя страницы.
Начало жизненного цикла На этом этапе происходит установка свойство Response и Request и свойства UICulture. Также, на этом этапе устанавливается, была ли эта страница запрошена в результате постбэка (отправления данных на сервер) и соответствующим образом устанавливается свойсто IsPostBack.
Инициализация страницы Ко времени инициализации страницы все дочерние пользовательские элементы управления уже созданы и имеют установленный свойства UniqueID. В это же время к странице применяются темы оформления. Если страница вызвна в результате постбэка, то данные, отправленные на сервер, еще не загружены в свойства элементов управления, на этом этапе.
Загрузка Если страница вызвана в результате постбэка, то на этом этапе устанавливаются свойства элементов управления, на основании информации о состоянии (ViewState и ControlState).
Валидация Вызывается метод Validate() для всех, находящихся на странице валидаторов.
Обработка постбэка Вызываются обработчики событий (при условии, что постбэк произошел).
Рендеринг Сохраняется информация о состоянии, затем класс страницы вызывает соответствующие методы дочерних элементов управления для генерации HTML представления и передачи его в Response.OutputStream.
Выгрузка Выгрузка происходит после того, как создано HTML представление для всей страницы.

Во время прохождения этапов жизненного цикла возникают события, подписавшись на которые, разработчик может выполнять свой собственный код. Стоит упомянуть атрибут AutoEventWireup, директивы @Page: если этот атрибут установлен в true (значение по умолчанию), то методы класса страницы, названные Page_НазваниеСобытия, автоматически становятся обработчиками соответствующих событий жизненного цикла станицы.

Для того, чтобы проследить жизненный цикл страницы и последовательность возникновения событий, можно установить атрибут Trace директивы @Page в true, а атрибутTraceMode в «SortByTime». Тогда в разделе Trace Information можно найти список произошедших событий (колонка Message). Например:

Trace Information

Category Message From First(s) From Last(s)
aspx.page Begin PreInit
aspx.page End PreInit 0.0364973314167865 0.036497
aspx.page Begin Init 0.0379050459346291 0.001408
aspx.page End Init 0.047693704143491 0.009789
aspx.page Begin InitComplete 0.0477864508468221 0.000093
aspx.page End InitComplete 0.0481875670270608 0.000401
aspx.page Begin PreLoad 0.0489879732516718 0.000800
aspx.page End PreLoad 0.0494462283607275 0.000458
aspx.page Begin Load 0.0494924892194238 0.000046
aspx.page End Load 0.0553441897381414 0.005852
aspx.page Begin LoadComplete 0.0554711043059809 0.000127
aspx.page End LoadComplete 0.055942153615399 0.000471
aspx.page Begin PreRender 0.0561455634022874 0.000203
aspx.page End PreRender 0.0618604874695332 0.005715
aspx.page Begin PreRenderComplete 0.06269871008062 0.000838
aspx.page End PreRenderComplete 0.0633259746265858 0.000627
aspx.page Begin SaveState 0.080360541216174 0.017035
aspx.page End SaveState 0.213795377788888 0.133435
aspx.page Begin SaveStateComplete 0.213911298043872 0.000116
aspx.page End SaveStateComplete 0.214385763389788 0.000474
aspx.page Begin Render 0.214440078745078 0.000054
aspx.page End Render 0.315044337228923 0.100604

Из всех событий жизненного цикла страницы, разработчик может подписаться только на пять, помимо событий дочерних элементов управления. Эти события: PreInit, Init, Load, PreRender, Unload. Рассмотрим варианты использования этих событий.

Во время этого события можно использовать свойство IsPostBack, для того, чтобы определить вызвана ли эта страница в первый раз или в результате постбэка. В плане управления страницей разработчик может: создавать динамически элементы управления, динамически устанавливать шаблон дизайна или тему оформления, считывать или устанавливать свойства объекта Profile.

Стоит особо отметить, что на данном этапе, если страница была вызвана в результате постбэка, свойства элементов управления еще не установлены. В случае, если разработчик самостоятельно установит свойства на этом этапе, на следующем установленный значения могут быть изменены.

Событие Использование
PreInit
Init На этом этапе разработчик может считывать или инициализировать свойства элементов управления.
Load На этом этапе разработчик может считывать или изменять свойства элементов управления.
PreRender Последняя возможность внести изменения во внешний вид страницы.
Unload Освобождение занятых ресурсов (закрытие открытых соединений с базой данных, завершение работы с файлами и т.п.)

Важно, что на этом этапе уже создано HTML представление страницы и попытка внести какие-либо изменения (например, вызвав метод Response.Write()), приведет к исключению.

Новые свойства и методы объекта Page

Для управления приведенными в предыдущем разделе событиями и получении информации о результатах их выполнения, у объекта Page в ASP.NET 2.0 появились следующие новые методы и свойства. Подробная информация по перечисленным ниже объектам и свойствам, а также их использовании последует далеев следующем разделе этой статьи.

ClientScript
Содержит ссылку на экземпляр объекта ClientScriptManager, который позволяет работать с клиентскими скриптами (регистрировать блоки клиентского кода, создавать скрытые поля и т.п.)

EnableTheming
Свойство, позволяющее отключить поддержку тем оформления на странице, если применение темы нежелательно.

GetValidators
Метод, возвращающий коллекцию валидаторов данной страницы.

Header
Ссылка на объект HtmlHead, позволяющий контролировать содержимое раздела HTML страницы,при условии, что для элемента head установлен атрибут runat=»server».

IsAsync
Свойство, указывающее на способ обработки страницы – синхронный или асинхронный.

IsCrossPagePostBack
Свойство, позволяющее определить была ли данная страница запрошена в ответ на отправку данных с другой страницы.

Master
Ссылка на экземпляр объекта шаблона страницы.

MasterPageFile
Свойство, содержащее имя файла шаблона страницы.

• MaxPageStateFieldLength
Устанавливает максимальный размер одного поля, хранящего состояние, в байтах. Если этому свойству присвоено число, меньшее, чем размер информации о состоянии, которую необходимо сохранить, то будет создано несколько скрытых полей, объем данных в каждом не будет превышать значения MaxPageStateFieldLength.

PageAdapter
Свойство возвращает объект PageAdapter,управляющий генерацией HTML представления страницы. Конкретный PageAdapter устанавливается средой выполнения в зависимости от параметров Requets. Если выбран PageAdapter, то события жизненного цикла страницы замещаются событиями PaeAdapter.

PreviousPage
Ссылка на экземпляр объекта страницы, с которой было осуществлено отправление формы.

SetFocus
Метод, позволяющий установить выделение на какой-либо из видимых на странице элементов управления.

StyleSheetTheme, Theme
Смотрите выше описание новых атрибутов директивы @Page.

TestDeviceFilter
Метод, проверяющий является ли текущий браузер браузером указанногов качестве аргумента типа.

Title
Свойство, позволяющее получить и изменить заголовок страницы.

Использование новых объектов страницы ASP.NET 2.0

Объект ClientScriptManager

ClientScriptManager предоставляющий методы для работы скодом сценариев, которые будут использоваться в клиентской части Web-приложения. Теперь все методы, которые в ASP.NET 1.x использовались для регистрации клиентских скриптов или скрытых полей принадлежат классу ClientScriptManager. Например, иногда бывает необходимо регистрировать клиентский сценарий динамически, в зависимости от каких-либо параметров. Например, при перезагрузке страницы форума нужно указать пользователю, что ему пришло новое личное сообщение. Это можно сделать как показано в нижеследующем примере.

Объект HtmlHead

Для каждой страницы ASP.NET, в HTML коде которой присутствует тег автоматически создается экземпляр объекта HtmlHead, позволяющий управлять заголовком страницы, добавлять теги META и ссылки на каскадные таблицы стилей.

Раньше разработчику страницы ASP.NET 1.0 приходилось добавлять специальное свойство или переменную в класс страницы или придумывать какой-либо обходной путь для того, чтобы получить возможность управлять заголовком и метаданными страницы. Например, так как это показано в следующем примере.

С появлением объекта HtmlHead подобные ухищрения уходят в прошлое.

Помимо этого, как и любой элемент, способный содержать вложенные элементы, HtmlHead позволяет добавлять произвольные элементы.

Управление страницей

Установка выделения на элемент управления

Иногда бывает необходимо, чтобы после загрузки страницы выделение было установлено на какой-то определенный элемент управления (например в поисковой форме логично установить фокус ввода на основное поле поиска), для этого можно задать значение атрибута defaultfocus тега form.

Выделением можно управлять программно, вызывая метод SetFocus, в качестве параметра передавая уникальный идентификатор этого элемента:

Обновление данных без перезагрузки страницы

В ASP.NET 2.0 стало возможным обновлять данные на странице без отправки страницы на сервер и ее полного обновления. Это стало возможно благодаря появлению клиентских сценариев с обратным вызовом (callback scripts или клиентские коллбэки). После того, как некоторое событие вызывает запрос к серверу, обновленные данные передаются непосредственно в клиентский сценарий в качестве аргументов функции.

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

Допустим, существует страница, на которой находится выпадающий список. Когда пользователь выбирает некоторое значение из списка, в некоторый элемент управления загружается значение, логически связанное с выбранным из списка значением. При этом задача такова, что нельзя хранить все данные на стороне клиента (возможно данных слишком много и страница будет долго передаваться по сети, либо данные генерируются на сервере не только в зависимости от выбранного пользователем элемента выпадающего списка). В ASP.NET 1.x для решения этой задачи необходимо привязать к событию изменения значения в выпадающем списке серверный метод. При этом список должен вызывать отправку страницы на сервер при каждом изменении значения (AutoPostBack=»True»).

В ASP.NET 2.0, как уже было сказано выше, существует возможность не обновлять всю страницу целиком. В данном случае разумно обновить только необходимые данные, поскольку обновлять всю страницу только для того, чтобы установить одно значение слишком расточительно.


Для реализации механизма обновления данных без перезагрузки страницы необходимо создать клиентскую функцию обратного вызова, принимающую переданные с сервера параметры, серверную функцию, принимающую параметры от клиента и возвращающую клиенту значения на основании полученных параметров и связать эти две функции. Мало того, механизм обратного вызова в ASP.NET 2.0 позволяет возвращать результат асинхронно. Для этого в интерфейсе ICallbackEventHandler определены два метода: RaiseCallbackEvent, для получения параметров на сервере и GetCallbackResult для возвращения результата клиенту.Для реализации функциональности предыдущего примера в ASPX файле помещается следующий код.

Класс страницы, использующей функции с обратным вызовом должен реализовывать интерфейс ICallbackEventHandler.

Сигнатуры функций, поддерживающие обратный вызов выглядят следующим образом:

Последним шагом к поставленной цели является связывание серверной и клиентских функций.

Метод GetCallbackEventReference объекта ClientScriptManager принимает в качестве параметров ссылку на объект страницы, строку, указывающую на значение, которое необходимо передавать на сервер при обратном вызове, имя метода на стороне клиента и принимающего ответ сервера. Подробное описание можно получить в документации MSDN или с помощью инструмента Visual Studio — Object Browser.

Используя эту технологию можно создавать сложные методы обновления данных страницы и позволяющие получить значительный выигрыш в производительности, для этого достаточно разобраться в том, какой код генерирует среда выполнения ASP.NET, реализуя эту функциональность.

Стандартная функция doPostBack весьма проста и служит для сохранения данных о событии в скрытые поля формы.

При использовании функций с обратным вызовом механизм значительно сложнее. Код функции WebForm_DoCallback гораздо больше, чем doPostBack, поскольку эта функция определяет тип объектной модели браузера, после чего загружает необходимый для передачи данных с модуль. Например, для браузера поддерживающего DOM это будет Microsoft.XMLHTTP.

Посмотреть код различных клиентских функций, используемых средой ASP.NET 2.0 можно сохранив страницу, поддерживающую функции с обратным вызовом на жесткий диск и открыв в текстовом редакторе файл WebResource.axd, ссылка на который имеется в HTML странице.

Более подробное описание возможностей и области применения клиентских функций обратного вызова описано встатье Дино Эспозито.

Отправка данных формы другой странице ASP.NET

Существенное ограничением серверных форм в ASP.NET 1.0 – отсутствие возможности непосредственно передавать данные, введенные в форме, другой странице. Чтобы отправить значения элементов форму другой странице необходимо использовать простою HTML форму и в атрибуте action указать путь к странице, которая должна получить данные. При этом теряются преимущества использования серверных форм.

В ASP.NET 2.0 тег элемента управления может иметь дополнительный атрибут PostBackUrl, позволяющий указать какой странице система должна передать Web-форму, если отправление данных на сервер инициировано этим элементом управления.

После щелчка по кнопке, браузер пользователя будет переадресован на страницу crosspost.aspx, при этом вся информация об элементах управления формы, с которой произошло отправление данных, будет также передано.

Чтобы реализовать эту возможность, среда ASP.NET 2.0 осуществляет проверку ASPX страниц на предмет наличия элементов управления с заданным атрибутом PostBackUrl и, при наличии таковых, создает на странице дополнительное скрытое поле __PREVIOUSPAGE, которое и содержит информацию о состоянии элементов формы. Эта информация доступна странице-получателю через свойство PreviousPage.

На уровне HTML кода, отправка данных другой форме выглядит следующим образом.

Из чего можно заключить, что данные формы не направляются из браузера непосредственно странице CrossPage.aspx, а предварительно направляются все той же странице GetValues.aspx, которая содержит форму frmTest. Это необходимо для поддержки серверной проверки (validation) введенных данных с использованием элементов управления RequiredFieldValidation, RangeValidation и других.Ознакомиться с методом WebForm_DoPostBackWithOptions можно в файле WebResource.axd, упомянутом в предыдущем параграфе этой статьи.

Шаблоны дизайна страниц

Что, прежде всего, отличает один Web-сайт от другого? Для простого пользователя сети Интернет основное отличие заключается в разнообразном дизайне странице. Прежде чем встретится с функциональными возможностями Web-приложения, посетитель сайта оценивает, нравится ли ему внешний вид страниц. Поэтому дизайн страниц является едва ли менее важным, чем общая функциональность.

Задача разработчика писать код, а задача художника-дизайнера заниматься внешним оформлением и версткой HTML кода страниц. При этом в большинстве случаев необходимо обеспечить возможность параллельной работы над кодом приложения и HTML шаблоном. С этим весьма успешно справлялась технология разделения кода программной логики и HTML кода страницы Code-Behind. Но, при этом, при работе над каждой страницей, разработчику приходится, так или иначе, сталкиваться с разметкой страницы.

Стоит заметить, что большинство современных Web-сайтов имеют сходный внешний вид всех страниц и каждая страница имеет общие элементы дизайна. В ASP.NET 1.x общие элементы дизайна страниц заключали в пользовательские элементы управления и включались в каждую страницу, либо, наоборот, страницы преобразовывали в элементы управления, используя одну страницу в качестве основы в которую загружали элементы управления в зависимости от строки URL.

Подход в ASP.NET 2.0 близок ко второму из названных подходов, но заключает в себе существенные преимущества. Разработчику больше нет нужды преобразовывать страницы в пользовательские элементы управления, что существенно упрощает разработку и отладку. А также существенно упрощает работу дизайнера, поскольку его задача сводится лишь во включении нескольких ASP.NET элементов в код страницы-шаблона. Для более подробного сравнения технологии шаблоновASP.NET 2.0 с существующими ранее техниками использования шаблонов рекомендуется обратится кстатье Фрица Оньена.

Создание шаблона дизайна

Шаблон дизайна страниц (Master pages) представляет собой обычную ASP.NET страницу, обладающую несколькими дополнительными атрибутами и свойствами и содержащую один или несколько специальных элементов управления ContentPlaceHolder. Для того чтобы преобразовать обычную страницу в шаблон, достаточно заменить директиву Page на директиву Master.
После этого необходимо вставить в разметку страницы серверные элементы управления ContentPlaceHolder, в те части страницы, где будет размещаться информация, не относящаяся к общему дизайну.

Также как и для обычной страницы, в файле программной логики можно работать с имеющимися элементами управления, создавать и добавлять новые, основываясь на параметрах запроса изменять страницу и ее поведение. Таким образом, можно вынести логику создания внешнего облика Web-приложения практически полностью в шаблон страницы.

Элемент управления ContentPlaceHolder позволяет определить содержимое, которое будет использоваться в случае, если страница, использующая шаблон, не переопределит содержимое элемента управления.

Работа с элементами управления страницы шаблона ничем не отличается от работы с элементами управления для обычной страницы. Таким же образом можно определить методы и свойства, которые будут доступны всем страницам использующим данный шаблон.

Создание страницы

Использование шаблонов дизайна налагает свои требования на страницы. Поскольку шаблон содержит элементы управления ContentPlaceHolder, то страница должна содержать элементы управления Content, содержащие код разметки и другие элементы управления, которые будут отображать на результирующей странице. На странице не должно быть каких-либо серверных элементов управления или кода разметки вне элементов управления Content.

Также как и в случае с шаблоном, код логики страницы создается обычным образом. Единственное отличие в том, что страница не имеет собственных объектов вроде HeadControl, поэтому нужно использовать ссылку на страницу шаблона через свойство Master.

Для того чтобы привязать страницу к шаблону используется атрибут MasterPageFile директивы Page. Если же необходимо привязать один и тот же шаблон ко всем страницам в директории, то нет необходимости указывать атрибут MasterPageFile для каждой страницы, достаточно задать базовый шаблон в файле web.config.

Кроме того, ASP.NET позволяет устанавливать тему оформления программным образом. Как было сказано выше, загрузка и связывание с шаблоном оформления происходит во время подготовки страницы к инициализации. Поэтому, если необходимо сменить шаблон оформления страницы, необходимо делать это в обработчике события PreInit.

Обработка шаблонов средой ASP.NET

Во время первого обращения к какой-либо странице, ASP.NET осуществляет поиск и компиляцию сборок для всех шаблонов в директории. Эта операция занимает некоторое время, зависящее от количества страниц шаблонов в директории, но выполняется только один раз. Поэтому, если в директории присутствуют не использующиеся шаблоны, это не приводит к потерям производительности в процессе работы приложения, единственное неудобство – дополнительное время, а компиляцию ненужных сборок для неиспользуемых страниц.

При обращении к aspx файлу страницы с заданным шаблоном оформления процесс компиляции почти ничем не отличается от обычного процесса компиляции страницы, за исключением того, что создается класс шаблона MasterPage ссылка на который доступна в свойстве Page.Master.

Затем страница проходит все те шаги, которые описаны выше в этой статье, в результате чего генерируется HTML код, который отправляется клиенту. В полученном браузером HTML коде уже нельзя определить, какая часть кода задана в шаблоне оформления, а какая часть кода определена на самой странице, поскольку элементы управления ContentPlaceHolder и Content не имеют каких-либо HTML соответствий и не порождают дополнительных тегов, кроме своего содержимого.

Поскольку шаблон является подмножеством страницы, то допустимо создавать вложенные шаблоны, указывая для шаблона в директиве Master путь к другому шаблону с помощью атрибута MasterPageFile. Для этого необходимо в основном шаблоне определить элементы управления ContentPlaceHolder, а в «дочерних» шаблонах на ряду с ContentPlaceHolder элементами определить элементы управления Content для замещения содержимого элементов ContentPlaceHolder базового шаблона.

Использование разных шаблонов для разных браузеров

Любому Web-разработчику хорошо известно, что разные браузеры (например, Microsoft Internet Explorer, Netscape Navigator, Mozilla FireFox и др.) по разному обрабатывают HTML код и, что особенно важно, обладают несколько разными программируемыми моделями, что усложняет создание клиентских сценариев.

Для разрешения этой проблемы существует два основных метода, которые используются и в ASP.NET 1.x и в классическом ASP. Первый заключается в том, что браузеру клиента отправляется клиентский код, который, основываясь на типе и версии браузера, выполняет некоторые действия. Второй состоит в перенаправлении браузера пользователя на те страницы, которые специально оптимизированы под конкретный браузер. ASP.NET упрощает создание подобных страниц, поскольку среда выполнения генерирует HTML код для стандартных серверных элементов управления основываясь на информации о браузере клиента.При использовании шаблонов оформления, можно создать несколько шаблонов, для каждого браузера и в директиве Page страницы указать, какой шаблон использовать.

Список браузеров и используемые средой ASP.NET свойства браузеров можно найти в директории %WINDIT%\Microsoft.NET\Framework\версия\CONFIG\Browsers.

Упрощенная локализация Web-приложений

Определение региональных настроек пользователя

Для локализации приложений в ASP.NET 1.x разработчику часто приходилось писать код для определения региональных настроек пользователя. Этот код часто помещался в global.asax и его задачей стояла установка языка пользователя в качестве языка текущего процесса, путем создания объекта CultureInfo и присвоения его свойствам CurrentCulture и CurrentUICulture объекта CurrentThread:

В ASP.NET 2.0 существует возможность переложить определение региональных настроек пользователя на среду выполнения. Достаточно установить атрибуты Culture=»auto»и UICulture=»auto» директивы @Page, чтобы для страницы региональные настройки пользователя определялись автоматически. В случае. если необходимо достичь этого эффекта на всех страницах сайта, достаточно в файл web.config добавить следующую строку:

Выражения для локализации

ASP.NET 2.0 позволяет генерировать сборки с локальными ресурсами для каждой страницы и связывать элементы управления с данными, хранимыми в этих ресурсах с помощью выражений, размещаемых непосредственно в коде представления в ASPX файле. Для этого используется атрибут meta:resourcekey, значение которого анализируется во время выполнения страницы.

Либо может быть использовано новое выражение :

Для того, чтобы таким же образом можно было локализовать статический текст, в ASP.NET 2.0 появился новый элемент управления Localize, позволяющий использовать указанные выше выражения локализации.

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


ASP.Net. Лекция 12. Шаблоны дизайна страниц ASP.NET (исходники)

Шаблоны дизайна — это визуальное наследование страниц, впервые появившееся в ASP.NET 2.0. Вы можете создавать основу для любого количества страниц приложения. Шаблоны позволяют легче создавать и поддерживать приложения. Visual Studio 2005 включает поддержку создания и редактирования шаблонов страниц. Эта лекция рассматривает использование шаблонов страниц в приложении и начинается с объяснения их преимуществ.

Примечание: терминология в этой области не устоялась. В некоторых книгах используют выражение «эталонные страницы». Можно применять термин «главная страница», хотя его можно спутать с Default.aspx.

Зачем нужны шаблоны дизайна страниц?

Для простого пользователя отличие одного сайта от другого — в разнообразном дизайне страниц. Большинство веб-сайтов сегодня имеют узнаваемый дизайн, который достигается использованием одних и тех же элементов в тех же самых местах в разных страницах сайта. Поэтому дизайн страниц является едва ли менее важным, чем общая функциональность.

Например, взгляните на главную страницу сайта газеты «Комсомольская правда». Каждый день там появляются разные статьи, но оформление их остается единым. Это логотип газеты, верхние, правые, левые навигационные панели, рейтинг статей справа, формы для поиска, подписки и входа в почту. Внизу страницы находится юридическая информация.

Некоторые разработчики копируют и вставляют повторяющиеся элементы во всех страницах. Это неэффективно, если нужно изменить одну деталь в этих общих элементах, изменения придется вводить во всех страницах. Можно помещать повторяющиеся куски кода во включаемые файлы с помощью команды HTML include. Но так трудно увидеть окончательный вид страницы в среде разработки. В ASP.NET 1.1 стало возможным создавать пользовательские элементы управления. Можно создать такой элемент с нужным содержанием и помещать его на все страницы. Развитием этой идеи стало создание шаблонов страниц. Это тоже пользовательский элемент управления, только он находится не в странице, а вне ее.

Основы Master Pages

С помощью шаблонов страниц вы определяете некоторое общее содержание и помещаете ее в страницу с расширением .master. Естественно, таких страниц в приложении может быть несколько. Этой шаблон могут использовать любое количество дочерних страниц, которые как и обычные страницы, имеют расширение aspx.

Начиная с этой лекции, будем разбирать проект, который Visual Studio 2005 создает по шаблону Personal Web Site Starter Kit. В нем показаны шаблоны страниц, темы и персонализация и навигация. Элементы управления навигации сосредоточены на странице шаблона Default.master. И это естественное решение, так как навигация нужна везде.

В страницу шаблона также включают общие заголовки и нижние колонтитулы.

Это единственный тип страниц, где возможно разместить специальные элементы управления ContentPlaceHolder. Они определяют места, в которое дочерние страницы данного мастера могут помещать свое собственное содержание. Когда ASP.NET получает запрос отобразить дочернюю страницу, она сливает ее код с кодом главной страницы, в результате генерируется HTML, в котором не видно никаких «швов».

Когда дочерняя страница редактируется в среде разработки, на вкладке Design видна полная страница вместе с элементами из шаблона, но они показаны серым цветом. Их редактировать нельзя. Можно редактировать то, что находится в элементах Content.

В диалоге Add New Item выберите тип страницы Master Page. Как и обычные страницы, их можно создавать с отделенным кодом или кодом, встроенным в страницу. Это никак не влияет на модель разделения кода дочерних+ страниц. Кроме того, главная и дочерняя страницы могут разрабатываться на разных языках.

Чтобы получить четкое разделение страницы на логические части, используют таблицы. Построим таблицу с 3 строками, где в верхней строке находится заголовок всех страниц, во второй произвольное содержание, она состоит из двух ячеек, в каждой из которых по одному ContentPlaceHolder. В нижнем ряду находится правовая информация. Таблица создается очень просто из меню Layout-Insert Table. Создайте таблицу 2 на 3. После этого объедините ячейки верхней и нижней строк, а в среднюю вставьте ContentPlaceHolder. Создайте содержание заголовка и подвала. Должна получиться подобная страница:

Первое отличие этой страницы от обычной в том, что она начинается с директивы Master, а не Page. Класс мастер-страницы определен в файле MasterPage.master.cs.

Класс шаблона — наследник System.Web.UI.MasterPage, который в свою очередь наследует от System.Web.UI.UserControl.

В ней могут находиться любые элементы управления и HTML-код. В ней могут обрабатываться и события страницы. 2 элемента ContentPlaceHolder обозначают места, куда вставляется содержание страницы-наследницы.

Теперь нужно создать страницу содержания. Она создается как обычно, только отмечается флажок с надписью Select Master Page. Появляется диалог, в котором необходимо выбрать шаблон страницы.

Атрибут MasterPage директивы Page определяет шаблон дизайна, или эталонную страницу данной страницы.

Возможно настроить приложение так, чтобы все страницы наследовали одну страницу шаблона дизайна. В конфигурационном файле в секцию web.config

нужно вставить элемент:

Но и в этом случае назначение главной страницы в директиве Page имеет приоритет над назначением на уровне приложения. Установка web.config действует на тех страницах, в которых masterPageFile не указан, но определены элементы управления Content. Эта установка не действует на обычные aspx-страницы.

Шаблон можно назначить не всем страницам, а выборочно, например, расположенным в определенной папке приложения.

Элемент location вставляется в главный узел configuration. Здесь указано, что все страницы из папки Lections используют шаблонную страницу Lections.master.

На странице-наследнице шаблона могут быть только элементы типа Content, каждый из который соответствует одному элементу ContentPlaceHolder шаблона. Нельзя вставлять содержание вне этих элементов, иначе ASP.NET не сможет объединить главную страницу со страницей содержания. Идентификатор ContentPlaceHolder должен совпадать с атрибутом ContentPlaceHolderID соответствующего элемента Content.

Программа создала дочернюю страницу с 2 элементами управления Content. Если переключиться на вкладку Design, эти два элемента Content показаны в виде пустых прямоугольников, расположенных рядом друг с другом, так как в шаблоне они находятся в двух соседних ячейках таблицы. Директива Page отличается от обычной, кроме атрибута MasterPageFile, наличием атрибута Title. Так как теги , , наследуются из файла шаблона, это единственная возможность переопределить заголовок браузера. Заменим значение атрибута

Если посмотреть на результирующую страницу в браузере, увидим, что в заголовок браузера отразил изменение. В HTML-коде страницы записано

На самой странице отображается только содержание, заданное в странице шаблона.

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

(Ее можно найти в установке .NET «Microsoft.NET\Framework\v2.0.xxx\ASP.NETWebAdminFiles\Images)

Дочерняя страница в браузере теперь выглядит так:

Содержание страницы должно быть строго внутри элементов Content. В один из них можно поместить, например, картинку, а во второй текст.

Есть еще один способ поменять заголовок браузера программно. У страницы, имеющей шаблон, есть свойство Master. Конечно, оно есть у всех страниц, но у обычных страниц оно равно Null. Через него можно обращаться ко всем свойствам главной страницы. Это свойство только для чтения.

Содержание по умолчанию

В главной странице может быть определено содержание, которое будет отображаться по умолчанию. Оно помещается в элементах ContentPlaceHolder и наследуется всеми дочерними страницами. Если дочерняя страница не переопределит содержание по умолчанию, оно будет использоваться при ее отображении. Создадим элемент управления SiteMapPath, которым поместим в ContentPlaceHolder1.

На странице MainSchool.aspx он отображаться не будет, так как в ней определены оба элемента Content. Однако если в следующей странице определен только один из элементов Content:

Если посмотреть ее в браузере, увидим, что в ее левой части «хлебные крошки» отображаются.

Программное назначение мастер страницы

В странице содержания можно переназначить ее главную страницу программно. Для этого нужно присвоить нужное значение свойству Page.MasterPageFile. Шаблон поменяется независимо от того, какой шаблон был назначен в директиве @Page. Но если попробуете проделать это в функциях Page_Load или Page_Init, получите ошибку времени выполнения.

Это свойство можно изменить только во время обработки события Page_PreInit. Событие Page_PreInit — самая ранняя фаза жизненного цикла страницы, к которой можно получить доступ. Во время события Init главная и дочерняя страница уже сливаются в одну, поэтому уже поздно менять шаблон. По этой причине событие Page_PreInit единственное, в обработчике которого можно работать с главной страницей отдельно от страницы содержания.

Для того, чтобы из страницы содержания обратитьс к элементам управления главной страницы, можно воспользоваться функцией FindControl. Непосредственно обратиться к ним нельзя, так как это защищенные члены.

Страницы шаблона могут иметь методы и свойства. Чтобы можно было обращаться к ним, нужно использовать директиву @MasterType. При этом становится доступен класс страницы шаблона дизайна через строго типизированную ссылку. Атрибут TypeName задает имя типа, а VirtualPath путь относительно корневого каталога веб-приложения к файлу шаблона.

Таким образом страница разрешает доступ извне к свойствам своих элементов.

Страница содержания меняет это свойство, а элемент управления AdRotator находит с помощью FindControl:

Вложенные мастер-страницы

Шаблоны дизайна могут наследовать другие шаблоны. Например, сайт состоит из нескольких разделов. Все страницы сайта имеют общие элементы, и все страницы раздела имеют другие общие элементы. Сайт цветочного магазина состоит из разделов многолетних и однолетних цветов. Для них созданы шаблоны, которые наследуют общий шаблон сайта.

Страница, описывающая нарциссы, находится в разделе многолетних цветов и наследует шаблон SectionPerrenials.

Последовательность событий



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

Инициализация вложенных элементов управления главной страницы.

Инициализация вложенных элементов управления страницы содержания.

Инициализация самой главной страницы.

Инициализация страницы содержания.

Загрузка(Page_Load) страницы содержания.

Загрузка(Page_Load) главной страницы

Событие Page_LoadComplete страницы содержания

Загрузка дочерних элементов управления управления главной страницы.

Загрузка дочерних элементов управления управления страницы содержания.

Событие LoadComplete было введено для того, чтобы можно было обратиться из страницы содержания к элементам главной страницы, созданным в ее Page_Load. Это нельзя сделать в обработчике Page_Load страницы содержания, так как она загружается до главной страницы.

Страницы шаблонов для конкретных платформ

Во многих случаях приложения разрабатываются для просмотра на разных видах контейнеров. Это могут быть различные браузеры или программы просмотра веб-сайтов на карманных компьютерах и мобильных телефонах.

Поэтому ASP.NET 2.0 позволяет в атрибуте MasterPageFile директивы Page определить разные страницы шаблона для конкретных контейнеров.

Заключение

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

ASP.NET MVC Урок 1. Начало

Цель урока: Изучить Global.asax и поведение запуска веб-приложения, обработки веб-запроса. Изучение Nuget и Подключение протоколирования.

Начало

Создадим приложение ASP.NET MVC 4 Web Application «Lesson1» (рис 1.):

Не будем запускать приложение, а сразу установим (если до этого не сделали) NuGet расширение:

NuGet Package Manager – это расширение для Visual Studio, которое позволяет добавлять в существующие проекты модули, которые значительно упрощают работу. При создании «Basic» asp.net mvc4 приложения в само приложение было добавлено изначально много модулей. Их список мы можем найти, кликнув в Manage NuGet Packages… в контекстном меню проекта:

О них по порядку:

  • Entity Framework – обеспечивает работу с БД
  • jQuery (+ jQuery UI, jQuery Validation) – популярный javascript framework (о нем еще пойдет речь позже).
  • Json.NET – классы для работы с json-форматом данных.
  • knockoutjs – javascript библиотека для работы с Model View ViewModel архитектурой. (http://knockoutjs.com/)
  • Microsoft.Net Framework 4 Http Client Libraries – программный интерфейс для работы с HttpContext-ом.
  • Microsoft ASP.NET MVC 4 – собственно, классы паттерна проектирования MVC (то, что есть предметом изучения)
  • Microsoft ASP.NET Razor 2 – view-движок. Есть еще ASPX и Spark – мы о них также будем говорить позже
  • Microsoft ASP.NET Universal Providers Core Libraries (Microsoft ASP.NET Universal Providers for LocalDB) – предоставляет инструменты для поддержки всех SQL Server 2005 (и более поздних) и для SQL Azure.
  • Microsoft ASP.NET Web API (Microsoft ASP.NET Web API Client Libraries, Microsoft ASP.NET Web API Core Libraries, Microsoft ASP.NET Web API Web Host) – для создания REST приложений, работа с XML, JSON и так далее
  • Microsoft ASP.NET Web Optimization Framework – оптимизирует передачу данных, например, минимизирует js-код
  • Microsoft ASP.NET WebPages 2 – набор классов для работы во View
  • Microsoft jQuery Unobtrusive Ajax (Microsoft jQuery Unobtrusive Validation) – jQuery библиотека для поддержки ajax/валидации
  • Microsoft.Web.Infrastructure – позволяет динамически регистрировать HTTP-модули во время выполнения
  • Modernizr – js-библиотека, которая позволяет использовать html5 и css3 в старых браузерах
  • WebGrease – позволяет минифицировать html, css, js.

Теперь, когда мы примерно прикинули, из чего состоит наше приложение, давайте запустим его.
Для этого необходимо создать HomeController:

Для метода (действия) Index добавим View и выберем

Views/Shared/_Layout.cshtml в качестве layout (типа master page):

Собственно, можем запускать.
Всё что мы увидим – это:

Почему контроллер надо было назвать именно Home и как это работает, мы будем изучать более подробно в следующих уроках.

Global.asax

А сейчас обратим внимание на файл Global.asax:

Класс MvcApplication наследует HttpApplication и содержит инструкции для инициализации приложения. Есть еще несколько событий, на которые можно добавить код. Рассмотрим их:

  • public void Init() – приложение инициализируется или при первом вызове. Оно вызывается для всех экземпляров объекта HttpApplication.
  • public void Dispose() – вызывается непосредственно перед уничтожением объекта HttpApplication. Это идеальное место для очистки ранее используемых ресурсов.
  • Application_Error – наступает, когда необработанное исключение случается в приложении.
  • Application_Start – наступает, когда первый экземпляр HttpApplication создается. Это позволяет создавать объекты доступные для всех экземпляров класса HttpApplication.
  • Application_End – наступает, когда все созданные ранее экземпляры класса HttpApplication уничтожены. Это событие наступает только однажды в течение всего времени жизни приложения.
  • Application_BeginRequest – наступает, когда приложение получает запрос. Первый раз это событие наступает для запроса страницы, когда пользователь вводит URL.
  • Application_EndRequest – Последнее событие, которое наступает для запроса к приложению.
  • Application_PreRequestHandlerExecute – наступает прежде, чем ASP.NET запустит обработчик страницы или веб-службу.
  • Application_PostRequestHandlerExecute – наступает, когда ASP.NET заканчивает обработку.
  • Applcation_PreSendRequestHeaders – наступает перед тем, как ASP.NET посылает клиенту (браузеру) HTTP заголовки.
  • Application_PreSendContent – наступает перед тем, как ASP.NET посылает клиенту (браузеру) HTTP содержимое.
  • Application_AcquireRequestState – наступает, когда ASP.NET получает текущее состояние (состояние сессии), связанное с текущим запросом.
  • Application_ReleaseRequestState – наступает, когда ASP.NET завершает исполнение всех событий. В результате все модули сохраняют свои текущие состояния.
  • Application_ResolveRequestCache – наступает, когда ASP.NET выполняет запрос авторизации. Это позволяет модулям кеширования обработать запрос и обслужить из кэша, минуя обработчик выполнения.
  • Application_UpdateRequestCache – наступает, когда ASP.NET завершает выполнение обработчика, чтобы модули кеширования могли сохранить результат для использования в последующих ответах.
  • Application_AuthenticateRequest – наступает, когда модуль идентификации устанавливает личность текущего пользователя как действительную. В текущий момент, учетные данные пользователя уже проверены.
  • Application_AuthorizeRequest – наступает, когда модуль авторизации подтверждает, что пользователь может иметь доступ к ресурсам.
  • Session_Start – наступает, когда новый пользователь заходит на сайт.
  • Session_End – наступает, когда истекает время сессии пользователя, или он покидает сайт.

Хорошо. Теперь, чтобы воочию убедимся, что всё именно так и происходит, добавим протоколирование и сделаем это через добавление NLog модуля в NuGet.

Package Manager Console

В NuGet есть консоль для выполнения команд по установке\удалению\поиску модулей, и других вещей, типа скаффолдинга.
Для вывода всех установленных модулей пишем:

Для получения всех доступных к установке модулей:

Для получения всех доступных модулей с названием NLog

Для установки модуля NLog необходимо вначале выбрать проект (если их в солюшене больше одного) и ввести команду:

Файлы копируются в проект, добавляются ссылки на сборки и web.config может быть обновлен.
Для удаления из проекта модуля необходимо, чтобы он не был связан с другими модулями. Удаляем так:

После установки пользуемся документацией на NLog (https://github.com/nlog/nlog/wiki/Tutorial) и добавляем в Web.config:

Мы ее потом исправим. Добавим в код (Global.asax.cs):

Запустим и завершим приложение (Stop). Откроем файл C://file.txt. Мы увидим, какие события происходили.

В Application_Start выполняется регистрация:

  • Area (области),
  • Filter (фильтры),
  • Bundle (комплекты),
  • Route (маршруты).

Подробности по инициализации Filter, Вundle и Route находятся в папке App_Start.

WebActivator

WebActivator – это модуль, который позволяет запустить код до самого первого старта App_Start. Это может быть необходимо для того, чтобы, к примеру, создать тестовую БД перед запуском.
Установим:

Добавим класс в App_Start папку:

В файле логов увидим, что строка Application PreStart исполняется раньше Application Start:

Создадим четыре файла отдельно для trace (трассировки), debug (отладки), info (информации), error (ошибки). Определим место записи: /Contents/logs/[текущая дата] Перепишем конфигурацию:


Log2Console

Для NLog есть еще классная программа Log2Console, которая позволяет получать логи прямо в окне программы.

Запускаем программу и настраиваем приемщик:

Знакомство с ASP.NET 2.0
Страница 9. Шаблоны дизайна страниц

Шаблоны дизайна страниц

Что, прежде всего, отличает один Web-сайт от другого? Для простого пользователя сети Интернет основное отличие заключается в разнообразном дизайне странице. Прежде чем встретится с функциональными возможностями Web-приложения, посетитель сайта оценивает, нравится ли ему внешний вид страниц. Поэтому дизайн страниц является едва ли менее важным, чем общая функциональность.
Задача разработчика писать код, а задача художника-дизайнера заниматься внешним оформлением и версткой HTML кода страниц. При этом в большинстве случаев необходимо обеспечить возможность параллельной работы над кодом приложения и HTML шаблоном. С этим весьма успешно справлялась технология разделения кода программной логики и HTML кода страницы Code-Behind. Но, при этом, при работе над каждой страницей, разработчику приходится, так или иначе, сталкиваться с разметкой страницы.
Стоит заметить, что большинство современных Web-сайтов имеют сходный внешний вид всех страниц и каждая страница имеет общие элементы дизайна. В ASP.NET 1.x общие элементы дизайна страниц заключали в пользовательские элементы управления и включались в каждую страницу, либо, наоборот, страницы преобразовывали в элементы управления, используя одну страницу в качестве основы в которую загружали элементы управления в зависимости от строки URL.
Подход в ASP.NET 2.0 близок ко второму из названных подходов, но заключает в себе существенные преимущества. Разработчику больше нет нужды преобразовывать страницы в пользовательские элементы управления, что существенно упрощает разработку и отладку. А также существенно упрощает работу дизайнера, поскольку его задача сводится лишь во включении нескольких ASP.NET элементов в код страницы-шаблона. Для более подробного сравнения технологии шаблоновASP.NET 2.0 с существующими ранее техниками использования шаблонов рекомендуется обратится кстатье Фрица Оньена.

Создание шаблона дизайна

Шаблон дизайна страниц (Master pages) представляет собой обычную ASP.NET страницу, обладающую несколькими дополнительными атрибутами и свойствами и содержащую один или несколько специальных элементов управления ContentPlaceHolder. Для того чтобы преобразовать обычную страницу в шаблон, достаточно заменить директиву Page на директиву Master.
После этого необходимо вставить в разметку страницы серверные элементы управления ContentPlaceHolder, в те части страницы, где будет размещаться информация, не относящаяся к общему дизайну.

Также как и для обычной страницы, в файле программной логики можно работать с имеющимися элементами управления, создавать и добавлять новые, основываясь на параметрах запроса изменять страницу и ее поведение. Таким образом, можно вынести логику создания внешнего облика Web-приложения практически полностью в шаблон страницы.
Элемент управления ContentPlaceHolder позволяет определить содержимое, которое будет использоваться в случае, если страница, использующая шаблон, не переопределит содержимое элемента управления.

Работа с элементами управления страницы шаблона ничем не отличается от работы с элементами управления для обычной страницы. Таким же образом можно определить методы и свойства, которые будут доступны всем страницам использующим данный шаблон.

ForCoder

Навазние: Microsoft ASP.NET 2.0. Базовый курс
Автор: Дино Эспозито
Издательство:
Год: 2007
Страниц: 688
Язык: Русский
Размер: 35.4
Формат: djvu

Описание книги Microsoft ASP.NET 2.0. Базовый курс:
Эта книга — подробное руководство для профессионалов-разработчиков приложений ASP.NET. В ней описаны технологии создания эффективных, масштабируемых и надежных сайтов на платформе ASP.NET 2.0, обладающих разнообразным и согласованным пользовательским интерфейсом. Вы узнаете, как создавать эталонные страницы, персонализировать вывод сайта и адаптировать его к возможностям браузера, познакомитесь с широким ассортиментом средств ASP.NET для работы с данными, научитесь эффективно кешировать информацию, идентифицировать пользователя и авторизовать его доступ к серверным ресурсам.

Книга адресована тем, кто не ограничивается прикладными сведениями, почерпнутыми из обычных учебных пособий, а намерен разобраться во всех деталях внутреннего функционирования исполняющей среды ASP.NET 2.0; состоит из 15 глав и предметного указателя.

В книге доступным языком излагается программирование на ASP.NET версии 2.0. Стоит отметить, что примеры, приводимые в книге, интересны и весьма не тривиальны. Большой плюс книги — это хорошая структурированность книги — нужный материал понятно где искать.

8,275 просмотров всего, 1 просмотров сегодня

ASP .NET 2.0: Эталонные страницы

Как известно, большинство изготовление сайта Донецк имеют однотипную, общепринятую разметку страниц, неотъемлемой частью которой является верхний и нижний колонтитулы и, пожалуй, самая главная часть — тело страницы, хотя конечно, бывают и исключения. ASP .NET 2.x предлагает уникальный метод создания одинаковой разметки для страниц сайта – это использование, так называемых, эталонных страниц. Если вы работали с ранними версиями ASP(ASP, ASP .NET 1.x), то, наверное, помните, что постоянно приходилось копировать HTML-код страницы с элементами ASP. Конечно, использование включаемых файлов (include) в классическом ASP, и пользовательских элементов управления (*.ascx) в ASP .NET 1.x, значительно упрощало разработку Web-сайтов, но это не сравнится с тем, что предлагает ASP .NET 2.x.Кто они, эти Эталонные страницы?И так, что же такое эталонная страница? Эталонная страница – это файл с расширением *.master, он практически ни чем не отличается от уже знакомых вам файлов aspx-страниц. Эталонная страница представляет собой контейнер для контента и может содержать html-разметку страницы, html-элементы, серверные элементы управления и пользовательские элементы управления. Другими словами, эталонная страница содержит разметку страницы, те же самые верхний и нижний колонтитул, меню навигации, в общем все, что фактически отображается на всех страницах сайта, а также эталонная страница содержит одно или более полей для подстановки контента (см. рис. 1). Сам контент при этом находится на страницах aspx, которые в свою очередь ссылаются на эталонную страницу. Таким образом, разработчику больше не придется дублировать разметку страниц, поскольку она будет находиться в одном файле.Рис. 1. Эталонная страница.Работа с эталонными страницамиКак я уже говорил, эталонная страница очень похожа на страницы aspx, но имеет ряд отличий. Так, вместо директивы @Page, эталонная страница имеет директиву @Master. Директива @Master имеет такой же набор параметров, как и @Page, наиболее часто применяются следующие параметры: Language – указывает язык, на котором пишется код; Debug – указывает на состояние режима отладки; Inherits – содержит имя класса отдельного кода; End Sub

ШАБЛОНЫ ДИЗАЙНА СТРАНИЦ ASP .NET

Шаблоны дизайна — это визуальное наследование страниц, впервые появившееся в ASP.NET 2.0. Вы можете создавать основу для любого количества страниц приложения. Шаблоны позволяют легче создавать и поддерживать приложения. Visual Studio 2005 включает поддержку создания и редактирования шаблонов страниц.

Примечание: терминология в этой области не устоялась. В некоторых книгах используют выражение «эталонные страницы». Можно применять термин «главная страница», хотя его можно спутать с Default.aspx.

Зачем нужны шаблоны дизайна страниц?

Для простого пользователя отличие одного сайта от другого — в разнообразном дизайне страниц. Большинство веб-сайтов сегодня имеют узнаваемый дизайн, который достигается использованием одних и тех же элементов в тех же самых местах в разных страницах сайта. Поэтому дизайн страниц является едва ли менее важным, чем общая функциональность.

Например, взгляните на главную страницу сайта газеты «Комсомольская правда». Каждый день там появляются разные статьи, но оформление их остается единым. Это логотип газеты, верхние, правые, левые навигационные панели, рейтинг статей справа, формы для поиска, подписки и входа в почту. Внизу страницы находится юридическая информация.

ASP .NET 2.0: Эталонные страницы

Вы можете найти рассылки сходной тематики в Каталоге рассылок.

Статистика

Программирование (VB,C#,ASP,.NET): новости, советы, примеры

Выпуск # 36

Новый выпуск!

Здравствуйте!
Очередной выпуск рассылки Kbyte.Ru!

Содержание выпуска

Голосование на Kbyte.Ru

Голосование на Kbyte.Ru через E-Mail!
Чтобы проголосовать через E-Mail, выберите ответ, если у Вас настроен почтовый клиент, должно появиться окно с новым сообщением, ничего не изменяйте, а просто отправьте пустое письмо и в течение некоторого времени Ваш голос будет зачтен.
Для голосования через сайт, перейдите по этой ссылке: http://kbyte.ru/Voting/. Как часто Вы посещаете наш сайт?
Каждый день ( 5 )
Довольно часто ( 2 )
Два-три раза в неделю ( 5 )
Один раз в неделю ( 0 )
Несколько раз в месяц ( 0 )
Как придется ( 1 )
Я здесь впервые и обязательно зайду еще ( 0 )
Я здесь впервые и больше не приду ( 2 )

Всего голосов: 15

Последнее на форумах

Добрый день!
У меня следующая проблема, есть код, что-то подобное:
Try
If a = 1 Then
Return 2
End If
If a = 2 Then
Return 3
End If
Return 0
Catch
Return 0
Finally

End Try

Это код функции, насколько я понимаю, последний Return 0 в блоке Try выполняться не должен, если, например a = 1 или a = 2, но, он выполняется!? В режиме Deabug видно, что a = 1, происходит Return 2, а потом Return 0, при этом, обращение в блок Catch не происходит, т.е. ошибки нет. Почему так происходит!?

Очень срочно нужно создать в ASP .NET динамически контрол DataList и заполнить его данными, так, как будто он уже был размещен на странице.
Как это сделать? Хелп! Горю!!

Как это сделать?

.NET + сжать папку в zip | Автор: ANATARIUS
Добавлено: 26.10.2006 / 11:30 | ответов: 2 | просмотров: 12

Доброе время суток!
С файлами я вроде разобрался, а вот как на Visual Basic .NET сжать всю папку в zip?

To Edlin | Автор: ANATARIUS
Добавлено: 26.10.2006 / 04:32 | ответов: 5 | просмотров: 22

Тут кто-то говорил, что делается раздел Примеры кодов. А можно узнать, когда на него можно будет посмотреть?

Доброе время суток!
Есть такая функция — Join, как ее использовать для ArrayList?
Я пробую, но у меня происходит какая-то ошибка 🙁

Привет!
Я нашел, чем можно прочитать текст, но он почему-то читает только английский текст!?
Помогите, что я делаю не так?

Привет!
Подскажите куда копать для создания авторизации?

Запущена перавая бета-версия FMC.
Подробности смотрите в разеделе «Мой профиль».

Последние статьи

Эта статья будет полезна только тем людям, у которых установлен Microsoft Word 2000 или выше! Мы научимся делать всё возможное с документами MS WORD при помощи VB 2003/2005 .NET.


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

ASP .NET 2.0: Эталонные страницы
Автор: Немиро Алексей | добавлено: 27.08.2006 / 04:08 | просмотров: 718

Как известно, большинство сайтов имеют однотипную, общепринятую разметку страниц, неотъемлемой частью которой является верхний и нижний колонтитулы и, пожалуй, самая главная часть — тело страницы, хотя конечно, бывают и исключения. ASP .NET 2.x предлагает уникальный метод создания одинаковой разметки для страниц сайта – это использование, так называемых, эталонных страниц. Если вы работали с ранними версиями ASP(ASP, ASP .NET 1.x), то, наверное, помните, что постоянно приходилось копировать HTML-код страницы с элементами ASP. Конечно, использование включаемых файлов (include) в классическом ASP, и пользовательских элементов управления (*.ascx) в ASP .NET 1.x, значительно упрощало разработку Web-сайтов, но это не сравнится с тем, что предлагает ASP .NET 2.x.

Описание ошибок VB
Автор: [root] | добавлено: 29.07.2006 / 06:58 | просмотров: 853

В данном обзоре содержится русскоязычное описание ошибок Visual Basic 5.0/6.0.

Горячие клавиши VB 6.0
Автор: [root] | добавлено: 20.07.2006 / 13:21 | просмотров: 1003

В данном обзоре рассмотрены горячие клавиши Visual Basic 5.0/6.0, которые значительно ускоряют процесс разработки и тестирования программ.

ASP .NET 2.0: Файл Global.asax
Автор: Немиро Алексей | добавлено: 17.07.2006 / 18:04 | просмотров: 888

Файл Global.asax является необязательным файлом приложений ASP .NET и содержит дополнительный код, отвечающий за обработку событий, происходящих на уровне приложения. Этот файл должен находиться в корневом каталоге Web-приложения. В ASP .NET 1.1 сей файл автоматически создавался Visual Studio при создании нового Web-проекта, в ASP .NET 2.0 Visual Studio Global.asax автоматически не создает, но его можно добавить в проект вручную. Все изменения, внесенные в файл Global.asax отслеживаются средой ASP .NET, и приложение перезагружается.

Как узнать страну по IP-адресу?
Автор: Amit Gupta | добавлено: 17.07.2006 / 08:09 | просмотров: 32761

Интернет широко распространен в большинстве стран и континентов. Узнать страну посетителей вашего веб-сайта может быть не легкой задачей, особенно если вы не знаете как это сделать.

В этой статье мы создадим пример базы данных Microsoft Access и пользовательский интерфейс в среде Visual Basic 6.0. Сделать это будет относительно несложно, поскольку для работы с нашей базой данных мы будем использовать компонент ADODC Componenet (Microsoft ADO Data Control 6.0 (OLEDB)). Мы добавим DataEnvironment и DataReport и буквально, в течении минуты, мы уже сможем экспортировать наш DataReport в Microsoft Word Document. (.doc).

Наследование в VB.Net
Автор: Увалиев Николай (Neco) | добавлено: 16.04.2006 / 03:22 | просмотров: 1192

Если кто-нибудь уже сталкивался с мелкомягким контролом DataGridView, то наверняка порадовался обилию возможностей, которые он предлагает. Однако, когда дело доходит до реального кодинга, начинаешь хотеть чего-то большего. Мне, к примеру, понадобилось, чтобы внутри таблицы был ComboBox – конечно, он там есть, но мне понадобилось, чтобы в нём можно было ЛИБО печатать, ЛИБО выбирать. Т.е., если в списке не оказалось нужной нам вещицы, то мы могли впечатать её и тем самым дополнить список.

Форум своими руками, на ASP
Автор: Немиро Алексей | добавлено: 08.04.2006 / 12:13 | просмотров: 2119

Как известно, форум – это средство общения пользователей сети Интернет, и в тоже время, это большой справочник вопросов и ответов определенной тематики, и, пожалуй, ни один современный сайт не может обойтись без форума. В данной статье я расскажу, как можно быстро сделать собственный форум на ASP, причем, для этого не надо никуда ходить, искать и закачивать какие-либо дополнительные программы, и даже вовсе не обязательно быть программистом. Для этого достаточно иметь Windows 2000/XP и комплект программ MS Office, а именно — MS Access. В качестве реактора ASP-страниц, можно использовать обычный Блокнот.

Интересные коды и решения

Как получить строку параметров текущего запроса?
Дата добавления: 31.07.2006 / 15:38 | просмотров: 169 | платформа: ASP .NET (VB)

Как создать новую папку (каталог)?
Дата добавления: 31.07.2006 / 12:36 | просмотров: 179 | платформа: VB

Как поменять заголовки всех окон в системе?
Дата добавления: 31.07.2006 / 12:51 | просмотров: 161 | платформа: VB

Проверить существование каталога (папки)
Дата добавления: 31.07.2006 / 17:37 | просмотров: 122 | платформа: ASP .NET (VB)

Как отправить E-Mail?
Дата добавления: 01.08.2006 / 11:52 | просмотров: 202 | платформа: ASP

Проверка существования директории
Дата добавления: 31.07.2006 / 12:41 | просмотров: 184 | платформа: VB

Как установить анимированный курсор?
Дата добавления: 16.08.2006 / 19:49 | просмотров: 135 | платформа: VB

Перекодировка текста с латинской раскладки в русскую
Дата добавления: 16.08.2006 / 19:12 | просмотров: 174 | платформа: VB

Как программно изменить тему страницы?
Дата добавления: 31.07.2006 / 13:40 | просмотров: 147 | платформа: ASP .NET (VB)

Как преобразовать десятичное число в шестнадцатеричное?
Дата добавления: 16.08.2006 / 20:25 | просмотров: 132 | платформа: VB

Юмор на Kbyte.Ru

«Придите и уберите скрепку, которая стучится по стеклу изнутри экрана. Я не могу из-за нее работать. Она мне все нервы измотала! Она постоянно говорит мне, что я не умею печатать! Это вы, наверное, нарочно сделали! Я ненавижу этот компьютер. «

Рейтинг: 157
Всего голосов: 230
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

— Дети, что для вас было труднее всего в третьем классе?
— Объяснять продавщице, для кого покупается водка!

Рейтинг: 34
Всего голосов: 60
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

— Михал Ефремович, а как вы намерены бороться с этими, как их там, зарплатами в конвертах?
— Да нет ничего проще, Владимир Владимирович, запретим конверты!

Рейтинг: 119
Всего голосов: 195
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

Гуляя по лесу, программист набрел на пещеру.
— А! — крикнул он.
— А. А. А. — ответило эхо.
— Эхо! — позвал он.
— Echo is ON, — ответило эхо.

Рейтинг: 43
Всего голосов: 62
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

Конфеты для программистов: «Мышки на сервере».

Рейтинг: 33
Всего голосов: 65
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

В нашем подъезде около охранника стоит аквариум с рыбками. Аквариум большой, рыбки красивые. За ними постоянно ухаживают. Рядом на стенде висит объявление: «Рыбок не кормить!»
Ниже нетрезвой дрожащей рукой подписано: «А поить можно».

Рейтинг: 48
Всего голосов: 72
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

Чем русский отличается от цыгана? Цыган никогда не хает тех, у кого он коня своровал.

Рейтинг: 45
Всего голосов: 63
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

Удалить папку вместе с ее содержимым?

Рейтинг: 32
Всего голосов: 65
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

Рабинович узнал о возвращении Гагарина на Землю:
— Вылететь из Советского Союза, облететь вокруг земли — и все это для того, чтобы снова вернуться!

Рейтинг: 26
Всего голосов: 41
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

Приходит новый русский в магазин и говорит:
— Дайте мне надувную постель 2 метра в длину, 2 метра в ширину и чтобы внутри морская вода была с подсветкой, рыбками, крабами и всякими морскими штуками.
Ночь, новый русский лег спать на новую постель. Вдруг из постели на него глаз смотрит. Новый русский:
— Ты кто?
— Кто, кто Кусто!

Рейтинг: 29
Всего голосов: 42
Оцените этот анекдот через E-Mail:
Выберите оценку: 5 | 4 | 3 | 2 | 1

Выпуск подготовил: R-KDR-19826

Copyright (c) Nemiro AS, 2005-2006

Мастер Йода рекомендует:  Карту «Тройка» взломали, получив возможность бесплатно пополнять баланс
Добавить комментарий