Принципы построения web-приложений на основе технологии ASP.NET Asp.net-страницы формируются на основе даже не html-тегов, а на основе достаточно широкого спектра web-элементов управления, близких по стилю и управлению элементам управления из пространства имен Windows.Forms. Обработка элементов управления осуществляется как на стороне клиента средствами JavaScript, так и на стороне сервера (элемент управления и форма должны иметь атрибут runat=”server”). Наличие этого атрибута вызывает обращение к некоторому серверному обработчику, приводящее, в частности, к перегрузке asp.net-страницы. Особая роль при проектировании asp.net-страницы относится к web-элементам управления. Эти элементы в разметке начинаются с префикса asp. Они также, как и обычные элементы html-кода, могут иметь атрибуты и обработчики. Однако их обработчики могут быть как клиентскими, так и серверными. Кроме того, они имеют специальные атрибуты, например, источники данных для таблиц и пр. Web-элементы управления заменяют себя на html-представление данных, который элемент представляет. Существует две модели построения asp.net-страниц: Модель одномодульной страницы; Модель страницы с внешним кодом приложения. Модель одномодульной страницы содержит вместе и код обработки, и разметку. Например, пусть требуется вывести html-таблицу с данными некоторой таблицы базы данных: <%@ Page Language="C#" %> <%@ Import Namespace="System.Data.OleDb" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <script runat="server"> // серверный сценарий обработки нажатия кнопки protected void btn_Click(object src, EventArgs args) { OleDbConnection sqlConn = new OleDbConnection("Provider=SQLOLEDB.1;... "); sqlConn.Open(); OleDbCommand cmd = new OleDbCommand("select * from MyTable", sqlConn); MyView.DataSource = cmd.ExecuteReader(); MyView.DataBind(); sqlConn.Close(); } </script> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Пробная asp.net страница</title> </head> <body> <form id="form1" runat="server"> <div style="background-color: aqua"> Щелкните на кнопке, чтобы заполнить таблицу:<br /> <asp:Button ID="MyButton" runat="server" Text="Заполнить таблицу" OnClick="btn_Click"/><br /> <asp:GridView ID="MyView" runat="server"> </asp:GridView> <br /> </div> </form> </body> </html> Данный сценарий содержит кнопку и элемент «Просмотр таблицы», которые обрабатываются серверными средствами. Объект класса, который наследует от Page, будет содержать ссылки на объекты классов web-элементов управления, которые будут иметь имена, совпадающие с ID web-элемента управления. В данном случае нажатие на кнопку приводит к выполнению функции-обработчика btn_Click, который обращается к базе данных и производит привязку данных к таблице GridView. В случае модели с внешним кодом поддержки будут сгенерированы два файла – файл с разметкой (расширение .aspx) и файл с программным кодом (с расширением .cs). Связь файлов фиксируется в атрибуте CodeFile главного тега Page asp.net-страницы. К элементам, которые поступают из формы можно обращаться как через объект Request, так и напрямую, как к обычным элементам управления. Asp.net-страница имеет удобное свойство IsPostBack, позволяющее отследить, загружается ли страница впервые (true) или произошел повторный запрос к ней (false). Существует возможность задания шаблона страницы, в который должно быть вставлено конкретное содержимое. Шаблон создается в специальном файле с расширением .master. Он также может иметь собственные обработчики, например, обработчик проведения авторизации пользователя. Его файл разметки имеет примерно следующую структуру: <%@ Master Language="C#" AutoEventWireup="true" CodeFile="MyMastPage.master.cs" Inherits="MasterPage" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Страница на основе шаблона</title> </head> <body> <!-- html и aspnet-раметка --> <asp:contentplaceholder id="ContentPlaceHolder1" runat="server"> </asp:contentplaceholder> </body> </html> В элемент contentplaceholder осуществляется вставка конкретного содержимого в страницах, сгенерированных на основе этого шаблона, которая имеет следующую структуру: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Basket.aspx.cs" MasterPageFile="~/MyMastPage.master" Inherits="Basket" %> <asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> <!-- html и asp.net-разметка конкретного содержимого страницы --> </asp:Content> Каждый серверный обработчик asp.net-страницы имеет доступ к передаваемым параметрам через коллекцию Params объекта Request, может записывать ответ в поток, предоставляемый объектом Response. Через объект Response можно также осуществить перенаправление на другую asp.net-страницу с помощью метода Redirect.