Web-форма состоит из двух частей:
Физически 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.dl]. Эта динамически подключаемая библиотека (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.", // "Привет, {О}. Добро пожаловать
// в Управляемый C++ ASP. ",
txtName->Text); // Текст
}
};
Этот код нужно скомпилировать отдельно и развернуть полученную сборку HelloCodebehind. dll в каталоге \OI\NetCpp\ChaplO\bin. Информационный сервер Internet (US) автоматически ищет загружаемые файлы в подкаталоге bin виртуального каталога.