Asp простые сценарии


Содержание

Разработка ASP/COM+ Web приложений с использованием Team Developer v3.1

Сурен Бехари (Suren Behari)
менеджер по программным продуктам

Переведено БНТП по заказу Interface Ltd.

Введение

Популярность Web-приложений на основе технологии ASP (Active Server Page) связана с тем, что эта технология очень проста в изучении, обеспечивает высокую производительность, масштабируемость и гибкость, и наконец, что немаловажно, полностью поддерживается компанией Microsoft. По этой причине компания Gupta приняла решение, что в ее интересах обеспечить разработчиков способом создания Web-решений, которые основываются на этом весьма популярном серверном языке программирования сценариев.

Существует альтернативное Web-решение компании Gupta, известное как Web Extensions, основанное на использовании существующего SAL-интерфейса и бизнес-логики. В данном документе не обсуждается Web Extensions; более подробная информация об этом по адресу.

В настоящее время возможно построение и применение полностью масштабируемых COM-серверов при помощи мастера COM из продукта Team Developer. Теперь у разработчика есть возможность отладки COM-серверов, которые вызываются не клиентами Team Developer, такими как VB или ASP. Таким образом, используя версию 3.1 продукта Team Developer, разработчик может быстро приступить к построению решений на основе ASP/COM, сочетающих простоту ASP и производительность Team Developer. Данный официальный документ продемонстрирует подход к построению таких решений.

Общий обзор технологии ASP

ASP (Active Server Pages) – одна из наиболее широко используемых Web-технологий (по крайней мере на платформе Microsoft). Вам не придется просматривать слишком много Web-страниц, чтобы увидеть, что довольно большое их число заканчивается расширением .asp. Принципиальной причиной популярности ASP является то, что ASP позволяет разработчикам выполнять код, размещенный внутри web-страниц, используя понятный язык сценариев, такой как VBScript или Jscript (реализация JavaScript от компании Microsoft).

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

В простейшем случае ASP-страница – это типичный ASCII файл, которые содержит HTML и программный (VBScript или Jscript) коды, хотя в более сложных случаях решение на основе ASP может объединять web-приложения, содержащие HTML, Jscript/VBScript, SQL, ADO и COM/COM+ компоненты среди прочих.

Примечание: детальный обзор языков VBScript/Jscript не является целью данного Документа. Предполагается базовое знакомство с этими языками сценариев также, как и с основами форм HTML. Также предполагается знакомство с процессом создания и использования COM объектов в рамках продукта Team Developer. Более подробную информацию о последнем процессе можно найти в онлайновой документации на продукт Team Developer, примерах и других документах на Web-сайте.

IIS (Internet Information Server) – это Web-сервер производства компании Microsoft. Как правило, Web-серверы «подают» HTML-код браузерам (клиентам) по получении от них HTTP запросов. Когда IIS получает запрос на файл с расширением «.asp», он исполняет сценарии внутри этого файла, генерирует чистую HTML страницу и возвращает ее браузеру (клиенту), которые выдал запрос.

ASP поддерживает как Visual Basic Script, так и собственную реализацию JavaScript (Jscript), сделанную компанией Microsoft. Также существуют средства от третьих сторон, которые позволяют интегрировать другие популярные языки сценариев, такие как Perl, в решения ASP.

Для того, чтобы внедрение решений ASP было максимально простым, ASP содержит следующие 5 встроенных объектов:

  • Объект Сервер дает разработчику возможность управлять ресурсами сервера. Одним из наиболее широко используемых методов, которые он поддерживает, является метод CreateObject( ), который позволяет создать экземпляр COM объекта.
  • Объект Приложение хранит информацию и управляет ей на уровне приложения. Этот означает, что любая переменная объекта Приложение может быть использована во всех сессиях Web-приложения.
  • Объект Сессия хранит информацию и управляет ей на уровне пользовательской сессии. Обычно это дает возможность Web-приложению запомнить информацию о конкретной пользовательской сессии.
  • Объект Запрос позволяет собирать информацию, посылаемую через HTTP запрос.
  • Объект Отклик позволяет послать информацию назад к клиенту по протоколу HTTP.

Теги ‘ ’ используются внутри ASP страницы для указания начала и конца сценария, который Web-сервер должен выполнить на сервере вместо простой передачи и возврата HTML.

Пример ASP страницы в данном случае является лучшей иллюстрацией. Листинг 2.1- это ASP страница, которая извлекает виды продукта и цены из таблицы PRODUCT базы данных ISLAND, используя для этого объект “ADO recordrset”.

Листинг 2.1 Извлечение видов продукта и цен и демонстрация их в виде HTML таблицы.

Сценарий, приведенный выше, может быть помещен в файл ‘ADODemo.asp’ на PC, где установлен IIS. Если его разместить в корневой папке WEB-сервера, то результаты исполнения можно увидеть, если в адресной строке браузера ввести URL http://localhost/ADODemo.asp.

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

Листинг 2.2 HTML-код, сгенерированный вышеприведенным ASP сценарием

ASP и COM

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

По этой причине COM (Component Object Model фирмы Microsoft) очень хорошо подходит для решений на основе ASP. COM дает возможность использования решений типа «черного ящика»; пользователь COM-объекта должен знать только о его интерфейсах, методах и свойствах.

Основные причины для использования COM-компонентов совместно с ASP заключаются в следующем.

  • Повторное использование: довольно сложно разместить ASP-сценарий так, чтобы его можно было повторно использовать на нескольких различных страницах. Компоненты дают возможность более эффективного управления и повторного использования определенной функциональности, например, доступа к данным.
  • Безопасность: иногда важно сохранить исходные коды от потенциальных опасностей. Размещение их в COM компонентах поможет выполнить такое требование.
  • Масштабируемость: COM компоненты сами по себе не обязательно должны находиться на том же компьютере, что и Web-сервер. Когда компания Microsoft выпустила технологию ASP, она также предложила и Microsoft Transaction Server (MTS), который обеспечивает управление транзакциями для приложений, построенных с применением COM технологии.
  • Взаимодействие: в дополнение к предыдущему пункту существует возможность выходить за пределы объектных систем и получать доступ к объектам, которые относятся к другим стандартам, таким как CORBA; известны продукты третьих компаний, облегчающие это.
  • Простота разработки: COM объекты можно создавать в рамках Team Developer, и, поступая таким образом, Вы защищаете свои ранее сделанные инвестиции. Кроме того, если Вы хоть однажды пытались отлаживать ASP-страницу, то Вы быстро оцените выгоды от возможности использования для этой цели своего любимого отладчика. Создавая COM объекты средствами Team Developer, Вы можете легко отлаживать их динамически, даже когда они вызываются из ASP-страницы. Таким образом, среда Team Developer эффективна и при разработке на основе технологии ASP.

Поэтому по причинам, названным выше, настоятельно рекомендуется, чтобы объекты COM были частью любого существенного Web-решения на основе ASP. Team Developer версии 3.1 отлично подходит любому разработчику, обладающему опытом использования языка SAL и основ COM.

Давайте рассмотрим еще одно простое ASP-решение, но на этот раз для получения требуемой нам функциональности мы используем COM-объект, написанный в Team Developer. Для максимального упрощения мы начнем с Web-страницы, содержащей HTML-форму (ASP_Add.htm) с двумя полями. После подтверждения эта форма вызовет ASP страницу (ASP_Add.asp). ASP-страница породит COM объект (ASP_COM.ASPTestObject), а уже из этого объекта будет вызван метод/функция AddStr(). Метод просто объединит любые значения, помещенные в два поля ввода и вернет результат.

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

Листинг 3.1 HTML-страница, вызывающая ASP сценарий после подтверждения формы (ASP_Add.htm)

Листинг 3.2 ASP страница, вызванная после подтверждения формы, заданной выше (ASP_Add.asp)

Используя Team Developer 3.1, мы можем быстро создать CoClass и Интерфейс (ASPTestObject и IASPTestObject соответственно). К интерфейсу мы добавляем функцию/метод AddStr( ), SAL-код которой приведен ниже.

Листинг 3.3 COM-объект в Team Developer

Примечание: ВСЕ исходные файлы приводятся для пояснения данного документа.

Таким образом, для ЛЮБОГО источника/провайдера данных, у которого есть механизм доступа OLE DB, код Team Developer может обеспечить легко программируемый доступ, который будет знаком любому, у кого есть опыт работы с SAL/SQLWindows.

Вместо использования SqlConnect( ) для получения обработчика Sql для источника данных разработчику потребуется использовать вызовы SqlCreateSession( ) и SqlCreateStatement( ); а вместо использования вызова SqlDisconnect( ) для отключения от источника – вызов SqlFreeSession( ). Для большинства стандартных SQL операций все используемые Sql…( ) функции будут такими же, как и при непосредственном подключении (например, SqlPrepare( ), SqlExecute( ), SqlFetNext( ) и т.д.).

При таком простом переходе к использованию механизма OLE DB для доступа к любому источнику данных (помните, что источники данных могут быть не только реляционными базами данных) программист Team Developer может легко использовать OLE DB в составе Web-решений на основе ASP/COM. Простота, с которой это достигается, показана на ниже приведенном листинге. В данном примере для создания класса CoClass (OLE DB) с единственным Интерфейсом (IOLEDB) использован Мастер классов COM среды Team Developer. Интерфейс предоставляет 6 методов (Connect, Disconnect, NextProduct, Price, SelectProducts and Style).

Листинг 4.1 Методы Интерфейса IOLEDB (ASP_COM_OLEDB.app)

Метод Connect демонстрирует, насколько просто подключиться к источнику данных, используя OLE DB из состава Team Developer. В данном случае мы применяем механизм доступа SQLBaseOLEDB, но при изменении параметра строки подключения, передаваемого функции SqlCreateSession( … ) можно использовать любой другой механизм OLE DB. Следует упомянуть также метод Disconnect, вследствие использования в нем функции SqlFreeSession( … ). Кроме этих двух методов используемая функциональность должна быть сразу же понятна любому разработчику, знакомому с использованием Sql… функций в среде Team Developer/SQLWindows.

Листинг 4.2 Фактические переменные Интерфейса IOLEDB (ASP_COM_OLEDB.app)
В данном примере демонстрируется простота, с которой может быть вызван описанный выше COM-сервер.

Листинг 4.3 ASP страница, использующая COM сервер ASP_COM_OLEDB.OLEDB (ASP_OLEDB.asp)

Необходимо отметить, что разработчик может использовать объектную модель ADO напрямую из своего ASP-сценария, как это сделано в листинге 2.1, но при этом требует знакомства с подобной моделью данных. Пример, приведенный выше, показывает, насколько просто разработчик Team Developer может создавать ASP решения на основе OLEDB, используя уже существующие у него навыки.

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

Для реального увеличения масштабируемости решений на основе ASP технологии компания Microsoft предоставляет инструмент/службу API для обеспечения управления компонентами и транзакциями, который называется Microsoft Transaction Server (MTS). MTS обеспечивает управление транзакциями для COM компонентов и является эффективным инструментом управления компонентами, который предоставляет механизм миграции сервера и клиента, а также службу регистрации компонентов. Дополнительную информацию о MTS можно найти в соответствующем официальном документе. Использование ASP и MTS существенно обогащается подключением OLE DB/ADO, которые обеспечивают общие средства доступа к данным независимо от их структуры.

Отладка COM+ и ASP

Использование Team Developer 3.1 делает возможным выполнять активную отладку COM-сервера, разработанного при помощи Team Developer, независимо от того, откуда он вызван. Таким образом, COM-сервер, написанный в Team Developer, вызванный из ASP или VB, может быть отлажен столь же просто, как и сервер, вызванный из другого клиента Team Developer.

Все, что нужно сделать для вызова режима отладки, — это открыть исходный код уже сформированного и зарегистрированного COM объекта, а затем вызвать команду меню Debug/Go (или использовать клавишу F7). Необходимо задать точку останова в подходящем месте в любой из функций Интерфейса, после чего вернуться в клиентское приложение, которое будет использовать этот COM объект, и запустить его; если это ASP сценарий, вызвать его, используя http в браузере.

Если клиентское приложение вызовет метод сервера, в котором задана точка останова, то, вернувшись в Team Developer, разработчик может пошагово пройти SAL-код, имея доступ ко всем существующим средствам отладки. Основной момент, о котором следует помнить, это то, что для проведения отладки необходим предварительный запуск сервера (Debug / Go или F7); про этот шаг часто забывают.

  • Team Developer 3.1
  • Microsoft Internet Information Server

За дополнительной информацией обращайтесь в компанию Interface Ltd.

Серверные сценарии. ASP, PHP, JSP, . (на выбор)

Сценарии, предназначенные для выполнения на стороне сервера, обычно располагаются в специальном каталоге внутри папки сайта. Принимая запрос пользователя, в котором указана программа, сервер запускает эту программу на выполнение. В результате выполнения программы выходные данные передаются web-серверу, а затем клиенту. Для написания сценариев, работающих на стороне сервера, обычно используются такие технологии, как Perl, ASP, ColdFusion, PHP, JSP и SSI.

В разделе «Пассивные и активные Web-серверы» четвертой главы этой книги, а также в своей книге [1], посвященной разработке Web-приложений для Microsoft Windows, мы подробно описали взаимодействие между браузером посетителя и Web-сервером в процессе просмотра страниц HTML. Напомним вкратце, как осуществляется такое взаимодействие для обычных статических страниц HTML.

Когда посетитель направляет свой браузер по тому или иному адресу URL, этот запрос передается Web-серверу с использованием протокола передачи гипертекстовых данных HTTP. Получив запрос, Web-сервер находит в своих каталогах файл нужной страницы HTML и отправляет его браузеру посетителя (рис. 4-1). В результате посетитель видит содержимое запрошенной страницы в окне браузера.

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

Программы CGI позволяют формировать страницы HTML динамически, создавая их посредством прямого вывода кода HTML в браузер посетителя непосредственно из программы (рис. 4-2). Как мы говорили в 5 главе нашей книги, технология шаблонов позволяет отделить дизайн динамической страницы от исходного текста программы CGI, формирующего эту страницу.

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

Перед отправкой страницы HTML посетителю этот код может вставлять в нее произвольные символы или фрагменты или полностью формировать динамические страницы «с нуля» (в том числе с применением шаблонов), а также выполнять переадресацию браузера посетителя на другой адрес URL.

В дальнейшем мы будем называть Web-приложения, созданные с использованием сценариев PHP, приложениями PHP или PHP-приложениями.

Заметим, что по принципу своего действия сценарии PHP аналогичны сценариям активных серверных страниц Active ServerPages (ASP), разработанных компанией Microsoft для своего Web-сервера Microsoft Internet Information Server (IIS). Подробно мы рассказывали об использовании сценариев ASP в [1].

Помимо отличий в языках программирования, применяемых в PHP и ASP, между этими технологиями имеется и более существенное отличие. В частности, используя модель компонентного объекта Component Object Model (COM), сценарии ASP могут обращаться к серверным элементам управления ActiveX. В составе Web-сервера Microsoft IIS имеется готовый набор таких элементов, о чем мы подробно говорили в [1]. При необходимости Вы можете создавать собственные элементы управления ActiveX, расширяя этот набор.

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

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

Ajax. Объект XMLHttp

AJAX означает » Asynchronous JavaScript and XML «, т.е. Асинхронный JavaScript и XML. В действительности AJAX состоит из JavaScript, как и любое другое приложение, и соединения XMLHTTP с Web-сервером. Вот и все! Общая идея заключается в том, что можно извлекать с сервера данные просто по мере необходимости, не обновляя всю страницу.

Прежде всего AJAX почти всегда опирается на серверный язык, такой, как PHP или ASP. Когда пользователю необходимо получить новые данные, JavaScript запрашивает их, а сервер, вероятно, запросит базу данных и затем вернет данные. Эти данные можно вернуть в различной форме. Если они структурированы, то это будут обычно данные XML или JSON. Если это очень простые данные (такие, как получение описания какого-то объекта), то можно часто увидеть людей, которые просто записывают эти данные непосредственно в ответ AJAX.

Объект XMLHttpRequest (или, сокращенно, XHR) дает возможность браузеру делать HTTP-запросы к серверу без перезагрузки страницы.

Несмотря на слово XML в названии, XMLHttpRequest может работать с данными в любом текстовом формате, и даже бинарными данными. Использовать его очень просто.

Объект XMLHttpRequest имеет ряд свойств, которые позволяют проконтролировать выполнение запроса:

status: содержит статусный код ответа HTTP, который пришел от сервера. С помощью статусного кода можно судить об успешности запроса или об ошибках, которые могли бы возникнуть при его выполнении. Например, статусный код 200 указывает на то, что запрос прошел успешно. Код 403 говорит о необходимости авторизации для выполнения запроса, а код 404 сообщает, что ресурс не найден и так далее.

statusText: возвращает текст статуса ответа, например, «200 OK»

responseType: возвращает тип ответа. Есть следующие типы:

response: возвращает ответ сервера

responseText: возвращает текст ответа сервера

responseXML: возвращает xml, если ответ от сервера в формате xml

Например, выполним запрос к текстовому файлу, который находится на лока

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


Работа с асинхронными запросами чуть более сложна, чем с синхронными, поскольку нам надо еще обработать событие readystatechange объекта XMLHttpRequest.

При асинхронном запросе объект XMLHttpRequest использует свойство readyState для хранения состояния запроса. Состояние запроса представляет собой число:

0: объект XMLHttpRequest создан, но метод open() еще не был вызван для инициализации объекта

1: метод open() был вызван, но запрос еще не был отправлен методом send()

2: запрос был отправлен, заголовки и статус ответа получены и готовы к использованию

3: ответ получен от сервера

4: выполнение запроса полностью завершено (даже если получен код ошибки, например, 404)

Ajax. GET запросы

Метод get осуществляет GET-запрос к серверу, то есть все данные запроса передаются в строке запроса. Он принимает следующие параметры:

url: обязательный параметр, содержащий адрес ресурса, к которому будет обращаться запрос

data: необязательный параметр, содержащий простой объект javascript или строку, которые будут отправлены на сервер вместе с запросом

success(data, textStatus, jqXHR): необязательный параметр — функция обратного вызова, которая будет выполняться при успешном выполнении запроса. Она может принимать три параметра: data — данные, полученные с сервера, textStatus — — статус запроса и jqXHR — специальный объект jQuery, который представляет расширенный вариант объекта XMLHttpRequest.

dataType: необязательный параметр, содержащий тип данных в виде строки, например, «xml» или «json»

На выходе метод get возвращает объект jqXHR, который будет инкапсулировать данные запроса. Позднее мы подробнее разберем этот объект.

Итак, перепишем пример из предыдущего параграфа с использованием метода get:

Здесь использованы два первых параметра: адрес ресурса и функция обратного вызова. В этой функции в качестве параметра data мы получаем принятые от сервера данные и загружаем их в качестве разметки в элемент выборки ($(‘#news’).html(data);). По сути то же самой мы могли бы сделать с помощью метода load.

Используя параметр data, мы можем отправить дополнительные данные. Например, можно отправить запрос на получение элемента из базы данных по id:

А поскольку в GET-запросе все данные передаются в строке запроса, то данный код будет аналогичен следующему:

Соответственно на стороне сервера мы сможем получить этот параметр и произвести с ним какие-либо действия, например, получить элемент из бд по данному id:

Использование типа данных

Нередко возникает такая ситуация, когда сервер отправляет данные в определенном формате, например, json или xml. Так, php-файл на стороне сервера мог бы выглядеть следующим образом:

«Начало чемпионата России»,»date»=>»13.07.2013″));

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

«+data.event+»

«+data.date+»

Ajax. POST запросы.

В отличие от GET-запросов данные POST-запросов передаются не в строке запроса, а в его теле. Распространенным примеров подобных запросов является отправка данных формы на сервер.

Для отправки POST-запросов предназначен метод post. Его объявление и использование в целом аналогично методу get. Он принимает следующие параметры:

url: обязательный параметр, содержащий адрес ресурса, к которому будет обращаться запрос

data: необязательный параметр, содержащий простой объект javascript или строку, которые будут отправлены на сервер вместе с запросом

success(data, textStatus, jqXHR): необязательный параметр — функция обратного вызова, которая будет выполняться при успешном выполнении запроса. Она может принимать три параметра: data — данные, полученные с сервера, textStatus — — статус запроса и jqXHR — специальный объект jQuery, который представляет расширенный вариант объекта XMLHttpRequest.

dataType: необязательный параметр, содержащий тип данных в виде строки, например, «xml» или «json»

На выходе метод post возвращает объект jqXHR.

1 2 3 4 $.post(‘ajax.php’, <'login':'1111', 'password' : '2222'>, function(data) < $('#news').html(data); >);

В данном случае мы передаем в качестве данных пароль и логин. На сервере мы можем получить данные и отправить ответ пользователю:

1 2 3 4 5 6 7 8 9 10

Итак, серверная часть, к которой будет обращаться форма — файл ajax.php — у нас остается той же. Только в данном случае теперь для параметра data в методе post мы данные берем из полей на этой форме.

Обратите внимание, что мы блокируем обычную отправку формы (event.preventDefault();), иначе у нас бы шла переадресация.

Сериализация формы

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

Итак, применим сеиализацию формы:

В отличие от предыдущего примера у нас здесь два отличия. Во-первых, обратите внимание, что поля для ввода имеют атрибут name. При указании параметра data мы производим сериализацию данных формы через метод serialize: $(«#loginForm»).serialize(). В данном методе в тело запроса передаются параметры. Причем имена параметров — это значения атрибутов name полей ввода. А значения параметров — соответственно введенные значения в текстовые поля.

И поэтому с помощью php мы можем извлечь эти значения: $login=$_POST[‘login’].

JSON

JSON (англ. JavaScriptObjectNotation, обычно произносится как /ˈdʒeɪsən/ JAY-sən [1] ) — текстовый форматобмена данными, основанный на JavaScript. Как и многие другие текстовые форматы, JSON легко читается людьми. Формат JSON был разработан Дугласом Крокфордом [2] .

Несмотря на происхождение от JavaScript (точнее, от подмножества языка стандарта ECMA-262 1999 года), формат считается независимым от языка и может использоваться практически с любым языком программирования. Для многих языков существует готовый код для создания и обработки данных в формате JSON.

JSON-текст представляет собой (в закодированном виде) одну из двух структур:

Набор пар ключ: значение. В различных языках это реализовано как объект, запись, структура, словарь, хэш-таблица, список с ключом или ассоциативный массив. Ключом может быть только строка (регистрозависимая: имена с буквами в разных регистрах считаются разными [3] ), значением — любая форма.

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

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

В качестве значений в JSON могут быть использованы:

Объект — это неупорядоченное множество пар ключ:значение, заключённое в фигурные скобки «< >». Ключ описывается строкой, между ним и значением стоит символ «:». Пары ключ-значение отделяются друг от друга запятыми.

Массив (одномерный) — это упорядоченное множество значений. Массив заключается в квадратные скобки «[ ]». Значения разделяются запятыми.

Число.

Литералы true, false и null.

Строка — это упорядоченное множество из нуля или более символов юникода, заключённое в двойные кавычки. Символы могут быть указаны с использованием escape-последовательностей, начинающихся с обратной косой черты «\» (поддерживаются варианты \», \\, \/, \t, \n, \r, \f и \b), или записаны шестнадцатеричным кодом в кодировке Unicode в виде \uFFFF.

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

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

«streetAddress»:»Московскоеш., 101, кв.101″,

Лекция 1. Что такое ASP.NET. Инсталляция и тестовый проект.

Введение

Microsoft .NET Framework — это платформа для создания, развертывания и запуска Web-сервисов и приложений. Она предоставляет высокопроизводительную, основанную на стандартах, многоязыковую среду, которая позволяет интегрировать существующие приложения с приложениями и сервисами следующего поколения, а также решать задачи развертывания и использования интернет-приложений. .NET Framework состоит из трех основных частей — общеязыковой среды выполнения (common language runtime), иерархического множества унифицированных библиотек классов и компонентной версии ASP, называемую ASP.NET.

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

Давайте обсудим, что такое динамические страницы HTML и чем они отличаются от статических. Статическая страница содержит код на языке гипертекстовой разметки HTML. Когда автор страницы пишет ее, он определяет, как будет выглядеть страница для всех пользователей страницы. Содержание страницы будет всегда одинаковым независимо от того, кто и когда решит ее просмотреть. Языка HTML вполне достаточно для отображения информации, которая редко изменяется и не зависит от того, кто ее просматривает. Страница HTML — простой ASCII-текст, следовательно, клиент может работать в любой операционной системе.

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

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

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

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

Существуют языки, способные динамически изменять содержимое веб-страницы. С одной стороны, это языки скриптов, выполняющиеся непосредственно у клиента. Примеры скриптовых языков — JavaScript и VBScript. Скрипты на этих языках встроены в код HTML, который сервер посылает браузеру. Сценарии, выполняемые на стороне клиента, выделяются тегами и . Браузер интерпретирует этот код и показывает пользователю результат. Сам код можно просмотреть через View Source браузера. Естественно, эти программы не могут быть большими. Например, если нужно выполнить поиск в базе данных, мы не может отправить пользователю все ее содержимое. Но скрипты могут проверить правильность запроса, введенного в форму, тогда не придется перезагружать сервер обработкой неправильных запросов. Некоторые программисты создают на JavaScript анимационные эффекты. Одна студентка intuit.ru желала найти скрипт, который бы отправлял SMS-сообщения. Увы, это невозможно. Выполняемых на стороне клиента сценариев недостаточно для создания полноценных динамических страниц. Даже если на странице используется JavaScript, анимированные картинки .gif, она называется статической.

Динамическая веб-странице должна быть создана «на лету» программой, исполняющейся на интернет-сервере. Широко применяются механизм шлюзов CGI(Common Gateway Interface). Вначале пользователь получает статическую страницу с формой. Вам известно, что в теге FORM существует атрибут ACTION. Именно он задает адрес (URL) исполняемого приложения. На сервере находятся исполняемые файлы программ, написанных, например на C/С++ или Дельфи, которые по протоколу HTTP принимают данные из входного потока или из переменных окружения и записывают в стандартный выходной поток готовую страницу.

Пользователю в ответ на запрос посылается HTML код, который был специально сгенерирован для него. Это может быть, например, результат поиска в поисковой системе. CGI -скрипты могут быть написаны на интерпретируемом языке (Perl) или даже скрипте командной строки. Входной и выходной потоки переназначаются. На вход интернет-сервер принимает данные, введенные пользователем. После обработки полученных данных, пользователю возвращается результирующая страница. При исполнении cgi-программа загружается в память сервера, а при завершении – удаляется. Когда 100 клиентов одновременно обращаются к серверу, в памяти создаются 100 процессов, для размещения кода каждого из которых нужна память. Это отрицательно сказывается на масштабируемости. Напомним, что масштабируемость — это возможность плавного роста времени ответа программной системы на запрос с ростом числа одновременно работающих пользователей.

Для решения это проблемы Microsoft была предложена альтернатива – ISAPI(Internet Server Application Programming Interface)-расширения и фильтры. Вместо исполняемых файлов используются DLL – библиотеки. Код DLL находится в памяти все время и для каждого запроса создает не процессы, а нити исполнения. Все нити используют один и тот же программный код. ISAPI –приложение выполняется в процессе IIS-сервера. Это позволяет повысить производительность и масштабируемость.

ISAPI-расширения можно создавать в Visual Studio C++ 6.0, пользуясь мастером.

У ISAPI тоже есть недостатки, относящиеся к разработке. Если мы меняем исходный код dll, мы должны его откомпилировать и поместить в исполняемую директорию сервера. Но так как предыдущий вариант dll находится в памяти, необходимо остановить сервер, чтобы получить доступ на изменение файла. В это время клиенты не смогут получить в сервера ни один документ, и, конечно, будут не удовлетворены.

Скриптовые языки, исполняющиеся на стороне сервера – php и asp. Технология asp была разработана Microsoft в 90-х годах.

Выполнение кода asp поддерживается ISAPI-расширением сервера. В диалоге конфигурации сервера IIS определяются способы обработки файлов с различными расширениями. Для обработки URL-адреса с расширением в установках сервера определен файл asp.dll. Файлы asp отправляются к нему на обработку. На вход поступает asp, а на выходе имеем поток HTML-кода.

Пример файла asp:

Тег сигнализирует asp, что в нем находится код, который он должен обрабатывать на сервере. Выполняется скрипт на языке, который указан в директиве Language. Оператор Response.Write записывает текст в выходной поток сервера, таким образом, он становится частью HTML-страницы, отправленной пользователю.

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


Скриптовые языки не поддерживают строгую типизацию. Что это значит? Вы можете не описывать переменную до ее использования и можете присваивать ей значения разных типов. Это удобно, но создает почву для ошибок. Например, у вас есть переменная x1, и вы присваиваете ей значение 1, но вы сделали опечатку и по ошибке написали x2=1. Будет создана новая переменная x2, а значение x1 не изменится. В языке со строгой типизацией компилятор заметит, что переменная x2 не описывалась, и выдаст ошибку.

В 2000 году на конференции разработчиков в качестве части новой технологии .NET Microsoft представила ASP+. С выходом .NET Framework 1.0 она стала называться ASP.NET.

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

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

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

Платформа .NET Framework предоставляет приложениям среду выполнения, сама непосредственно взаимодействуя с операционной системой. Выше лежит интерфейс ASP.NET приложений, на котором в свою очередь базируются веб-формы (ASP.NET страницы) и веб-сервисы. Интерфейс .NET Framework позволяет стандартизировать обращение к системным вызовам и предоставляет среду для более быстрой и удобной разработки. CLR обеспечивает единый набор сервисов для всех языков.

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

В 2004 году появилась версия ASP.NET 2.0(бета-версия, окончательный выход – конец 2005-начало 2006). Как утверждается, эта версия позволяет сократить объем кодирования на 70%. Новые возможности версии 2.0 – например, использование шаблонов дизайна страниц(Master Page), упрощенная локализация Web-приложений, более 50 новых серверных элементов управления. Цели, которые преследовали разработчики новой версии – повысить скорость разработки сайтов, масштабируемость, легкость поддержки и администрирования сайтов, скорость работы сервера. Появилась панель остнастки MMC (консоль управления Microsoft), предоставляющая графический интерфейс для управления настройками ASP.NET. Изменять настройки проекта теперь можно и через web-интерфейс. ASP.NET 2.0 поддерживает работу на 64-битных процессорах. Сервис персонализации (personalization) предоставляет готовое решение для хранения персональных данных, непосредственно характеризующих пользователя сайта, так называемого профиля пользователя (Profile).

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

Предыдущие версии Visual Studio для проектов ASP.NET требовали наличия на машине разработчика сервера IIS. Теперь сервер встроен в среду разработки.

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

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

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

ASP.NET — это технология, а не язык, и позволяет программировать на разных языках – С#, Visual Basic, J#. В платформе .NET все языки равны, но некоторые равнее(Дж. Оруэлл). Вот таким языком и является С#, потому что он был специально создан для этой платформы. Программирование C# позволяет в полной мере использовать концепции, методы и паттерны объектно-ориентированной разработки. Язык Visual Basic 8.0 наделен почти теми же возможностями. Чтобы научиться ASP.NET, вам нужно знать основы HTML, а знание asp не обязательно. Оно может даже помешать, так как придется менять образ мышления. Также для понимания многих желательно знать CSS и JavaScript.

Процесс инсталляции

ASP .NET 2.0 можно установить на компьютерах с ОС Windows 2000 с Service Pack 4, Windows XP с Service Pack 2 и более поздними версиями Windows. Готовые сайты предпочтительно устанавливать на Windows Server 2003.

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

Если вы приобретете Visual Studio .NET 2005, то для работы достаточно будет только его. .NET Framework содержится на дисках. В его состав входит Visual Web Developer, который позволяет создавать профессиональные веб-приложения, а также desktop-приложения на разных языках программирования. Продукты Microsoft выпускаются на DVD, но есть набор из двух CD от «Мегасофт». Visual Studio .NET 2005 требует около 2 Гигабайт дискового пространства. При этом инсталлируется ASP.NET 2.0, среда разработки, SQL Server Express, встроенный веб-сервер, Crystal Reports со специальными элементами управления для ASP.NET 2.0.
Бесплатно распространяемое программное обеспечение.

Visual Web Developer 2005 Express Edition – свободно распространяемая среда предназначенный для новичков и студентов, доступная по адресу http://msdn.microsoft.com/vstudio/express/vwd/. Список отличий VWD от Visual Studio.NET 2005 невелик и для начинающих несущественен, он приведен здесь: http://msdn.microsoft.com/vstudio/products/compare/default.aspx

Инсталлятор VWD имеет объем 2,8 Мб, но в процессе инсталляции он загрузит еще 40 Мб и 80 Мб, если захотите установить документацию. При этом также будет установлен .NET Framework с ASP.NET 2.0.

Системные требования – процессор с минимальной скоростью 600 МГц, 128 МБ памяти и 1.3 ГБ дискового пространства. После инсталляции нужно будет зарегистрировать свою установку, это совершенно бесплатно.

В качестве среды разработки вы можете выбрать WebMatrix. Эта программа совмещает в себе редактор и http-сервер. Ее можно загрузить на http://www.asp.net/WebMatrix.

У WebMatrix инсталлятор размером всего 1.2 Мб, но у него меньше возможностей, чем у VWD. Но, в общем, эти среды разработки похожи. У WebMatrix есть неприятная особенность – она дает запрос на сохранение во время закрытия файлов, которые не редактировались. VWD Express позволяет одним нажатием кнопки открыть Web-интерфейс конфигурирования проекта. В VWD работает технология IntelliSense, которая автоматически предлагает возможные в данном месте элементы кода.

Если вы решили работать с WebMatrix, вы должны установить на своей машине .NET Framework 2.0 и ASP.NET 2.0.

Если у вас операционная система Windows Server 2003, то .NET Framework уже предустановлен. Вы можете проверить, есть ли вас директория %WINSDIR%Microsoft.NETFramework. Если нет, вы можете ее загрузить на сайте Microsoft. Последние версии находятся по адресу http://msdn.microsoft.com/netframework/downloads/updates

На данный момент это .NET Framework 2.0, но к моменту, когда вы будете читать эту лекцию, могут появиться более новые версии. Вы можете скачать новую версию, даже если у вас уже есть другая. Они будут существовать на компьютере одновременно в поддиректориях %WINSDIR%Microsoft.NETFramework, с именем, соответствующим номеру версии. Можно сказать, что каждая версия представляет собой сборку. Система версий поддерживается для всех приложений, созданных с использованием .NET Framework.

Там вы увидите ссылки на .NET Framework для разных архитектур компьютера.

При желании загрузите .NET Framework Version 2.0 SDK, которая содержит наряду с .NET Framework Version 2.0 SDK документацию и примеры, которые могут оказаться полезными.

По адресу http://asp.net/default.aspx можно найти много полезных для разработчиков программных продуктов, примеров кода и статей.

IIS(Internet Information Server) находится на инсталляционном диске Windows 2000/XP, но предустановлен только на серверах. Его можно установить, зайдя в Control Panel->Add or Remove Programs->Add/Remove Windows Components. Компьютер попросит вас вставить инсталляционный диск.

IIS может понадобиться, если вам нужен полноценный сервер для работы в интернет, а не просто на своем компьютере или в локальной сети или вы решили набирать текст в обычном редакторе. Для работы на своем компьютере во все эти среды разработки встроен сервер Cassini, который первоначально появился как часть WebMatrix. Символ WebMatrix – планета Сатурн, а Кассини — известный исследователь Сатурна. Предыдущие версии Visual Studio требовали наличия IIS, но теперь Cassini встроен и в Visual Studio 2005, что позволяет работать даже в Windows XP Home Edition.

Примеры будут даваться как для WebMatrix, так и Visual Studio. Некоторые примеры требуют VWD Express или Visual Studio.
Сообщества разработчиков.

Через меню помощи Visual Web Developer Express можно зайти на сайты форума по ASP.NET. А вот адреса сайтов на русском языке:

* http://www.aspnetmania.com
* http://www.gotdotnet.ru/
* http://www.sql.ru/
* http://dotsite.ru/
* http://www.rsdn.ru/

Вы можете завести пробный хостинг на http://europe.webmatrixhosting.net/russia/default.aspx.

Первый проект

Вначале решите, в какой директории будете создавать страницы. Все файлы, находящиеся в одной директории, считаются единым проектом.Запустите выбранную вами среду разработки. Выберите пункт меню File-New-Website. Появится диалоговое окно. Назначьте в нем имя проекта и выберите язык программирования С#.

По умолчанию проект создается в файловой системе. По желанию его можно создать на HTTP или FTP-сервере. Из файловой системы проект всегда можно скопировать на сервер нажатием одной кнопки в заголовке Solution Explorer.

В проекте будет создана страница default.aspx. Выберите ее, и появится окно редактирования с закладками Design и Source. Не меняя ничего, щелкните на кнопке со стрелкой, чтобы просмотреть страницу в браузере. Появится окно, котором спрашивается, нужно ли добавить в файл web.config возможность отладки. Нажмите OK. На панели задач должен появиться значок веб-сервера. Откроется браузер, показывающий страницу по адресу http://localhost:номерпорта/Website1/default.aspx. localhost обозначает сервер, работающий на вашем компьютере. Встроенный сервер Cassini сам назначает себе номер порта – для каждого проекта он разный. Сервер IIS обычно работает через порт 80(или 8080, если тот занят), и для него номер порта указывать не нужно. При этом ваша страница будет скомпилирована.

Пока что страница в бразере пустая.

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

Пример страницы ASP.NET

В основу разработки Web-приложений на ASP.NET положена модель разделения кода представления и кода реализации, рекомендуемая Майкрософт при создании динамических документов. Страницы ASP.NET имеют расширение .aspx. Программный код может размещаться либо в отдельном файле, либо на странице внутри специального тэга для сценариев. Файл с кодом обычно имеет расширение .aspx.cs (.aspx.vb) и имя, совпадающее с именем основного ASPX файла.

Внедрение программного кода в страницу aspx похоже на то, что используется в обычных asp-страницах.

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

Наиболее часто используется директива @ Page, с помощью которой можно задавать множество параметров:

серверный язык программирования для кода на странице;

место нахождения кода сервера (непосредственно в странице или в отдельном файле класса);

параметры отладки и трассировки.

имеет ли страница связанную главную страницу.

Если директива @ Page не включена в страницу, или если эта директива не включает определенные настройки, параметры наследуются из файла конфигурации для приложения (файл Web.config) или из файла конфигурации узла (файл Machine.config). Наиболее важные атрибуты директивы перечислены в таблице 4.1.

Атрибуты директивы @ Page

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
AutoEventWireup Автоматическая обработка событий страницы
Buffer Управляет буферизацией страницы. По умолчанию буферизуется
ClassName Позволяет назначать имя класса, сгенерированного данной страницей
CodeFile Название файла с отделенным кодом для данной страницы
Culture Устанавливает набор региональных параметров, т.е. язык, формат валюты, даты, чисел
Debug Если true, на страницу выводится отладочная информация
Trace Вывод трассировочной информации
EnableViewState Сохранение состояния страницы. По умолчанию она сохраняется
EnableTheming Позволяет включить или выключить поддержку тем оформления. По умолчанию включено
Inherits Класс, от которого наследуется класс данной страницы в технологии отделенного кода
IsAsync Показывает, обрабатывается ли страница асинхронно.
Language Язык, используемый во внедренном коде
WarningLevel Наибольший допустимый уровень предупреждений компилятора
CompilerOptions Опции компилятора

Кроме директивы @ Page, в текст можно включить другие директивы, которые содержат дополнительные параметры, специфичные для страницы.

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

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

Возьмем за основу такую статическую страницу:

Добавить простой серверный сценарий в ASP.NET

Мне нужно простое серверное решение для сценариев для решения следующей проблемы: Мой клиент заставляет меня делать сайт в ASP.NET MVC. Я пишу весь сайт, но есть раздел, который они хотят расширить позже с помощью простых сценариев. Например:

Когда у вас день рождения?
__ / __ / ____ [x] Не показывать год

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

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

Способы организации активных web-серверов

ISAPI

Если Web- сервер создан на базе Microsoft Internet Information Server , вместо программ CGI можно использовать приложения ISAPI , реализованные в виде библиотек динамической загрузки DLL , что позволяет повысить производительность и масштабируемость . Приложения ISAPI условно делятся на расширения ISAPI и фильтры ISAPI .

Расширения ISAPI

Расширения ISAPI выполняют те же функции, что и программы CGI : обычно они применяются для обработки клиентских запросов и возвращения ответа в формате HTML.

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

Для повышения производительности в некоторых Web-серверах (в частности, Microsoft Internet Information Server) используется другой способ создания расширений. Расширение создается как библиотека динамической загрузки DLL с использованием программного интерфейса ISAPI ( Internet Server API).

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

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

ISAPI -расширения явно указываются в URL-адресе, отправляемом на IIS-сервер: Например: http://localhost/sayhelloisapi/sayhelloisapi.dll

ISAPI -расширение можно вызывать с параметрами, которые позволят одному компоненту выполнять разные задачи.

Сервер IIS версии 4.0 и старше позволяет загружать программы ISAPI в отдельное адресное пространство . Эта возможность, замедляющая работу сервера, обычно используется для отладки новых программ. Аварийное завершение программы ISAPI , загруженной в отдельное адресное пространство не приводит к полной остановке Web-сервера.

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

Однако приложения ISAPI приходится отлаживать намного тщательнее, чем программы CGI . Так как приложение ISAPI работает в адресном пространстве Web-сервера, ошибка в приложении ISAPI способна вызвать аварийное завершение работы Web-сервера.

Фильтры ISAPI

Фильтры ISAPI , так же как и расширения ISAPI , реализованы в виде библиотек динамической загрузки DLL и способны контролировать весь поток данных между браузером и Web-сервером на уровне протокола HTTP.

ISAPI -фильтры никогда не вызываются явно — IIS-сервер обращается к ним в ответ на определенные события в процессе выполнения запроса:

  1. на завершение обработки сервером предоставленных клиентом заголовков;

  2. на завершение сервером процедуры аутентификации клиента;
  3. на сопоставление сервером логического URL-адреса физическому;
  4. до начала пересылки «сырых» данных от клиента на сервер;
  5. на завершение пересылки «сырых» данных от клиента, но до начала их обработки на сервере;
  6. на регистрацию информации сервером в журнале;
  7. на завершение сеанса.

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

ISAPI -расширения часто создаются с использованием ISAPI -классов библиотеки MFC (Microsoft Foundation Class Library ). Это значительно упрощает разработку ISAPI -расширений.

Активные страницы ASP

Active Server Pages ( ASP ) — это серверная среда для разработки и выполнения динамических интерактивных веб-приложений .

Технология ASP предполагает интенсивное использование серверных сценариев и объектов СОМ для создания активных Web-серверов.

Языки программирования, используются для создания больших и сложных программных комплексов. Языки написания сценариев используются для создания программ ограниченных возможностей, называемых сценариями, которые выполняют функции web-узла на web-сервере или в браузере. В отличие от сложных языков программирования, языки написания сценариев интерпретируются: инструкции последовательно выполняются промежуточной программой, называемой интерпретатором команд . Хотя интерпретация уменьшает эффективность выполнения, языки написания сценариев просты для изучения и обеспечивают большие возможности. Сценарии могут быть встроены в HTML -страницы для форматирования содержимого или могут реализовывать компоненты COM , заключающие в себе бизнес-логику.

Файл Active Server Pages ( ASP ) представляет собой текстовый файл с расширением «. asp «. Этот файл может содержать текстовые данные, тэги языка HTML и серверные сценарии.

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

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

В ASP отсутствует ориентация на конкретный язык программирования , поэтому знакомства с любым языком сценариев ( VBScript , JScript или PERL) будет достаточно для того, чтобы работать с Active Server Pages. Более того, на страницах ASP допускается использование любого языка сценариев, для которого был установлен COM -совместимый обработчик сценариев. Обработчик сценариев — это программа , которая обрабатывает команды, записанные на определенном языке. В состав ASP входят обработчики сценариев VBScript и JScript , но имеется дополнительная возможность установки обработчиков для языков PERL, REXX и Python , которые могут быть получены от независимых разработчиков. Обработчик сценариев представляет собой расширение ISAPI , которое физически является динамически подключаемой библиотекой ASP.DLL . ASP.DLL просматривает файлы .asp на предмет наличия тэгов, обозначающих внедренный код для выполнения на сервере. ASP.DLL передает код сценария в Windows Script Host (WSH). WSH выполняет этот код и возвращает ответ файлу ASP.DLL , который, в свою очередь , передает IIS результат выполнения сценария и содержимое самого файла ASP . IIS возвращает ответ программному обеспечению, от которого поступил запрос .

Средствами технологии ASP можно создавать интерактивные Web-страницы, не используя расширения CGI или ISAPI , что позволяет в ряде случаев полностью избежать или максимально сократить программирование на C++ или Perl. Активные страницы ASP выполняют обработку данных, введенных пользователями при помощи форм, обращаясь при необходимости к базам данных или другим активным объектам .

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

ASP поддерживает технологию работы со сценариями Windows Script Components. Она позволяет поместить все сценарные процедуры, выполняющие бизнес-логику, в COM -компоненты. Эти компоненты допускают повторное использование, и могут работать как в web-приложениях, так и в других программах, построенных по технологии COM .

ASP поддерживает новую служебную программу шифрования сценариев, поставляемую с MicrosoftVisual Basic Scripting Edition ( VBScript ) и Microsoft® JScript 5.0. Имеется возможность шифровать как клиентские, так и серверные сценарии, в результате чего тексты сценариев будут отображаться бессмысленной последовательностью ASCII-символов. Зашифрованные сценарии расшифровываются обработчиком сценариев во время их выполнения, поэтому нет необходимости в использовании отдельной программы расшифровки. Несмотря на то, что это не является полностью безопасным решением, технология не позволяет большинству обычных пользователей скопировать или просмотреть сценарий .

Серверный сценарий , встроенный в страницу ASP , способен обращаться к базам данных через вызов методов интерфейса ActiveX Data Objects ( ADO ) — простую и понятную процедуру. Если возникнет необходимость реализовать собственную бизнес-логику, имеется возможность создания новых объектов СОМ или использования объектов СОМ сторонних разработчиков.

Asp простые сценарии

В этом разделе приводятся пошаговые руководства, вводящие в концепцию веб-разработки в ASP.NET. Эти пошаговые руководства также описывают возможности веб-разработки в Visual Studio 2010 and Visual Web Developer 2010, экспресс-выпуск (обозначаются термином Visual Studio).

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

В этом разделе содержатся следующие подразделы.

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

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

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

Показывает использование редактора кода. Некоторые из функций редактора кода зависят от используемого языка программирования. Таким образом, в данном пошаговом руководстве создаются две страницы, одна с помощью Visual Basic, а другая с помощью C#.

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

Показывает процесс добавления разметки на страницу с помощью фрагментов кода. Можно использовать фрагменты кода HTML в Visual Studio для экономии времени и сокращения объема вводимого кода.

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

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

Показывает кэширование данных приложения в приложении ASP.NET. Использует API кэширования, доступный в пространстве имен System.Runtime.Caching .

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

Структура MVC ASP.NET предоставляет расширенную поддержку модульного тестирования и разработки на основе тестирования.

Показывает использование отладчика Visual Studio для работы с веб-страницами ASP.NET.

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

В следующей таблице приведены пошаговые руководства, показывающие создание навигации в веб-сайте в форме меню, карт веб-сайта и т.п.

Показывает процедуру добавления на страницу элемента управления «меню» и использования его как средства навигации.

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

Показывает процесс разработки URL-адресов, которые содержат важные сведения для пользователей и способствуют оптимизации поисковой подсистемы (SEO).

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

Описывает основные возможности Visual Studio для работы с таблицами каскадных стилей (CSS). В этом пошаговом руководстве проходится путь создания макета страницы с тремя столбцами, сопровождаемый описанием основных методов создания новой веб-страницы и новой таблицы стилей.

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

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

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

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

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

Показывает использование элементов управления Image , элементов управления Menu и функции ASP.NET AutoPostBack в целях соответствия стандартам специальных возможностей.

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

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

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

Показывает использование элементов управления Label , элементов управления проверки и элементов управления Panel (элементов div ) в форме ввода в целях соответствия стандартам специальных возможностей.

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

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

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

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

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

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

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

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

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

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

Показывает способы отображения и обновления данных в элементе управления ListView . В данном пошаговом руководстве элемент управления SqlDataSource используется для извлечения результатов из базы данных SQL Server и для управления обновлениями.

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

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

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

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

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

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

Архитектурный шаблон «модель-представление-контроллер» (MVC) разделяет приложение на три основных компонента: модель (данные), представление (пользовательский интерфейс) и контроллер (бизнес-логика и доменная логика). Структура ASP.NET MVC является облегченной структурой представления с широкими возможностями тестирования, интегрированной с функциями ASP.NET, например с главными страницами и проверкой подлинности на основе членства.

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

Показывает использование заметок данных для проверки данных.

Показывает порядок добавления обработки, выполняемой на стороне клиента, в представления приложения MVC.

Показывает создание проекта MVC с несколькими областями.

Показывает использование методов асинхронного контроллера.

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


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

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

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

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

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

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

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

Показывает способы реализации наследования по принципу «одна таблица на иерархию» путем изменения концептуальной модели в модели EDM.

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

В следующих пошаговых руководствах рассматривается усовершенствование серверных приложений веб-форм ASP.NET с помощью технологии Ajax.

Показывает использование некоторых функций технологии Microsoft Ajax, которые включаются при установке Visual Studio.

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

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

Показывает процесс включения файла JavaScript в сборку в качестве внедренного ресурса.

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

Показывает способ включения локализованных ресурсов в файл ECMAScript (JavaScript).

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

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

Примечание

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

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

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

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

Показывает использование команды Windows XCOPY для копирования файлов из проекта веб-сайта на веб-сайт. (Не применяется к проектам веб-приложений.)

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

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

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

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

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

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

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

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

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

Показывает основные функциональные возможности пользовательского HTTP-модуля. HTTP-модуль вызывается при каждом запросе и позволяет настроить обработку запроса.

ASP. Основы. Объекты и компоненты. Доступ к базам данных

Dynamic HTML представляет собой основное средство программирования клиента для Microsoft Internet Explorer 4.0 и выше, но такие программы просмотра Web, как Netscape Navigator, не поддерживают Dynamic HTML. На самом деле очень малая часть функциональности клиентской части, поддерживаемой различными программами просмотра, может рассматриваться как действительно кросс-платформенная.

Если Вы хотите разработать Интернет-узел, открытый для доступа самым различным программам просмотра, то должны перенести программирование с клиента на сервер. Такую возможность предоставляют Microsoft ASP (Active Server Pages — активные серверные страницы). По сути ASP не что иное, как сценарий на VBScript, который исполняется на сервере. Когда запрашивается страница, этот сценарий порождает HTML-текст. Это ключевая особенность ASP — клиент никогда не видит вашего кода, а только результирующий HTML, который воспринимает любая программа просмотра.

Листинг 4.1 демонстрирует простую ASP-страницу, которая создает приветствие в соответствии со временем суток. В нем текущий час определяется при помощи кода Hour(Now), где Now — функция VBScript, возвращающая текущий момент времени и дату. Если текущий час меньше 12, то приветствие задается в форме «Доброе утро!» От полудня до шести вечера сообщение имеет вид «Добрый день!», а после шести — «Добрый вечер!»

Листинг 4.1.Простой пример ASP.

Simple ASP Example

11 And Hour(Now) 17 Then

strGreeting = «Добрый вечер!»

Обратите внимание на код в листинге, окруженный специальными символами: угловыми скобками и знаками процента ( ). Такие символы означают, что это серверный код, который выполняется перед тем, как страница будет на самом деле послана программе просмотра. Если бы Вы посмотрели в Internet Explorer на результирующий HTML-текст, то увидели бы следующее (в предположении, что сейчас еще не вечер, но уже не утро):

Simple ASP Example

В этом-то и состоит суть ASP. Результат исполнения кода — обыкновенный HTML! Эту страницу можно просматривать любой программой просмотра: не только Internet Explorer, но и, например, Netscape Navigator. Иными словами, ASP предоставляет разработчику подлинную платформенную независимость

У представленного кода есть еще несколько особенностей. Обратите внимание на самую верхнюю строчку — она определяет, на каком языке написан сценарий на данной странице:

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

А теперь обратите внимание на ту строку, где и происходит генерация HTML-текста. Здесь для вывода приветствия используется переменная:

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

Объекты и компоненты.На самом простом уровне создание ASP-страницы — это ни что иное, как написание серверного кода для получения ожидаемого результата. Но VBScript не является полнофункциональным языком и, как только Вы приступаете к построению более сложных страниц, его выразительных средств начинает не хватать. Так, в VBScript нет встроенных функций доступа к данным; не умеет он и открывать текстовые файлы. Собственно говоря, в VBScript отсутствуют какие-либо встроенные средства доступа к каким бы то ни было внешним источникам данных. Так как же в таком случае при помощи ASP выполняются такие сложные действия, как доступ к данным? Ответ будет таким: нужно дополнить VBScript объектами и компонентами ASP.

ASP-объекты и компоненты — это не что иное, как компоненты ActiveX, подобные обычным DLL ActiveX, с которыми Вы наверняка работали в Microsoft Visual Basic. Различие между объектами и компонентами ASP состоит в том, каким образом они появляются в программе. ASP-объекты — это элементы управления ActiveX, которые в коде на VBScript доступны всегда: их не нужно создавать явно. В число объектов ASP входят Application, Session, Request, Response и Server. А вот ASP-компоненты представляют собой DLL, существующие вне структуры ASP. Эти компоненты могут быть написаны на любом языке, а некоторые по­лезные ASP-компоненты просто поставляются в комплекте с Visual InterDev. ASP-компо­ненты нужно явно создавать в коде. ASP поддерживает компоненты Database Access, File Access, Browser Capabilities, Ad Rotator и Content Linking.

Файл GLOBAL.ASA.Одна из главных трудностей разработчика для Интернета, независимо от того, какую технологию он использует, состоит в том, как сложно создать в Интернете настоящее приложение. Взаимодействие программы просмотра и Web-сервера представляет собой по сути лишенную состояния транзакцию, в ходе которой сервер посылает клиенту Web-страницу и затем забывает о его существовании. Когда клиент запрашивает другую Web-страницу, сервер ничего не помнит о предыдущем запросе. Коренная проблема для всех Web-приложений такова: как показать, что это именно приложение?

Определить приложение в среде Microsoft Windows довольно просто. Приложение запуска­ется двойным щелчком значка и завершается, когда в меню File выбран пункт Exit. В проме­жутке между двумя этими событиями данные хранятся в переменных. Но для Интернет-при­ложений это не так. Как определить, когда приложение начинается, а когда заканчивается? Можно сказать, что приложение начало работу, если пользователь зашел на узел и просмат­ривает одну из его страниц. Но что если он переходит к другому узлу, а через пять минут возвращается? Приложение все еще активно? А если пользователь отсутствовал час или два?

Проблема определения моментов запуска и завершения приложения оказывает серьезное влияние на правильное управление переменными и последовательностью выполнения. К счастью, ASP предлагает решение. Оно состоит в том, что для определения начала и завер­шения — как всего приложения, так и отдельных пользовательских сессий — используется специальный файл под названием GLOBAL.ASA. На этот файл возложено реагирование на четыре ключевых события узла: Application_OnStart (запуск приложения), Application_OnEnd (завершение приложения), Session_OnStart (начало сессии) и Session_OnEnd (завершение сессии). В листинге 4.2 приведен типичный файл GLOBAL.ASA.

Листинг 4.2.Файл GLOBAL.ASA.

Для обозначения разделов сценария GLOBAL.ASA содержит теги

Хотя GLOBAL.ASA отмечает начало и завершение приложения при помощи событий, оста­ется неясным, что же все-таки составляет собственно приложение. Одна из рабочих форму­лировок, предложенная Microsoft, определяет Интернет-приложение как виртуальный ката­лог со всеми его файлами. Если пользователь запрашивает Web-страницу из виртуального каталога под названием Bookstore, то тем самым он запускает приложение Bookstore, и в GLOBAL.ASA возбуждаются события Application_OnStart и Session_OnStart.

Согласно этому определению с приложением одновременно могут работать несколько про­грамм просмотра. Но событие Application_OnStart происходит только один раз: когда первый пользователь запрашивает Web-страницу из виртуального каталога. Когда затем страницы из этого ката­лога запрашивают другие пользователи, возбуждается только событие Session_OnStart.

В то время как приложение может относиться к нескольким программам просмотра, обра­щающимся к одному и тому же множеству Web-страниц, сессия касается какой-то одной программы просмотра, обращающейся к тем же Web-страницам. Для конкретной программы просмотра сессия длится, пока программа продолжает запрашивать страницы виртуального каталога. Если же пользователь не запрашивает Web-страницы (из данного виртуального каталога) на протяжении 20 минут (по умолчанию), сессия завершается, и возбуждается событие Session_OnEnd. Когда в данном виртуальном каталоге завершаются все сессии, возбуждается событие Application_OnEnd.

В качестве примера рассмотрим следующий сценарий. Два пользователя намереваются посе­тить на Web-узле приложение Magazine. Пользователь 1 оказывается проворнее и быст­ренько запрашивает Web-страницу DEFAULT.ASP. Тут же возбуждаются события Application_OnStart и Session_OnStart. Буквально пятью минутами позже к приложению обращается пользователь 2. Поскольку пользователь 1 как-то проявлял себя в течение последних 20 минут, приложение Magazine активно. Следовательно, возбуждается только событие Session_OnStart, сигнализируя о начале новой сессии. Кроме того, теперь для завершения приложения необходимо, чтобы завершились обе сессии.

В течение следующих 15 минут пользователь 1 не запрашивает ни­каких страниц приложе­ния Magazine. Поскольку он не проявлял активности на протяжении 20 минут, ASP приходит к выводу, что пользователь 1 закончил свою работу с приложением, и возбуждает событие Session_OnEnd. Но приложение все еще активно, поскольку в течение последних 20 минут к нему обращался пользователь 2.

Пользователь 2 работает с приложением еще час, то и дело запрашивая новые Web-страницы. Но в конце концов он отключается, а через 20 минут после того, как он покинул узел (точнее, в последний раз запросил Web-страницу приложения), возбуждается событие Session_OnEnd. Поскольку пользователь 2 был последним пользователем данного приложения, оно завершается, и возбуждается событие Application_OnEnd.

В ASP есть несколько встроенных объектов, которые доступны разработчику. Эти объекты помогают управлять многими вещами: от переменных, до передачи форм. Работать с ними легко, они вызываются из кода напрямую без какого-то особого синтаксиса.

Объект Application.Объект Application (приложение) позволяет создавать переменные приложения (application variables) — переменные, доступные всем пользователям данного приложения. Все, кто обращается к Web-страницам данного виртуального каталога, могут совместно использовать любую переменную приложения определенную для этого каталога.

В листинге 4.3 приведен пример программы, которая использует Объект Application. В нем переменная приложения служит для отслеживания времени последнего обращения к страницам приложения.

Листинг 4.3.Объект Application.

Эта страница последний раз посещалась:

Создание переменной приложения сводится к адресации объекта Application именем новой переменной, которую вы хотите создать. Например, следующий код создает новую переменную приложения с именем Company и присваивает ей значение NewTech.

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

Поскольку такие переменные доступны нескольким пользователям одновременно, вы не сможете гарантировать, что два пользователя не попытаются одновременно присвоить одной и той же переменной разные значения. Для разрешения подобных коллизий объект Application поддерживает методы Lock и UnLock. Метод Lock блокирует весь объект Application, а не только переменную, вы хотите изменить, поэтому сразу же после изменения значения переменной разблокируйте объект:

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

Объект Session.Зачастую разработчиков меньше интересуют данные, совместно используемые несколькими пользователями, зато гораздо больше — данные, связанные с конкретным пользователем. ASP поддерживает переменные для индивидуального пользователя при помощи объекта Session (сессия), который позволяет создавать переменные сессии (session variables).

Листинг 4.4 демонстрирует, как определить несколько переменных сессии в файле GLOBAL.ASA. Само по себе их определение так же просто, как и в случае переменных приложения. Все, что нужно сделать — это адресовать объект Session именем переменной, которую вы хотите создать. Основное различие между переменными этих объектов — их области видимости. Переменные сессии предназначаются для одного пользователя и живут, пока пользователь поддерживает сессию. Как только в течение 20 минут (по умолчанию) пользователь не обращается к страницам данного виртуального каталога, данные пропадают.

Листинг 4-..Создание переменных сессии.

Переменные сессии можно создавать на любой Web-странице или в файле GLOBAL.ASA, а доступны они на любой Web-странице приложения, в котором эти переменные были первоначально созданы. Получить значения переменных сессии можно, считывая их из объекта Session. Следующий фрагмент кода считывает переменные сессии, созданные в листинге 4.4, и выводит их в полях ввода:

Ранее мы определили Интернет-приложение как лишенные статуса транзакции между Web-сервером и программой просмотра. Как же тогда ASP запоминает переменные сессии для каждого пользователя приложения? Ответ будет таким: эти переменные сохраняются на сервере для каждого клиента. Программа просмотра получает от сервера уникальный идентификатор, позволяющий определить, какой набор переменных кому принадлежит. Клиент этот идентификатор (Globally Unique Identifier, GUID) сохраняет, а впоследствии посылает серверу и получает именно ему предназначенные данные. Таким образом каждый клиент может иметь свой набор данных в каждом Интернет-приложении.

Осталось сказать, что для установки или считывания впемени жизни сессии (в минутах) применяется свойство Timeout объекта Session:

Объект Request.Для передачи данные клиенту создается Web-страница, а для передачи данных в обратном направлении программа просмотра использует отправку формы (form submission). В форме содержатся текстовые поля, переключатели и т.п. Клиент размещает введенные данные в этих полях и пересылает пакет серверу. Процессом передачи формы управляют два атрибута тега

Элемент формы с типом SUBMIT — это кнопка, нажатие которой пользователем заставляет программу просмотра упаковать данные формы и отправить их. Формат пересылки данных определен строго и сервер знает, чего ожидать от клиента. Данные имеют вид пар Поле=Значение, отсылаемых серверу в формате открытого текста. Если в предыдущем примере ввести в поле Name NewTech и info@newtech.com в поле Email, то сценарию DATA.ASP будет послан следующий текст:

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

Request.Form применяется, когда данные были отправлены методом POST и именно этому сценарию. Если для отправки данных используется метод GET или сценарий вызывается с передачей параметров прямо в гиперссылке


то для разбота данных применяют свойство Request.QueryString, который работает так же, как Request.Form. Следующий фрагмент кода вернет значение поля Name из гиперссылки:

Другое свойство — Request.Cookies используются для извлечения информации из кукисов (cookies), отосланных вместе с запросом строке пользовательского агента программы просмотра. А листинг 4.5 демонстрирует применение свойства ServerVariables для определения имени компьютера, с которого клиент вызвал сценарий.

Листинг 4.5.Определение компьютера пользователя.

Вы вошли с компьютера

Переменные сервера представляют широкий круг информации о клиенте и Web-сервере. Доступ к каждой конкретной переменной сводится к чтению соответствующей переменной.

Объект Response.Этот объект управляет содержимым страницы, которую ASP возвращает программе просмотра. Фактически в комбинации знак равенства представляет собой сокращенное обозначение метода Write объекта Response. Так что следующие две строки кода эквивалентны:

Поскольку объект Response используется очень часто, такое сокращение оправдано.

Полезное свойство объекта Response — Expires. Оно задает время (в минутах) за которое страница устаревает. Если установить его в нуль, то страница будет устаревать в момент загрузки и Internet Explorer не будет ее кэшировать. Кэширование сильно влияет на разработку и может привести к тому, что приложение будет функционировать неправильно. IE кэширует страницы двумя способами: на диске и в памяти. Рассмотрим такой фрагмент кода, показывающий текущее время и дату:

Когда IE запрашивают страницу с этим кодом, на сервере выполняется сценарий, и на странице появляется текущее время. Однако, если программа просмотра переходит к другой странице, а затем возвращается к этой, со временем, то время не изменится, поскольку IE не запрашивает ее повторно. В листинге 4.6 приведена исправленная версия примера, устаревающая уже в момент загрузки.

Листинг 4.6.Страница, устаревающая уже в момент загрузки.

Forcing a Page to Expire

Еще один полезный метод объекта Response — Redirect, перенаправляющий программу просмотра на указанный URL:

Объект Server.Объект Server (сервер) представляет собой в некотором роде свалку — в том смысле, что предоставляемые им функции никак не связаны между собой, за тем исключением, что все они полезны разработчику для Интернета. Пожалуй, самая важная из всех функций объекта Server — это метод CreateObject, который создает экземпляр компонента ActiveX. Причем это может быть как встроенный компонент, входящий в комплект поставки, так и тот, который написали Вы сами на любом языке. В любом случае использование компонента ActiveX на сервере требует вызова метода CreateObject.

Аргументом метода CreateObject служит ProgID (программный идентификатор) требуемого компонента ActiveX. ProgID — это содержательное имя компонента, такое как Excel.Sheet или Word.Basic. Следующая строчка показывает, как при помощи CreateObject создать экземпляр компонента с ProgID Excel.Sheet.

Set MyObject = Server.CreateObject(«Excel.Sheet»)

Другим полезным методом объекта Server является MapPath, возвращающий фактический путь, соответствующий заданному виртуальному каталогу.

Компоненты ASP — это на самом деле просто компоненты ActiveX, наподобие тех, что Вы можете сами создать на Visual Basic или Visual C++. Но эти компоненты написаны Microsoft и поставляются вместе с Visual InterDev. Они предназначены для выполнения полезных для Web-узлов задач общего характера, включая доступ к данным. Создать их на своей странице Вы можете при помощи метода CreateObject объекта Server, а как только они созданы, смело обращайтесь к их свойствам и методам для выполнения нужных Вам задач.

Компонент ActiveX Data Objects.Самым полезным изо всех компонентов ASP следует признать компонент доступа к базам данных, называемый также ActiveX Data Objects, или сокращенно ADO. Он и содержащиеся в нем объекты применяются для чтения и записи данных в источники данных ODBC при публикации в Web информации из баз данных.

Объект Connection (подсоединение) создается методом CreateObject объекта Server, и ссылка на него помещается в переменную. Когда объект создан, его можно использовать для открытия подсоединения к любому источнику данных ODBC. Следующий фрагмент кода устанавливает подсоединение к источнику данных ODBC с названием Publications:

‘ Создаем объект Connection

Set objConnection = Server.CreateObject(«ADODB.Connection»)

‘ Открываем подсоединение к источнику данных

objConnection.Open «Publications», «sa», «» %>

Здесь objConnection — переменная для объектной ссылки на экземпляр объекта Connection. Метод Open устанавливает подсоединение, принимая в качестве аргументов имя источника данных, идентификатор пользователя и пароль.

Когда подсоединение установлено, получать информацию из источника данных можно при помощи объекта Recordset (набор записей). Этот объект умеет выполнять оператор SELECT языка SQL и возвращать набор записей, удовлетворяющих этому запросу. Как и объект Connection, Recordset создается методом CreateObject. В следующем примере программа выполняет оператор SELECT над источником данных, представленным переменной objConnection:

После того, как записи получены, для передвижения по ним можно обращаться к методам MoveFirst, MoveLast, MoveNext и MovePrevious. Затем метод Write объекта Response помещает данные на Web-страницу, которая и посылается программе просмотра. В листинге 4.7 приведен полный пример ASP-страницы, которая строит список пользователей, со­держащихся в источнике данных Data.

Листинг 4.7.Построение списка при помощи ADO.

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

Выход состоит в разбиении на страницы (paging). Этот механизм реализован во всех поисковых системах для передачи за один раз некоей порции результатов запроса, скажем, из 10 записей. Теперь пользователь может эффективно работать с полученной информацией. Поддерживает разбиение на страницы и ADO — посредством нескольких свойств объекта Recordset: PageSize, PageCount и AbsolutePage.

При получении набора данных можно указать, что записи следует разбить на страницы. Количество строк набора данных, составляющих страницу, задается значением свойства PageSize. Затем можно определить общее количество страниц в наборе данных посредством свойства PageCount. А доступ к заданной странице обеспечивает свойство AbsolutePage.

В листинге 4.8 приведен полный пример, в котором пользователь может просматривать 10 записей за раз. Переменная сессии CurrentPage отслеживает текущую страницу. Пользователь может перейти к предыдущей порции данных или к следующему набору из 10 записей, выбрав одну из двух гипертекстовых ссылок на странице.

Листинг 4.8.Разбиение набора данных на страницы средствами ADO.

Классический ASP — Простой сценарий

Я пытаюсь написать очень простой скрипт для функции поиска на сайте, используя классический ASP. Следующее:

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

1 ответ

Вы упускаете важный rs.movenext

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

Простое приложение ASP.NET MVC 5

ASP.NET — ASP.NET MVC 5 — Простое приложение ASP.NET MVC 5

В этой статье будут исследованы другие базовые функциональные средства MVC на примере построения простого приложения для ввода данных. Цель заключается в демонстрации инфраструктуры MVC в действии, поэтому некоторые из объяснений относительно того, что происходит «за кулисами», будут пропущены. Однако не беспокойтесь — мы вернемся к подробному обсуждению этих тем позже. А теперь продолжим работать над проектом, который мы создали в предыдущей статье.

Предварительная настройка

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

домашняя страница, отображающая информацию о вечеринке;

форма, которая может использоваться для ответа на приглашение (repondez s’il vous plait — RSVP);

проверка достоверности для формы RSVP, которая будет отображать страницу с выражением благодарности за внимание;

средство отправки форм RSVP по электронной почте организатору вечеринки.

В последующих разделах мы достроим проект MVC, который был создан в предыдущей статье, и добавим в него перечисленные выше средства. Первый пункт можно убрать из списка, применив то, что было показано ранее — в существующее представление можно добавить HTML-разметку с подробной информацией о вечеринке. В примере ниже приведено содержимое файла Views/Home/Index.cshtml с внесенными дополнениями.

Мы двигаемся в верном направлении. Если запустить приложение, отобразятся подробности о вечеринке — точнее, заполнитель для подробностей, но идея должна быть понятна.

Проектирование модели данных

В аббревиатуре MVC буква «M» обозначает model (модель), и она является наиболее важной частью приложения. — это представление реальных объектов, процессов и правил, которые определяют сферу приложения, известную как предметная область.

Модель, которую часто называют моделью предметной области, содержит объекты C# (или объекты предметной области), которые образуют «вселенную» приложения, и методы, позволяющие манипулировать ими. Представления и контроллеры открывают предметную область клиентам в согласованной манере, и любое корректно разработанное приложение MVC начинается с хорошо спроектированной модели, которая затем служит центральным узлом при добавлении контроллеров и представлений.

Для приложения Party Invites сложная модель не требуется, поскольку оно совсем простое, и нужно создать только один класс предметной области, который будет назван GuestResponse. Этот объект будет отвечать за хранение, проверку достоверности и подтверждение ответа на приглашение (RSVP).

Добавление класса модели

По соглашению MVC классы, которые образуют модель, помещаются в папку Models, которую Visual Studio создает во время начальной настройки проекта. Щелкните правой кнопкой мыши на папке Models в окне Solution Explorer и выберите в контекстном меню пункт Add, а затем пункт Class (Класс). В качестве имени файла укажите GuestResponse.cs и щелкните на кнопке Add, чтобы создать класс.

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

Отредактируйте код класса, чтобы он соответствовал примеру ниже:

Вы могли заметить, что свойство WillAttend имеет тип bool, допускающий null, т.е. оно может принимать значение true, false или null. Объяснение этого будет приведено в разделе «Добавление проверки достоверности» далее.

Связывание с методами действий

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

Html.ActionLink() — это вспомогательный метод HTML. В MVC Framework доступен набор встроенных вспомогательных методов, которые удобны при визуализации ссылок, полей ввода текста, флажков, списков выбора и другого вида HTML-содержимого. Метод ActionLink принимает два параметра: первым является текст (анкор ссылки), который должен отображаться в ссылке, а вторым — действие, которое должно выполняться, когда пользователь щелкает на ссылке.

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

Если навести курсор мыши поверх ссылки в браузере, станет видно, что ссылка указывает на http://ваш-сервер/Home/RsvpForm. Метод Html.ActionLink() исследовал конфигурацию маршрутизации URL приложения и определил, что /Home/RsvpForm представляет собой URL действия по имени RsvpForm в контроллере HomeController.

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

Создание метода действия

Щелчок на ссылке приводит к выдаче ошибки 404 Not Found (не найдено). Она объясняется тем, что пока еще не создан метод действия, соответствующий URL вида /Home/RsvpForm. Это делается добавлением метода RsvpForm в класс HomeController, как показано в примере ниже:

Добавление строго типизированного представления

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

Прежде чем продолжать, удостоверьтесь, что проект MVC скомпилирован. Если код класса GuestResponse был написан, но не скомпилирован, инфраструктура MVC не сможет создать строго типизированное представление для этого типа. Чтобы скомпилировать приложение, выберите пункт Build Solution в меню Build среды Visual Studio.

Щелкните правой кнопкой мыши внутри метода RsvpForm в редакторе кода и выберите в контекстном меню пункт Add View (Добавить представление), чтобы открыть диалоговое окно Add View. Удостоверьтесь, что в поле View Name (Имя представления) указано имя RsvpForm, выберите в списке Template (Шаблон) вариант Empty (Пустой), а в списке Model Class (Класс модели) — вариант GuestResponse. Оставьте все флажки в разделе View Options (Параметры представления) неотмеченными:

Щелкните на кнопке Add, среда Visual Studio создаст новый файл по имени RvspForm.cshtml в папке Views/Home и откроет его для редактирования. В примере ниже приведено первоначальное содержимое этого файла. Это еще один скелетный HTML-файл, но в нем присутствует Razor-выражение @model. Как вы вскоре убедитесь, этот файл служит ключом к созданию строго типизированного представления и к получению предлагаемых им удобств.

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

Построение формы

Теперь, когда строго типизированное представление создано, можно дополнить содержимое файла RsvpForm.cshtml, чтобы превратить его в HTML-форму для редактирования объектов GuestResponse, как показано в примере ниже:

Для каждого свойства класса модели GuestResponse мы используем вспомогательный метод HTML, чтобы визуализировать подходящий элемент управления HTML типа input. Эти методы позволяют с помощью лямбда-выражения выбрать свойство, с которым связан элемент input, как показано в следующей строке:

Вспомогательный метод HTML по имени TextBoxFor генерирует HTML-разметку для элемента input, устанавливает параметр type в text, а атрибуты id и name — в Email (имя выбранного свойства класса предметной области):

Это удобное средство работает, потому что представление RsvpForm является строго типизированным, а инфраструктуре MVC было указано, что GuestResponse — тип, который нужно визуализировать с помощью этого представления. Это снабжает вспомогательные методы HTML информацией, которая им необходима для выяснения того, из какого типа данных должны быть прочитаны свойства через выражение @model.

Альтернативой применению лямбда-выражений является ссылка на имя свойства типа модели как на строку:

Подход с использованием лямбда-выражения предотвращает неправильный ввод имени свойства типа модели, т.к. среда Visual Studio активизирует средство IntelliSense, позволяя выбрать свойство автоматически:

Еще одним удобным вспомогательным методом является Html.BeginForm(), который генерирует HTML-элемент form, сконфигурированный на выполнение обратной отправки методу действия. Поскольку никакие аргументы вспомогательному методу не передаются, он предполагает, что требуется выполнить обратную отправку по тому же самому URL, из которого запрашивался HTML-документ. Изящный трюк заключается в том, чтобы поместить этот метод внутрь C#-оператора using, как показано ниже:


Обычно при таком применении оператор using гарантирует освобождение объекта, когда он покидает область действия. Такое использование распространено, например, для подключений к базам данных, чтобы гарантировать их закрытие немедленно по завершении запроса. (Это применение ключевого слова using отличается от той его разновидности, которая включает классы из пространства имен в область действия какого-то класса.)

Вместо освобождения объекта вспомогательный метод Html.BeginForm закрывает HTML-элемент form, когда тот покидает область действия. Это означает, что вспомогательный метод Html.BeginForm создает обе части элемента формы:

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

Установка начального URL-адреса

Стремясь быть полезной, среда Visual Studio будет выполнять запрос в браузере URL-адреса, основываясь на представлении, которое редактируется в текущий момент. Это ненадежная возможность, поскольку она не работает при редактировании файлов других видов, к тому же в сложных веб-приложениях нельзя просто переходить в произвольные точки.

Чтобы установить фиксированный URL-адрес для запроса в браузере, выберите в меню Project (Проект) среды Visual Studio пункт PartyInvites Properties (Свойства PartyInvites), перейдите в раздел Web и отметьте переключатель Specific Page (Определенная страница) в категории Start Action (Начальное действие), как показано на рисунке ниже:

Вводить значение в поле рядом с переключателем вовсе не обязательно — Visual Studio будет запрашивать стандартный URL-адрес для проекта, который указывает на метод действия Index контроллера Home.

Форму в представлении RsvpForm можно увидеть, запустив приложение и щелкнув на ссылке «Форма RSVP». Результат показан на рисунке ниже:

Обработка форм

Инфраструктуре MVC пока еще не указано, что должно быть сделано, когда форма отправляется серверу. В нынешнем состоянии приложения щелчок на кнопке «Отправить форму RSVP» лишь очищает любые значения, введенные в форму. Причина в том, что форма осуществляет обратную отправку методу действия RsvpForm из контроллера Home, который только сообщает MVC о необходимости повторной визуализации представления.

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

Чтобы получить и обработать данные отправленной формы, мы собираемся воспользоваться одной интересной возможностью. Мы добавим второй метод действия RsvpForm, чтобы обеспечить перечисленные ниже аспекты.

Метод, который отвечает на HTTP-запросы GET. Каждый раз, когда кто-то щелкает на ссылке, браузер обычно выдает именно запрос GET. Эта версия действия будет отвечать за отображение изначально пустой формы, когда кто-нибудь впервые посещает /Home/RsvpForm.

Метод, который отвечает на HTTP-запросы POST. По умолчанию формы, визуализированные с помощью Html.BeginForm, отправляются браузером в виде запросов POST. Эта версия действия будет отвечать за получение отправленных данных и принятие решения о том, что с ними делать.

Обработка запросов GET и POST в отдельных методах C# способствует обеспечению аккуратности кода контроллера, т.к. ответственность у этих двух методов разная. Оба метода действий вызываются через один и тот же URL, но MVC вызывает соответствующий метод в зависимости от вида запроса — GET или POST. В примере ниже показаны изменения, которые необходимо внести в класс HomeController.

К существующему методу действия RsvpForm был добавлен атрибут HttpGet. Это указывает MVC, что данный метод должен использоваться только для запросов GET.

Затем была добавлена перегруженная версия метода RsvpForm, принимающая параметр GuestResponse, к которой применен атрибут HttpPost. Этот атрибут указывает MVC, что новый метод будет иметь дело только с запросами POST. Обратите внимание, что также было импортировано пространство имен PartyInvites.Models. Это сделано для того, чтобы на тип модели GuestResponse можно было ссылаться без необходимости в указании полностью определенного имени класса. Работа всех этих добавлений к коду объясняется в последующих разделах.

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

Первая перегруженная версия метода действия RsvpForm визуализирует то же самое представление, что и ранее (файл RsvpForm.cshtml), для генерации формы, показанной на рисунке выше.

Вторая перегруженная версия более интересна из-за наличия параметра. Но с учетом того, что этот метод действия будет вызываться в ответ на HTTP-запрос POST, а тип GuestResponse является классом C#, каким образом они соединяются между собой?

Секрет кроется в привязке модели — чрезвычайно полезной функциональной возможности MVC, согласно которой входящие данные анализируются, а пары «ключ/значение» в HTTP-запросе используются для заполнения свойств в типах модели предметной области. Этот процесс противоположен применению вспомогательных методов HTML; т.е. при создании данных формы для отправки клиенту мы генерируем HTML-элементы input, в которых значения атрибутов id и name производятся из имен свойств класса модели.

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

— мощное и настраиваемое средство, которое избавляет от кропотливого и тяжелого труда по взаимодействию с HTTP-запросами напрямую и позволяет работать с объектами C#, а не иметь дело со значениями Request.Form[] и Request.QueryString[]. Объект GuestResponse, который передается в качестве параметра этому методу действия, автоматически заполняется данными из полей формы.

Визуализация других представлений

Вторая перегруженная версия метода действия RsvpForm также демонстрирует, как можно указать MVC, что в ответ на запрос должно визуализироваться специфическое представление, отличное от стандартного. Ниже приведен соответствующий оператор:

Этот вызов метода View сообщает MVC, что нужно найти и визуализировать представление Thanks и передать ему объект GuestResponse. Чтобы создать указанное представление, щелкните правой кнопкой мыши на любом из методов класса HomeController и выберите в контекстном меню пункт Add View (Добавить представление). С помощью открывшегося диалогового окна Add View создайте строго типизированное представление по имени Thanks, в котором применяется класс модели GuestResponse и которое основано на шаблоне Empty. Среда Visual Studio создаст представление в виде файла Views/Home/Thanks.cshtml.

Отредактируйте код представления так, чтобы он соответствовал коду, приведенному в примере ниже:

Представление Thanks использует механизм визуализации Razor, чтобы отображать содержимое в зависимости от значения свойства GuestResponse, переданного вызову View в методе действия RsvpForm. Выражение @model синтаксиса Razor указывает тип модели предметной области, для которого представление строго типизировано.

Для получения доступа к значению свойства в объекте предметной области применяется конструкция Model.ИмяСвойства. Например, для получения значения свойства Name используется Model.Name.

Теперь, когда создано представление Thanks, появился работающий базовый пример обработки формы с помощью MVC. Запустите приложение в Visual Studio, щелкните на ссылке «Форма RSVP», введите какие-нибудь данные внутри формы и щелкните на кнопке «Отправить форму RSVP». Отобразится результат, показанный на рисунке ниже (он может отличаться, если введено другое имя и было указано о невозможности посетить вечеринку).

Добавление проверки достоверности

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

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

Инфраструктура ASP.NET MVC поддерживает декларативные правила проверки достоверности, определенные с помощью атрибутов из пространства имен System.ComponentModel.DataAnnotations, а это значит, что ограничения проверки достоверности выражаются с помощью стандартных атрибутов C#. В примере ниже показано, как применить эти атрибуты к классу модели GuestResponse:

Инфраструктура MVC обнаруживает атрибуты проверки достоверности и использует их для проверки данных во время процесса приписки модели. Обратите внимание, что мы импортировали пространство имен, которое содержит средства проверки достоверности, так что к ним можно обращаться, не указывая полные имена.

Как уже отмечалось ранее, для свойства WillAttend был выбран булевский тип, допускающий значение null. Это было сделано для того, чтобы можно было применить атрибут проверки Required. В случае использования обычного булевского типа значением, получаемым посредством привязки модели, могло бы быть только true или false, и не было бы возможности определить, выбрал ли пользователь значение. Булевский тип, допускающий null, имеет три разрешенных значения: true, false и null. Значение null будет применяться, если пользователь не выбрал значение, и это вынудит атрибут Required сообщить об ошибке проверки достоверности. Это хороший пример того, насколько элегантно инфраструктура MVC Framework сочетает средства C# с HTML и HTTP.

Проверку на наличие проблемы с достоверностью данных можно выполнить с использованием свойства ModelState.IsValid в классе контроллера. В примере ниже показано, как это реализовано в методе действия RsvpForm, поддерживающем запросы POST, внутри класса контроллера Home:

Если ошибки проверки достоверности отсутствуют, мы указываем MVC, что нужно визуализировать представление Thanks, как это делалось ранее. В случае обнаружения ошибок проверки достоверности мы повторно визуализируем представление RsvpForm вызывая метод View() без параметров.

Простое отображение формы в ситуации, когда имеется ошибка, не особенно полезно — мы должны также предоставить пользователю информацию, в чем заключается проблема, и почему принять отправку формы невозможно. Это делается с применением вспомогательного метода Html.ValidationSummary() в представлении RsvpForm, как показано в примере ниже:

В отсутствие ошибок метод Html.ValidationSummary() создает скрытый элемент списка в виде заполнителя внутри формы. Инфраструктура MVC делает заполнитель видимым и добавляет сообщения об ошибках, определенные атрибутами проверки достоверности. Результирующее окно показано на рисунке:

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

Если вам приходилось иметь дело с ASP.NET Web Forms, то вы знаете, что в Web Forms имеется концепция серверных элементов управления, которые сохраняют состояние, сериализуя значения в скрытое поле формы по имени _VIEWSTATE. Привязка модели ASP.NET MVC не имеет никакого отношения к концепциям серверных элементов управления, обратным отправкам или средству View State, характерным для Web Forms. Инфраструктура ASP.NET MVC не внедряет скрытое поле _VIEWSTATE в визуализированные HTML-страницы.

Подсветка полей с недопустимыми значениями

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

Если свойство класса модели не пройдет проверку достоверности, вспомогательные методы HTML будут генерировать несколько иную HTML-разметку. В качестве примера ниже приведена HTML-разметка, генерируемая в результате вызова Html.TextBoxFor(х => x.Name) при отсутствии ошибок проверки достоверности:

А вот HTML-разметка, генерируемая этим же вызовом, когда пользователь не вводит значение (что является ошибкой проверки достоверности, поскольку мы применили атрибут Required к свойству Name в классе модели GuestResponse):

Этот вспомогательный метод добавил к элементу input класс по имени input-validation-error. Мы можем воспользоваться этой возможностью, создав таблицу стилей, которая содержит стили CSS для этого класса и другие стили, применяемые различными вспомогательными методами HTML.

Соглашение, принятое в проектах MVC, предусматривает помещение статического содержимого, такого как таблицы стилей CSS, в папку по имени Content. Создайте эту папку, щелкнув правой кнопкой мыши на элементе PartyInvites в окне Solution Explorer, выбрав в контекстном меню пункт Add New Folder (Добавить Новая папка) и указав Content в качестве имени папки.

Чтобы создать файл CSS, щелкните правой кнопкой мыши на только что созданной папке Content, выберите в контекстном меню пункт Add New Item (Добавить Новый элемент) и выберите Style Sheet (Таблица стилей) из набора шаблонов элементов. Установите имя нового файла Styles.css, как показано на рисунке ниже:

Щелкните на кнопке Add и Visual Studio создаст файл Content/Styles.css. Приведите содержимое этого файла в соответствие со следующим кодом:

Для использования этой таблицы стилей добавляется новая ссылка в раздел head представления RsvpForm, как показано в примере ниже. Элементы link добавляются к представлениям точно так же, как к обычным статическим файлам HTML, хотя позже будет продемонстрировано средство пакетов, которое позволяет объединять сценарии JavaScript и таблицы стилей CSS и доставлять их в браузеры с помощью единственного HTTP-запроса.

Файлы JavaScript и CSS можно перетаскивать из окна Solution Explorer в редактор кода. Среда Visual Studio создаст элементы script и link для выбранных файлов.

Если вы перешли на MVC 5 непосредственно с MVC 3, то могли ожидать, что файл CSS добавляется к представлению за счет указания атрибута href в виде @Href(«

/Content/Site.css») или @Url.Content(«

/Content/Site.css»). Начиная с MVC 4, механизм Razor обнаруживает атрибуты, начинающиеся с

/ и автоматически вставляет вызов @Href или @Url.

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

Стилизация содержимого

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

Я не являюсь большим поклонником упомянутых шаблонов, но мне нравятся некоторые из используемых ими библиотек, и одним таким примером из числа задействованных в MVC 5 является Bootstrap, которая представляет собой удобную библиотеку CSS, первоначально разработанную в Twitter и получившую широкое применение.

Разумеется, вы не обязаны применять шаблоны проектов Visual Studio, чтобы пользоваться библиотеками вроде Bootstrap. Можно загрузить файлы напрямую из веб-сайтов с нужными библиотеками или воспользоваться инструментом NuGet, интегрированным в Visual Studio и предоставляющим доступ к каталогу заранее упакованного программного обеспечения, которое может быть загружено и установлено автоматически.

Одной из лучших характеристик NuGet является то, что данный инструмент управляет зависимостями между пакетами, так что во время установки, к примеру, библиотеки Bootstrap инструмент NuGet также загрузит и установит библиотеку jQuery, от которой зависит Bootstrap.

Использование NuGet для установки Bootstrap

Чтобы установить пакет Bootstrap, выберите пункт Library Package Manager Package Manager Console в меню Tools среды Visual Studio. Откроется окно командной строки NuGet. Введите следующую команду и нажмите клавишу :

Команда Install-Package сообщает NuGet о необходимости загрузки пакета вместе с его зависимостями и затем добавления всего этого в проект. Нужный пакет называется bootstrap. Имена пакетов можно либо искать на веб-сайте NuGet (http://www.nuget.org), либо прибегнуть к услугам пользовательского интерфейса NuGet в Visual Studio (выберите пункт меню Tools Library Package Manager Manage NuGet Packages for Solution.

Ключ командной строки -version использовался для указания на то, что требуется версия 3 библиотеки Bootstrap, которая является последней доступной стабильной версией. Без ключа -version инструмент NuGet загрузил бы последнюю версию пакета, но для гарантии того, что вы в точности воссоздадите примеры, приведенные ниже, необходимо установить эту конкретную версию.

Инструмент NuGet загрузит все файлы, требующиеся для библиотеки Bootstrap, а также для библиотеки jQuery, на которую опирается Bootstrap. Файлы CSS помещаются в папку Content. Кроме того, создается папка Scripts (которая в MVC является стандартным местоположением для файлов JavaScript) и заполняется файлами Bootstrap и jQuery. (Также создается папка fonts — это индивидуальная особенность библиотеки Bootstrap, которая ожидает наличия файлов в определенных местах.)

Причина рассмотрения Bootstrap в этой статье — иллюстрация того, насколько легко HTML-разметка, генерируемая MVC Framework, может применяться с популярными библиотеками CSS и JavaScript. Тем не менее, основное внимание в настоящем руководстве уделяется разработке серверной стороны.

Стилизация представления index

Базовые средства Bootstrap работают путем применения классов к элементам, которые соответствуют селекторам CSS, определенным внутри добавленных в папку Content файлов. Подробную информацию о классах, определенных в библиотеке Bootstrap, можно получить на веб-сайте Bootstrap, а в примере ниже демонстрируется использование ряда базовых стилей в представлении Index.cshtml:

В разметку были добавлены элементы link для файлов bootstrap.css и bootstrap-theme.css из папки Content. Они являются файлами Bootstrap, требуемыми для базовой стилизации CSS, обеспечиваемой этой библиотекой. Вдобавок в папке Scripts имеется соответствующий файл JavaScript, но в данной статье он не нужен. Кроме того, определен также элемент style, который устанавливает цвет фона для элемента body и стили текста для элементов .

Вы заметите, что для каждого файла Bootstrap в папке Content имеется двойник с суффиксом min — например, есть файлы bootstrap.css и bootstrap.min.css. Это распространенная практика минимизации файлов JavaScript и CSS при развертывании приложений в производственной среде, которая представляет собой процесс удаления всех пробельных символов, а также в случае файлов JavaScript замену имен функций и переменных более короткими метками. Целью минимизации является сокращение объема передаваемых данных, необходимых для доставки содержимого в браузер.

После импортирования стилей Bootstrap и определения пары собственных стилей осталось стилизовать элементы. Рассматриваемый пример прост, поэтому необходимо использовать только три класса CSS из Bootstrap: text-center, btn и btn-success.

Полученные в итоге результаты показаны на рисунке ниже:

Стилизация представления RsvpForm

В библиотеке Bootstrap определены классы, которые могут использоваться для стилизации форм. Я не планирую вдаваться в особые детали, но в примере ниже показано, как были применены эти классы:

Классы Bootstrap в этом примере создают панель с заголовком, просто чтобы придать компоновке структурированность. Для стилизации формы используется класс form-group, который стилизует элемент, содержащий label и связанный элемент input или select.

Эти элементы созданы посредством вспомогательных методов HTML, что означает отсутствие статически определенных элементов, к которым можно было бы применить требуемый класс form-control. К счастью, вспомогательные методы принимают в качестве необязательного аргумента объект, который позволяет указывать атрибуты создаваемого элемента, например:

Объект для атрибутов создается с использованием анонимных типов C# и указывает, что в элементе, генерируемом вспомогательным методом TextBoxFor, атрибут class должен быть установлен в form-control. Свойства, определяемые этим объектом, применяются для имени атрибута, добавляемого к HTML-элементу, а поскольку class является зарезервированным словом в языке C#, оно предваряется символом @. Это стандартная возможность C#, которая позволяет использовать ключевые слова в выражениях.

Результаты стилизации можно видеть на рисунке ниже:

Стилизация представления Thanks

Последним представлением, подлежащим стилизации, является Thanks.cshtml, в примере ниже показано, как это делается. Вы заметите, что добавленная разметка похожа на таковую из представления Index.cshtml. Чтобы упростить управление приложением, имеет смысл избегать дублирования кода и разметки везде, где это возможно. Позже будут рассмотрены компоновки Razor и описаны частичные представления, которые способствуют сокращению дублирования разметки.

Класс lead применяет один из типографских стилей Bootstrap. Результаты можно видеть на рисунке ниже:

Завершение примера

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

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

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

Мы добавили выражение Razor, которое применяет вспомогательный класс WebMail для настройки параметров нашего почтового сервера, в том числе имени сервера, обязательности использования безопасных подключений (SSL) и сведений об учетной записи. Как только все эти детали сконфигурированы, с помощью метода WebMail.Send() отправляется сообщение по электронной почте.

Весь код отправки сообщения помещен внутрь блока try. catch, что позволяет предупредить пользователя, если сообщение не отправлено. Это осуществляется путем добавления текстового блока в вывод представления Thanks. Более рациональным подходом было бы отображение отдельного представления ошибки в случае невозможности отправки электронного сообщения, но мы хотели максимально упростить это первое приложение MVC.

Илон Маск рекомендует:  Установка скриншотов в каталоге на движке cncat
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL
Примечание