В одной из прошлых статей мы начали знакомство с такой нашумевшей технологией как ASP.Net. Мы научились настраивать Apache для работы с сайтами, написанными с использованием ASP.net. Такую прекрасную возможность мы получили благодаря проекту Mono. Результатом той статьи был небольшой кусок кода под ASP.Net с использованием языка C#, который выполнялся под Apache и отвечал на действия пользователя. Однако мы не успели разобрать сам код. Из каких частей состоял тот код и каково их назначение и пойдет речь в этой статье.
По сути код состоит из трех частей. Первая из них это
<%@ Page language="" AutoEventWireup="true"%>
То что заключено между <% и %> предназначено для интерпретации ASP-кода. Это как символы <? и ?> для php. Директива Page всегда присутствует на aspx-странице.
Директивы позволяют контролировать поведение страницы, обычно расположены в самом начале страницы и задаются в следующем виде.
<%@ [Directive] [Attribute=Value] %>
Атрибут language указывает на язык, который используется по умолчанию для скриптов данной страницы. Это может быть например C#, VB, C++ или J#. Но у нас в скриптах явно указан язык. Поэтому этот атрибут директивы Page пуст. Страницу для ASP.Net можно даже писать на нескольких языках.
Следующий атрибут директивы Page имеет имя AutoEventWireup. В данном случае он включает автоматическую обработку событий страницы.
Кстати, о событиях. Вторая часть примера выглядит так:
1 2 3 4 5 6 | <script language="C#" runat="server"> private void Button1_Click(object sender, System.EventArgs e) { lblSample.Text = txtSample.Text; } </script> |
Здесь, как мы видим, задается обработчик события нажатия на кнопку на языке C# (атрибут language). А атрибут runat=”server” сообщает транслятору, что этот нод не передается браузеру напрямую, а обрабатывается на сервере (после чего сам данный нод, может вообще не иметь html-интерпретации). Мы вернемся к событиям после то, как рассмотрим третью часть примера.
Выглядит она так:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <form id="Form1" method="post" runat="server"> <p> <asp:Label id="lblSample" runat="server" Width="208px"> Label </asp:Label> </p> <p> <asp:Label id="Label1" runat="server" Width="104px"> Enter Text Here: </asp:Label> <asp:TextBox id="txtSample" runat="server"></asp:TextBox> </p> <p> <asp:Button id="Button1" runat="server" Text="Submit" OnClick="Button1_Click"> </asp:Button> </p> </form> |
И если не вглядываться, то это простой html-код. Однако если присмотреться, то можно заметить, знакомый уже атрибут runat=”server”, который делает так, чтобы транслятор обрабатывал html-элементы перед отправкой браузеру.
Так же можно заметить такие ноды как asp:Label, asp:TextBox и asp:Button. Это стандартные серверные элементы управления. Многие из них имеют html-аналоги. Но не у всех. Например в ASP.Net существует такой элемент как TreeView, у которого нет html-аналога. Объявление серверного элемента управления начинается с блока <asp:ТипЭлемента.
В нашем примере есть элемент Button. Интересен он нам тем, что к нему привязано событие. У нода, который описывает этот элемент есть свойство OnClick=”Button1_Click”. Свойство содержит как видно имя функции, которая будет вызываться при нажатии на кнопку. Однако это вовсе не подобие Javascript. Когда вы нажимаете на кнопку, то уходит запрос на сервер и на сервере и выполняется эта функция. После чего пользователю выдается обновленная страничка.
В функцию передаются два параметра object sender и System.EventArgs e. Да да. Указаны типы параметров. Дело в том, что в .Net существует жесткая типизация, которой нет в PHP. В коде функции обращение к элементам управления (серверным элементам) происходит через их id. У нас есть элемент asp:Label id=”lblSample”, в который записывается текст из элемента asp:TextBox id=”txtSample”. Все-таки концептуально это очень похоже на JavaScript. Однако отличие в том какая сторона выполняет код.
Вот мы немного и освоились в кодом примера. Теперь мы готовы более глубоко осваивать эту технологию. Это мы и будем пытаться сделать в следующих статьях.
Tags: ASP.Net