Архитектура Web-форм
Web-форма состоит из двух частей:
- отображаемого содержимого, или презентации формы. Как правило, отображаемое содержимое описывается на языке HTML;
- программного кода, который описывает логику взаимодействия с визуальными элементами.
Физически Web-форма представлена файлом с расширением .aspx. Расширение любой HTML-страницы можно изменить на .aspx. При этом представление страницы с новым расширением будет тождественно представлению исходной страницы. Иными словами, Web-формы совместимы снизу вверх с обычными HTML-страницами.
Особенность Web-форм состоит в способе, при помощи которого программный код отделяется от самой формы. Исходный код (написанный не на C++) может храниться в отдельном не скомпилированном файле. Или же программный код (снова таки, не на C++) может быть вложен в .aspx-файл. И, наконец, код (написанный на С#, VB или C++) может храниться в предварительно скомпилированной сборке, содержащей динамически подключаемую библиотеку (DLL). Когда страницы загружаются Web-сервером, выполняется код, описывающий пользовательский интерфейс. Этот код динамически формирует отображаемую клиентом страницу.
Чтобы четче представить архитектуру Web-форм, написанных на C++, мы рассмотрим пример HelloCodebehind. Эта программа отображает информацию, введенную пользователем. Чтобы запустить приложение, введите в адресной строке браузера унифицированный указатель информационного ресурса (URL) http://localhost/NetCpp/HeiloCodebehind.aspx. Код, написанный на C++, содержится в файле HelloCodebehind.aspx.h. Обратите внимание, что данный проект создает динамически подключаемую библиотеку (DLL) – файл HelloCcdebehind.dll.
Эта динамически подключаемая библиотека (DLL) затем копируется в подкаталог bin виртуального каталога. (Виртуальный каталог мы создали раньше для хранения примеров программ, которые рассматриваются в главе 10 "ASP.NET и Web-формы". Так было сделано потому, что информационный сервер Internet (US) ищет загружаемые динамически подключаемые библиотеки (DLL) в этом подкаталоге.) Код, который описывает видимые элементы страницы (презентацию страницы), приведен ниже. Он содержится в файле HelloCodebehind.aspx:
<! – KelloCoaebehind.aspx – > <%@ Assembly Name=" HelloCodebehind" °> <! – Имя сборки – > <%@ Page Inherits= MyWebPage "> <HTML> <HEAD> </HEAD> <BODY> <! – ТЕЛО – > <FORM RUNAT="SERVER">YOUR NAME: <asp:textbox id=txtName Runat="server"></asp:textbox> <p>asp:button id=cmdEcho onclick=cmdEcho__Click Text="Echo" runat="server" tooltip="Click to echo your name"> </asp:buttonx/p> <asp:lacel id=lblGreeting runat="server"> </asp:label> <P></P> </FORM> </BODY> <! – тело – > </HTML>
Код, который создает интерфейс пользователя, содержится в файле HelloCodebehind.h:
//HelloCodebehind.h fusing <System.dll> fusing <System.Web.dll> using namespace System; // использование пространства имен Система; using namespace System::Web; // использование пространства имен Система::Сеть; using namespace System::Web::UI; // использование пространства имен // Система::Сеть:пользовательский интерфейс; using namespace System::Web::UI::WebControls; // использование пространства имен // Система::Сеть::Пользовательский интерфейс::WebControls; public _gc class MyWebPage: public System::Web::UI::Page // класс сборщика мусора MyWebPage: общедоступная Система:: // Сеть:: Пользовательский интерфейс:: Страница { protected: // защищенный TextBox *txtName; Button *cmdEcho; // Кнопка Label *lblGreeting; // Метка public: void cmdEcho_Click(Object *Source, EventArgs *e) { IblGreeting-XText = // Текст String::Format(// Строка:: Формат "Hello, (0). Welcome to Managed C++ ASP.", // "Привет, {0}. Добро пожаловать // в Управляемый C++ ASP. ", txtName › Text); // Текст } };
Этот код нужно скомпилировать отдельно и развернуть полученную сборку HelloCodebehind.dll в каталоге \OI\NetCpp\ChaplO\bin. Информационный сервер Internet (US) автоматически ищет загружаемые файлы в подкаталоге bin виртуального каталога.