В одной из прошлых статей мы начали знакомство с такой нашумевшей технологией как 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:

Comments are closed.