- •1. Язык программирования c# 3
- •2. Базовые элементы .Net Framework 67
- •3. ТЕхнология .Net Remoting 144
- •Введение
- •1. Язык программирования c#
- •1.1. Платформа .Net – обзор архитектуры
- •1.2. Язык c# - общие концепции синтаксиса
- •1.3. Система типов языка c#
- •1.4. Преобразования типов
- •1.5. Идентификаторы, ключевые слова и литералы
- •1.6. Объявление переменных, полей и констант
- •1.7. Выражения и операции
- •1.8. Операторы языка c#
- •1.9. Объявление и вызов методов
- •1.10. Массивы в c#
- •1.11. Работа с символами и строками в c#
- •1.12. Синтаксис объявления класса, Поля и методы класса
- •1.13. Свойства и индексаторы
- •1.14. Конструкторы класса и Жизненный цикл объекта
- •1.15. Наследование классов
- •1.16. Перегрузка операЦий
- •1.17. Делегаты
- •1.18. События
- •1.19. Интерфейсы
- •1.20. Структуры и перечисления
- •1.21. Пространства имен
- •1.22. Генерация и обработка исключительных ситуаций
- •1.23. Нововведения в языке c# 2.0
- •1.24. Обобщенные типы (generics)
- •2. Базовые элементы .Net Framework
- •2.1. Метаданные и механизм отражения
- •2.2. Пользовательские и встроенные атрибуты
- •2.3. Пространство имен system.Collections
- •2.4. Работа с файлами и директориями
- •2.5. Использование потоков данных
- •2.6. Сериализация
- •2.7. Сериализация объектов в нестандартном формате
- •2.8. Введение в xml
- •2.9. Работа с xml-документами в .Net framework
- •2.10. МНогопоточное программирование
- •2.11. Синхронизация потоков
- •2.12. Асинхронный вызов методов
- •2.13. Состав и взаимодействие сборок
- •2.14. Конфигурирование сборок
- •3. ТЕхнология .Net Remoting
- •3.1. Домены приложений
- •3.2. Архитектура .Net Remoting
- •3.3. Активация удаленных объектов и их время жизни
- •3.4. Программная настройка Remoting
- •3.5. Удаленные Объекты с клиентской активацией
- •3.6. Настройка Remoting при помощи конфигурационных файлов
- •3.7. Хостинг распределенных приложений
- •3.8. Объекты-сообщения
- •3.9. Пользовательские канальные приемники
- •4.1. Архитектура ado.Net
- •4.2. Учебная база cd Rent
- •4.3. Соединение с базой данных
- •4.4. Выполнение команд и запросов к базе данных
- •4.5. Чтение данных и объект DataReader
- •4.6. Параметризированные запросы
- •4.7. Рассоединенный набор данных
- •4.8. Заполнение Рассоединенного набора данных
- •4.9. Объект класса DataColumn – колонка таблицы
- •4.10. Объекты класса DataRow – строки таблицы
- •4.11. Работа с объектом класса DataTable
- •4.12. DataSet и схема рассоединенного набора данных
- •4.13. Типизированные DataSet
- •4.14. Поиск и фильтрация данных в DataSet
- •4.15. Класс DataView
- •4.16. СиНхронизация набора данных и базы
- •5.1. Архитектура и общие концепции asp.Net
- •5.2. Пример aspx-страницы. Структура страницы
- •5.3. Директивы страницы
- •5.4. Класс System.Web.Ui.Page. События страницы
- •5.5. Серверные элементы управления
- •5.6. Элементы управления Web Controls
- •5.7. Проверочные элементы управления
- •5.8. Списковые элементы управления
- •5.9. Связывание данных
- •5.11. Управление состояниями в web-приложениях
- •5.12. Кэширование
- •5.13. Безопасность в web-приложениях
- •5.14. Создание пользовательских элементов управления
- •Литература
5.2. Пример 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>
<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
Вид страницы в браузере показан на рисунке 13.
Рис. 13. Страница, отображаемая в браузере
HTML-код отображаемой страницы выглядит следующим образом:
<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 может содержать также комментарии, блоки привязки данных (будут подробно рассмотрены позднее), клиентские скрипты.