Пример aspx-страницы. Структура страницы

Любая серверная страница ASP.NET представляет собой текстовый файл с расширением .aspx. Далее такие страницы будут для краткости называться aspx-страницами. Рассмотрим пример простой aspx-страницы, которую разместим в файле test.aspx:

<%@ Page Language="C#" %>
<script runat="server">
string[] Data = {"Hello ", "world ", "from ", "ASP.NET"}; string getData(int i) {
return Data[i]; } void Button1_Click(object sender, EventArgs e) {
Label1.Text = TextBox1.Text; } </script>
239
 
<html> <body>
<% for(int i=0; i < 4; i++) Response.Write(getData(i)); %> <form runat="server"> <p>
<asp:Label ID="Label1" runat="server">No Name</asp:Label> </p> <p>
<asp:TextBox ID="TextBox1" runat="server" /> </p> <p> <asp:Button ID="Button1" OnClick="Button1_Click"
runat="server" Text="Send" /> </p> </form> </body> </html>

Для просмотра данной страницы требуется:
1.    На компьютере-сервере должен быть установлен и запущен веб-сервер. Можно использовать сервер IIS или, например, свободно распространяемый фирмой Microsoft сервер Cassini.
2.    На сервере создается виртуальный каталог, в соответствующий физический каталог помещается файл test.aspx. В нашем примере будет использоваться физический каталог C:\Test и виртуальный каталог test.
3.    Пользователь набирает в браузере следующий адрес:
http://localhost/test/test.aspx
Вид страницы в браузере показан на рисунке.

article_2_1

Код отображаемой страницы выглядит следующим образом:

<html> 
<body>

Hello world from ASP.NET
<form name="ctl00" method="post" action="test.aspx" id="ctl00"> <div>
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="/wEPDwULLTEz4aswGyDFp8uH0tpf" /> </div> <p>
<span id="Label1">No Name</span> </p> <p>
<input name="TextBox1" type="text" id="TextBox1"/> </p> <p>
<input type="submit" name="Button1" value="Send" id="Button1" /> </p> <div>
<input type="hidden" name="__EVENTVALIDATION" id="__EVENTVALIDATION"
value="/wE54rGBu07o0F5j+sOYUEyYF3Dz5/uj" /> </div> </form>
</body>

</html>

Обратите внимание на скрытое поле формы __VIEWSTATE (поддержка отображаемого состояния) и на поле __EVENTVALIDATION (указатель на источник события).
Рассмотрим подробнее структуру страницы. В любой странице можно выделить несколько логических секций:
1.    HTML-код. HTML-код не обрабатывается процессом ASP.NET специальным образом, а сразу пересылается клиенту. Выводом HTML-кода занимается специальный внутренний метод __Render__control() того класса, который соответствует странице. В нашем случае фрагмент страницы

<html> 
<body>

будет выведен в методе __Render__control() так:

private void __Render__control(. . .) {
Response.Write("<html>\r\n<body>\r\n");
. . . }

2.    Директивы страницы. Директивы используются для установки отдельных параметров страницы, таких как язык программирования для кодастраницы или подключение пространства имен. Директива начинается с символа @, за которым следует имя директивы и набор пар «атрибут = значение». Например, следующая директива указывает на использование C# в качестве языка программирования на странице:

<%@ Page Language="C#" %>
Директивы могут размещаться в любом месте страницы, но вне HTML-элементов. Как правило, директивы помещают в начале страницы.
3.    Блоки серверного кода. Это блоки, обрамленные тэгом <script> с обязательным атрибутом runat="server":
<script runat="server">
string[] Data = {"Hello ", "world ", "from ", "ASP.NET"};
string getData(int i) {
return Data[i]; } void Button1_Click(object sender, EventArgs e) {
Label1.Text = TextBox1.Text;
}
</script>
Блоки серверного кода транслируются в члены класса, соответствующего странице. В приведенном примере класс будет содержать поле-массив Data, методы getData() и Button1_Click().
Отметим, что наличие блоков серверного кода на странице противоречит концепции Code Behinde. Согласно данной концепции код, связанный со страницей, должен быть помещен в отдельный класс, от которого наследуется класс страницы.
4.    Блоки рендерного кода. Блоки рендерного кода используются для генерации потока вывода. В нашем примере блоком рендерного кода является фрагмент
<% for (int i = 0; i < 4; i++) Response.Write(getData(i)); %>

При обработке на сервере блоки рендерного кода помещаются непосредст¬венно в метод, «заведующий» выводом HTML-кода. Таким образом, метод __Render__control() будет содержать следующий код:

private void __Render__control(. . .) {
Response.Write("<html>\r\n<body>\r\n");
for (int i = 0; i < 4; i++) Response.Write(getData(i));
. . . }

Если блок рендерного кода записывается в форме <%= выражение %>, то в метод вставляется вывод вычисленного выражения.
5.    Серверные элементы управления. В нашем примере страница содержит три серверных элемента управления: текстовую метку, поле ввода, кнопку:

<asp:Label id="Label1" runat="server">No Name</asp:Label> 
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
<asp:Button id="Button1" onclick="Button1_Click"
runat="server" Text="Send">
</asp:Button>
 
Серверные элементы управления описываются с помощью специальных тегов с обязательным атрибутом runat="server". Они соответствуют полям в классе страницы. Так, наша страница будет содержать поле с именем Label1, тип которого – System.Web.UI.WebControls.Label. Серверный элемент управления обладает набором свойств, установка которых возможна на страни¬це как задание соответствующий атрибутов. Большинство серверных элементов должны быть размещены в пределах серверной формы (<form runat="server">).
Кроме упомянутых выше элементов, страница ASP.NET может содержать также комментарии, блоки привязки данных (будут подробно рассмотрены позднее), клиентские скрипты.
 

Добавить комментарий


Защитный код
Обновить

Разработчику

Скрипты