Любая серверная страница 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
Вид страницы в браузере показан на рисунке.

Код отображаемой страницы выглядит следующим образом:
<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() того класса, который соответствует странице. В нашем случае фрагмент страницы
будет выведен в методе __Render__control() так:
private void __Render__control(. . .) {
Response.Write("<html>\r\n<body>\r\n");
. . . }
2. Директивы страницы. Директивы используются для установки отдельных параметров страницы, таких как язык программирования для кодастраницы или подключение пространства имен. Директива начинается с символа @, за которым следует имя директивы и набор пар «атрибут = значение». Например, следующая директива указывает на использование C# в качестве языка программирования на странице:
<%@ Page Language="C#" %>
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>
Отметим, что наличие блоков серверного кода на странице противоречит концепции 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>
Кроме упомянутых выше элементов, страница ASP.NET может содержать также комментарии, блоки привязки данных (будут подробно рассмотрены позднее), клиентские скрипты.





