2010г.
Количество страниц: 528
В книге ASP.NET. Сборник рецептов. Агуров (+CD) собраны практические советы и примеры, которые помогут при создании веб-приложений с использованием ASP.NET: разработка архитектуры веб-приложения, его отладка, профилирование, защита, конфигурирование, работа с данными и многое другое. Рассмотрены специальные инструменты и утилиты, которые позволяют ускорить и упростить разработку и отладку веб-приложений. Уделено внимание обработке исключений в веб-приложениях. Отдельная глава посвящена созданию отчетов в MS Excel. Книга будет полезна не только программистам, которые уже используют в своих разработках ASP.NET, но и тем, кто переходит на технологию ASP.NET с классической ASP или языка PHP. На компакт-диске приведен исходный код рассмотренных примеров.
Оглавление книги ASP.NET. Сборник рецептов. Агуров (+CD)
Оглавление Введение 1
Для кого эта книга 2
О программном коде 2
Краткое описание глав 3
Благодарности 4
Обратная связь 4
Глава 1. Архитектура и общие вопросы
5
1.1. Основные отличия ASP.NET 1.1 и 2.0 5
1.2. В ASP было... 7
1.3. Можно ли запустить приложение ASP.NET под Apache 8
1.4. Где найти исходный код Framework 8
1.5. Использование SSI include в ASP.NET 8
1.6. Как узнать версию ASP.NET, под которой работает сайт 9
1.7. Как узнать браузер и версию клиента, запустившего сайт 9
1.8. Как узнать параметры компьютера, на котором работает сайт 9
1.9. Где расположен временный каталог 9
1.10. Как изменить временный каталог ASP.NET 10
1.11. Информация о соединении 10
1.12. Зачем создается пользователь ASPNET 10
1.13. Где сохранить данные при переходе между страницами 10
1.13.1. Адресная строка 11
1.13.2. Куки 11
1.13.3. Скрытые поля 12
1.13.4. Состояние страницы 12
1.13.5. Сессия 12
1.13.6. Память приложения 13
1.13.7. Что же выбрать 14
1.14. Не используйте подчеркивание в имени серверов 14
1.15. Общие правила создания страниц 14
1.15.1. Не путайте разметку и код 14
1.15.2. Не встраивайте C#-код в ASPX-файл 15
1.15.3. Используйте отдельные JS-файлы 15
1.15.4. Используйте отдельные CSS-файлы 16
1.15.5. Используйте мастер-страницы 16
1.15.6. Создавайте базовые классы страниц 16
1.15.7. Используйте свойства для обращения к сессии и состоянию 16
1.15.8. Не используйте Convert.To-методы, когда этого не требуется 17
1.15.9. Не используйте TryParse, когда не проверяется результат 18
1.15.10. Проверяйте данные не только на клиенте, но и на сервере 18
1.15.11. Не создавайте глубокой иерархии элементов управления 18
1.15.12. Используйте события для обмена между элементами управления и их контейнерами 19
1.15.13. Будьте аккуратны со статическими переменными 19
1.15.14. Правила обработки исключений 20
1.15.15. Не выводите входные данные напрямую на страницу 20
1.15.16. Подготовка к тестированию 20
1.16. Как заблокировать одновременный доступ Application 20
1.17. Простой класс доступа к данным 20
1.18. Реализация единого дизайна страниц 30
1.19. Процедура восстановления пароля 30
1.20. Файл global.asax и события 31
1.20.1. Наиболее важные методы global.asax 31
1.20.2. Можно ли создать global.asax в виде CS-файла 32
1.20.3. Определение причины закрытия сайта 33
1.21. Модули HTTP и обработчики HTTP 34
1.21.1. Модули HTTP 35
1.21.2. Обработчики HTTP 37
1.21.3. Стандартные обработчики HTTP 38
1.22. Как сделать иконку для сайта (Favicon) 38
1.23. Ввод чисел с плавающей точкой 39
1.24. В чем разница между CurrentCulture и CurrentUICulture 41
1.25. Отправка почты из ASP.NET-приложения 41
1.25.1. Использование класса SmtpClient 41
1.25.2. Стандартные настройки SMTP в ASP.NET 2.0 47
1.25.3. Решение проблемы с русскими символами 48
1.25.4. Игнорирование проверки сертификата SSL 49
1.25.5. Как отправить событие в календарь Outlook 49
1.26. Проверка орфографии 50
1.27. Как задать допустимое время выполнения скриптов 51
1.28. Почему установка executionTimeout не работает 51
1.29. Offline-режим для приложения 51
1.30. Кроссбраузерность 52
1.30.1. Проблемы не IE-браузеров 52
1.30.2. Фильтры браузеров 52
1.30.3. Применение стилей только для IE 53
1.30.4. Условные выражения в CSS 53
1.30.5. Прыгающая ширина поля ввода в IE 54
1.30.6. Прозрачная PNG-картинка в браузере IE 54
1.30.7. Ограничение на число файлов стилей в браузере IE 55
1.30.8. Удаление рамки с активной ссылки 55
1.31. Разное про HTML... 55
1.31.1. Лишний отступ снизу и подчеркивание изображения внутри ссылки 55
1.31.2. Вставка флэш-файлов в страницу 55
1.31.3. "Отладка" верстки 56
1.31.4. Преобразование HTML-текста 56
1.31.5. Как передать значение из JS-кода на сторону сервера 57
1.31.6. Как вывести значение в HTML 57
1.31.7. Предупреждение о закрытии браузера (только IE и Firefox) 57
1.31.8. Двигающийся текст 58
1.31.9. Блокировка экрана на время длительной операции 58
1.31.10. Определение текущей кодировки страницы 61
1.32. Совместимость 61
1.32.1. Как определить, поддерживает ли браузер пользователя ActiveX 61
1.32.2. Как определить, поддерживает ли браузер пользователя JavaScript 61
1.33. Дни месяца по-русски 61
1.34. Запуск задач по расписанию 62
1.34.1. Запуск задач в ASP.NET с помощью таймера или потока 62
1.34.2. Запуск задач в ASP.NET с помощью кэша 63
1.34.3. Вызов определенного URL через Windows-планировщик 64
1.35. Использование встроенных ресурсов 65
1.35.1. Встроенные изображения 65
1.35.2. Строковые ресурсы 67
1.36. Работа с изображениями и пиктограммами 68
1.36.1. Изменение размера изображения 68
1.36.2. Создание пиктограммы 69
1.36.3. Анимированный GIF 70
1.36.4. Обрезка изображений 71
1.37. Разное 71
1.37.1. Как преобразовать массив в строку с разделителем 71
1.37.2. Перекодировка текста 71
1.37.3. Преобразование в Base64 и обратно 72
1.37.4. Преобразование из Win1251 в Koi8 и обратно 72
1.37.5. Преобразование цвета в строку и обратно 73
1.37.6. Преобразование цвета в HTML-формат 73
1.37.7. Преобразование цвета в целое число и обратно 74
1.37.8. Возможности форматирования методов Format и Eval 74
Глава 2. Формы
76
2.1. Получение параметров формы 76
2.2. Модификация страницы до вызова метода Page_Load 77
2.3. Почему Page_Load вызывается два раза 77
2.4. Сохранение позиции скроллинга в браузере 77
2.5. Отображение данных в строке состояния браузера 78
2.6. Программная установка метатегов 78
2.7. Установка фокуса на элемент управления 79
2.8. Установка фокуса по умолчанию 79
2.9. Задание кнопки по умолчанию 79
2.10. На странице не отображаются русские буквы 79
2.11. Задание фона страницы из кода 80
2.12. Комментирование кода внутри ASPX-страницы 80
2.13. Комментирование внутри элементов управления 80
2.14. Открытие страницы по кнопке в новом окне 81
2.15. Использование WinForms-компонентов в веб-проектах 81
2.16. Как сделать аналог метода MessageBox.Show 84
2.17. Ручное формирование HTML-кода страницы 85
2.18. Мастер-страницы (master pages) 87
2.18.1. Создание шаблона страниц 87
2.18.2. Доступ к мастер-странице 90
2.18.3. Передача данных из мастер-страницы в контент 91
2.18.4. Регистрация JS-скрипта для мастер-страницы 93
2.18.5. Доступ к ScriptManager мастер-страницы 93
2.18.6. Указание мастер-страницы через web.config 94
2.18.7. Динамический выбор мастер-страницы 95
2.18.8. Выбор мастер-страницы в зависимости от браузера 95
2.18.9. Как задать тему для мастер-страницы 96
2.18.10. Установка метатегов мастер-страницы 98
2.19. Динамическое добавление JS-файла к странице 98
2.20. Динамическое добавление CSS-файла к странице 99
2.21. Динамическое добавление HTML-кода на страницу 99
2.22. Просмотр исходного кода страницы 99
2.23. Получение всех введенных данных формы 100
2.24. Как получить значение hidden-поля в коде 100
2.25. "Горячие" клавиши страницы 100
2.25.1. Использование свойства AccessKey 100
2.25.2. Использование JS-скрипта 101
2.26. Автоматическое обновление страницы по времени 101
2.26.1. Использование JavaScript 101
2.26.2. Использование метатегов 102
2.27. Печать страницы на принтер по умолчанию 103
2.28. Создание PDF-файла из страницы 105
Глава 3. Элементы управления
109
3.1. Общие вопросы элементов управления 109
3.1.1. Регистрация элементов управления в eb.config 109
3.1.2. Получение HTML-кода элемента 109
3.1.3. Получение клиентских идентификаторов (ClientID) 110
3.1.4. Удаление ненужных клиентских идентификаторов (ClientID) 111
3.1.5. Улучшение работы с ClientID в ASP.NET 4.0 112
3.1.6. Отключение табличного представления форм (ASP.NET 4.0) 112
3.1.7. Использование серверных тегов в серверных элементах управления 113
3.1.8. Создание элементов из строки 115
3.1.9. Скрыть/показать элемент страницы 115
3.2. Элемент выбора файла 116
3.2.1. Загрузка нескольких файлов 116
3.2.2. Как запретить ввод имени файла 119
3.2.3. Проверка типа файла 119
3.2.4. Можно ли задать фильтр для выбираемых файлов 119
3.2.5. Одновременная загрузка нескольких файлов с отображением процесса 120
Вариант 1 120
Вариант 2 120
Вариант 3 120
3.3. Элемент управления Label 121
3.3.1. Как отобразить текст по вертикали 121
3.3.2. Как изменить текст через JavaScript 121
3.3.3. Как отобразить текст в несколько строк 121
3.4. Элемент управления CheckBoxList 121
3.4.1. Выбрать все отмеченные элементы 121
3.4.2. Проверить, что ничего не выбрано 121
3.5. Элемент управления TreeView 122
3.5.1. Ограничение по ширине 122
3.5.2. Дерево отображается некорректно 122
3.6. Элементы управления ListView и ListBox 122
3.6.1. Почему свойство SelectedItem равно null 122
3.6.2. Улучшения ListView в ASP.NET 4.0 123
3.6.3. Скроллируемый ListBox 123
3.7. Элемент управления TextBox 124
3.7.1. Запрет ввода формы по клавише 124
3.7.2. Указание максимальной длины TextBox для полей ввода 124
3.7.3. Подсказка ввода в TextBox 126
3.7.4. Выравнивание текста 127
3.7.5. Проверка введения корректной даты 128
3.8. Отображение графических карт 128
3.9. Элемент управления GridView 129
3.9.1. Общие вопросы 129
А где DataGrid? 129
Добавление прокрутки 129
3.9.2. Привязка данных 130
Чем свойство DataSource отличается от DataSourceId 130
Привязка данных с помощью свойства DataSource 130
Привязка данных с помощью свойства DataSourceId 131
Форматирование данных при привязке 132
3.9.3. Колонки GridView 132
Автоматическая генерация колонок 132
Декларативное добавление колонок 132
Программное добавление колонок 133
Проблемы форматирования колонок 133
Колонки операций 133
Несколько кнопок в одной колонке 135
Подтверждение выполнения операции 135
Как отобразить картинку 135
Как отобразить и заголовок и картинку 136
3.9.4. Строки GridView 136
Получение номера строки в GridView 136
Подсветка строк при наведении курсора мыши 137
Удаление строки 138
Редактирование строк 139
Добавление строк 139
Подтверждение при удалении строки 139
3.9.5. Сортировка GridView (MS SQL) 141
3.9.6. Уменьшение размера ViewState 142
3.9.7. Событие выбора строк 142
3.9.8. Экспорт в Excel 147
3.9.9. Сортировка по нескольким столбцам 148
3.10. Элемент управления Repeater 148
3.10.1. Привязка списка объектов 148
3.10.2. Привязка списка строк 150
3.10.3. Вложенные Repeater 150
3.10.4. Операции с элементами Repeater 152
3.10.5. Цветные строки в Repeater 152
3.11. Календарь (Calendar) 153
3.11.1. Отображение расписания с помощью элемента Calendar 153
3.11.2. Валидация данных календаря 157
3.12. Реализация закладок (TabControl) 157
3.13. Кнопки 160
3.13.1. Изображение для запрещенной кнопки с картинкой 160
3.13.2. Задание кнопки по умолчанию 161
3.13.3. Как отключить у кнопки валидацию формы 161
3.13.4. Как задать клиентский обработчик кнопки 161
3.13.5. Как перейти на другую страницу после возврата страницы 161
3.13.6. Почему не вызывается метод Click у кнопки 161
3.13.7. Кнопка закрытия окна браузера 162
3.13.8. Запрет кнопки на время длительной операции 162
3.14. Отображение рекламных объявлений 163
Глава 4. Валидация
165
4.1. Варианты валидации 165
4.1.1. Обязательные поля 166
4.1.2. Проверка диапазона данных 166
4.1.3. Проверка формата данных 166
Примеры регулярных выражений 167
4.1.4. Сравнение значений 169
4.1.5. Сравнение дат календарей 169
4.1.6. Пользовательские процедуры валидации 171
4.1.7. Отображение итоговой информации о валидации 172
4.2. Установка фокуса на ошибку 173
4.3. Элементы, не вызывающие валидацию 174
4.4. Валидация групп полей 174
4.5. Проблемы валидации данных 175
4.5.1. Слишком строгие правила 175
4.5.2. Проблема кодировок 175
4.5.3. Валидация буквы е 176
4.5.4. Только клиентская валидация 176
4.6. Валидация переключателей (CheckBox) 177
4.7. Валидация чисел с плавающей точкой 178
4.8. Валидация перед переходом на другую страницу 178
4.9. Валидация без использования стандартных валидаторов 179
4.10. Клиентская валидация с помощью веб-методов 180
Глава 5. Отладка, тестирование, обработка исключений и ошибок
184
5.1. Проверка на запуск в отладочном режиме 184
5.2. Правила разработки для облегчения тестирования сайтов 184
5.2.1. Режим отладки 185
5.2.2. Тестирование при Windows-имперсонации 185
5.2.3. Тестирование рабочего процесса, зависящего от времени 185
5.2.4. Тестирование почтовой рассылки 186
5.3. Общие правила обработки исключений 187
5.3.1. "Не глотайте" исключения молча 187
5.3.2. Не обрабатывайте те исключения, которые не должны быть обработаны в данный момент 187
5.3.3. Обходитесь без исключений, если это возможно 188
5.3.4. Сообщайте информацию о коде с помощью исключений 188
5.3.5. Не пересоздавайте исключения заново 189
5.3.6. Не давайте пользователю приложения лишнюю информацию об исключениях 190
5.3.7. Используйте исключения, а не коды ошибок 190
5.3.8. Используйте иерархию исключений 192
5.4. Обработка ошибок в параметрах URL 193
5.5. Отладочная информация (трассировка) для ASP.NET 194
5.6. Оценка времени выполнения кода 195
5.6.1. Измерение с помощью TickCount (наименьшая точность) 195
5.6.2. Измерение с помощью Ticks (средняя точность) 195
5.6.3. Измерение с помощью QueryPerformance (высокая точность) 195
5.6.4. Измерение с помощью класса Stopwatch (C# 2.0) 196
5.7. Вывод сообщений в окно Output среды 196
5.8. Запись в Application Log 196
5.9. Создание своего Event Log 197
5.10. Обработка исключений на странице 199
5.11. Глобальная обработка исключений ASP.NET 199
5.11.1. Обработка через HTTP-модуль (IHttpModule) 199
5.11.2. Обработка через web.config 201
5.11.3. Обработка с помощью монитора здоровья 201
5.11.4. Обработка с помощью библиотеки ELMAH 202
5.12. Обнаружение причины перезагрузки сайта 203
5.13. Отключение перезагрузки сайта при изменениях в каталогах 203
5.14. Исключение при перенаправлении на другую страницу 204
5.15. Тестирование веб-страниц без веб-сервера 205
5.16. Отладка JS-кода 205
5.17. Сохранение запроса 206
Глава 6. Конфигурирование и конфигурационные файлы
207
6.1. Конфигурационный файл web.config 207
6.1.1. Общие сведения о web.config 207
6.1.2. Где найти класс ConfigurationManager 208
6.1.3. Можно ли в web.config использовать символы <, > и т. п. 208
6.1.4. Шифрование секций web.config 208
6.1.5. Шифрование строки подключения 208
6.1.6. Вынесение секции параметров во внешний файл 208
6.1.7. Вынесение секций во внешний файл 209
6.1.8. Нестандартный конфигурационный файл 209
6.1.9. Изменение web.config 215
6.1.10. Отключение модулей в web.config 216
6.2. Где хранить строку подключения к БД 217
6.3. Управление виртуальными директориями IIS 218
6.4. Шифрование с помощью DPAPI 222
6.5. Хранение паролей в памяти 223
6.6. Хранение паролей в файле конфигурации 224
Глава 7. Производительность
226
7.1. Не кэшируйте соединение с БД 226
7.2. Получение статистики о соединении с БД 227
7.3. Используйте DataReader для последовательного доступа к данным 227
7.4. Используйте хранимые процедуры 228
7.5. Управление буферизацией страниц 228
7.6. Используйте отдельные JS- и CSS-файлы 228
7.7. Отключайте режим отладки 228
7.8. Управление кэшированием страниц 229
7.8.1. Атрибут Location 230
7.8.2. Атрибут Duration 230
7.8.3. Атрибут VaryByParam 230
7.8.4. Атрибут VaryByControl 231
7.8.5. Атрибут VaryByHeader 232
7.8.6. Атрибут VaryByCustom 232
7.8.7. Использование класса HttpCachePolicy 234
7.8.8. Очистка кэша 235
7.8.9. Ограничения кэширования 236
7.9. Частичное кэширование 236
7.9.1. Кэширование элементов управления 236
7.9.2. Подстановка вне кэша 236
7.10. Создание статического кэша 237
7.11. Кэширование в ASP.NET 4.0 239
7.12. Использование кэша ASP.NET 240
7.12.1. Чем Cache отличается от Application 240
7.12.2. Добавление элементов в кэш 240
Простое добавление в кэш 241
Задание абсолютного времени устаревания 241
Задание скользящего времени устаревания 241
Задание зависимостей от другого элемента кэша 241
Задание зависимостей от файла или папки 242
Задание времени начала контроля зависимостей 242
Задание приоритетов освобождения 243
Обращение к элементам кэша 243
Глава 8. Работа с URL
244
8.1. Получение "чистого" пути к странице 244
8.2. Получение "чистого" пути к приложению 244
8.3. Чем URL отличается от URI 245
8.4. Разбор URL на составляющие 245
8.5. Преобразование относительного пути в абсолютный 246
8.6. Проверка использования защищенного протокола 246
8.7. Перенаправление на другую страницу 247
8.7.1. Постоянное перенаправление (код 301) 247
8.7.2. Перенаправление через определенный интервал времени 247
8.7.3. Чем Server.Transfer отличается от Response.Redirect 248
Ошибка "View State Is Invalid" 249
Почему Server.Transfer("page.html") дает пустую страницу? 249
Как распознать Response.Redirect и Server.Transfer 249
Выбор между Response.Redirect и Server.Transfer 249
8.7.4. Чем Server.Execute отличается от Server.Transfer? 250
8.7.5. Сравниваем Server.Transfer, Server.Execute и Response.Redirect 250
Вызываем Response.Redirect 251
Вызываем Server.Transfer 251
Вызываем Server.Execute 252
8.8. Управление созданием HTTP-обработчиков (IHttpHandler) 252
8.9. Можно ли задать расширение в диалоге выбора файла 254
8.10. Отобразить значок состояния ICQ-пользователя 254
8.11. Отобразить значок состояния Skype-пользователя 254
8.12. Получение относительного пути 254
8.13. Оптимизация ссылок (URL Rewriting) 255
8.13.1. Использование свойства PathInfo 256
8.13.2. Использование метода RewritePath 257
8.13.3. Использование IIS7 258
8.13.4. Использование web.config 258
8.13.5. Ссылки на картинки, скрипты и др. 259
8.13.6. Сравнение вариантов перезаписи ссылок 259
Глава 9. Пользователи, имперсонация, авторизация
261
9.1. Получение имени текущего пользователя 261
9.2. Программная имперсонация 261
9.3. Как получить IP-адрес клиента, открывшего сайт 263
9.4. Как получить культуру клиента, открывшего сайт 264
9.5. Как получить список групп домена, в которые входит пользователь 264
9.6. Сохранение данных пользователя и реализация IPrincipal 265
Глава 10. Библиотека JQuery
276
10.1. Базовые операции 276
10.1.1. Подключение библиотеки 276
10.1.2. Обработка событий страницы 276
10.1.3. Выбор элементов страницы 277
Обращение по клиентскому идентификатору 277
Выбор элементов по типу 277
Выбор элементов по классу 277
Специальные символы в идентификаторах 278
Выбор элемента в иерархии 278
Выбор дочерних элементов 278
Выбор элементов по атрибуту 278
Примеры 278
10.1.4. Проверка существования элемента 279
10.1.5. Метод click 280
10.1.6. Перебор элементов 280
10.1.7. Отмена стандартного обработчика 280
10.1.8. Обработка возврата формы (submit) 281
10.1.9. Генерация возврата формы (submit) 281
10.1.10. Проверка принадлежности 281
10.1.11. Установка и удаление атрибутов элементов 282
10.1.12. Загрузка данных из XML-файла 282
Проблема в браузере IE 283
10.1.13. Чем html() отличается от text() 284
10.2. Элементы управления 284
10.2.1. Разрешение и запрещение элементов 284
10.2.2. Отметка опции (checkbox) 284
10.2.3. Получение выбранного элемента выпадающего списка 285
10.2.4. Получение выбранного переключателя (radiobutton) 285
10.2.5. Изменение атрибутов при подведении курсора 285
10.3. Плагины 286
10.3.1. Таблица jqGrid 286
10.3.2. Графики jqPlot 287
10.3.3. Преобразование таблиц в графики 288
10.3.4. Таблица tablesorter 288
10.3.5. Сортировка таблиц перетаскиванием 289
10.3.6. HTML-редакторы текста 289
10.3.7. Подсказки qTip 289
10.3.8. Подсказки Easy Tooltip 289
10.3.9. Кнопки рейтинга 290
10.3.10. Загрузка файлов 290
10.3.11. Обрезка изображений 290
10.3.12. Меню в стиле MS Office 290
10.3.13. Ненавязчивые окна jGrow 291
10.3.14. Всплывающие подсказки BeautyTips 291
10.3.15. Меню в стиле Apple Mac 291
10.3.16. Карусель MovingBoxes 292
10.3.17. Меню Garage Door 292
10.3.18. Подключение Google Maps 293
10.3.19. Модуль валидации полей 293
10.3.20. Вращение предметов 293
10.4. JQuery CDN 293
Глава 11. Получение данных из Интернета
295
11.1. Получение файла из Интернета 295
11.2. Получение любых данных из Интернета 296
11.3. Получение веб-страницы 296
11.4. Использование прокси-сервера 297
11.5. Получить текущий курс валюты 297
11.6. Создание простого RSS-канала 297
11.7. AJAX 301
11.7.1. Что такое AJAX? 301
11.7.2. Получение серверных данных без AJAX 308
11.7.3. Вывод сообщений с помощью UpdatePanel 311
11.7.4. Вызов серверного метода с помощью AJAX 313
Глава 12. Базы данных, привязка данных
316
12.1. Привязка данных 316
12.1.1. Сложная привязка данных с помощью DataBinder 316
12.1.2. Зависимая привязка данных 317
12.1.3. Привязка XML-данных 318
12.1.4. Привязка списка данных к выпадающему списку 320
12.1.5. Привязка перечислений (enum) 321
Добавление дополнительных элементов 322
Расширенная привязка перечислений 322
Вычисление имен значений перечисления 324
12.1.6. Привязка данных Access 326
12.1.7. Привязка данных к списку 326
12.1.8. Привязка данных с помощью LINQ 327
12.1.9. Привязка данных с разбивкой на страницы 328
12.2. Передача списка в SQL 331
12.3. Создание ссылки на файл, сохраненный в БД 332
12.3.1. Код обработчика 333
12.3.2. Регистрация обработчика 334
12.3.3. Код обработчика (второй вариант) 335
12.3.4. Структура БД для хранения файлов 336
12.3.5. Базовые классы 336
12.3.6. Загрузка файлов в БД 338
12.3.7. Получение файлов из БД 340
12.3.8. Создание ссылки на файл в БД 342
12.3.9. Типы файлов 344
12.3.10. Определение типа файла по расширению 344
12.3.11. Список поддерживаемых браузером типов 345
12.3.12. Регистрация своего расширения файла 346
12.3.13. Определить формат файла 346
12.3.14. Можно ли использовать в имени файла русские буквы? 348
12.3.15. Указание размера файла 348
12.3.16. Некоторые ограничения 348
12.4. Что следует использовать для закрытия соединения — Close или Dispose? 349
12.5. Получение индекса объекта после добавления его в таблицу MS SQL 349
Глава 13. Сессия, куки и хранение данных
350
13.1. Как программно завершить сессию 350
13.2. Сообщение о завершении сессии 350
13.3. Сжатие данных в сессии (ASP.NET 4.0) 351
13.4. Отображение окна сообщения о завершении сесии 351
13.5. Непредсказуемое поведение сессии 352
13.6. Почему не вызывается Session_End 352
13.7. Подсчет числа посетителей сайта 352
13.8. Как получить доступ к сессии обычного класса 356
13.9. Как получить доступ к сессии из HttpHandler 356
13.10. Использование cookies 356
13.11. Что плохого в использовании сессий? 357
13.12. Настройка хранения сессий 358
13.13. Создание общей сессии между ASP- и ASP.NET-приложениями 359
13.14. Как не допустить закрытия сессии 359
13.15. Передача между страницами значений серверного элемента управления 361
13.16. Как перехватить загрузку и сохранение ViewState 363
13.17. Управление размером ViewState 363
13.18. Сжатие ViewState 364
13.19. Хранение ViewState на сервере 366
13.20. Управление ViewState в ASP.NET 4.0 367
Глава 14. Защита данных
368
14.1. Шифрование конфигурации 368
14.1.1. Шифрование строки подключения 368
14.1.2. Шифрование секций web.config 369
14.1.3. Программное шифрование секций web.config 370
14.2. "Зашитые" пароли 370
14.3. Защита от внедрения в SQL (SQL Injection) 370
14.4. Защита от внедрения в XML (XML Injection) 373
14.5. Защита от внедрения в строки запуска (DOS Injection) 373
14.6. Защита от внедрения кода в HTML (XSS) 374
14.6.1. Проверка подверженности сайта XSS 376
14.6.2. Защита от XSS 376
14.6.3. Защита от XSS в ASP.NET 2.0 376
14.6.4. Библиотека Microsoft AntiXss 376
14.7. Ошибки в алгоритмах 377
14.8. Защита от разглашения информации 377
14.8.1. Забытые комментарии 377
14.8.2. Сообщения об ошибках 377
14.8.3. Трассировка 378
14.9. Защита паролей, хранящихся в БД 378
14.10. Защита от отказа в обслуживании (DOS) 379
14.11. Защита от перебора данных 380
14.11.1. Слабые пароли 380
14.11.2. Пароли по умолчанию 380
14.11.3. Блокировка подбора 381
14.11.4. Замедление проверок 381
14.11.5. Время жизни пароля 381
14.11.6. Очевидные ответы 382
14.12. Пассивная защита 382
14.13. Отсутствие автозакрытия сессии 382
14.14. Защита от перебора параметров 383
14.15. Защита файлов ресурсов 383
14.16. Защита ссылок 384
14.17. Создание CAPTCHA 385
14.18. Защита без CAPTCHA 401
Глава 15. Данные и отчеты MS Excel для веб-приложений
403
15.1. Способы взаимодействия с MS Excel 403
15.1.1. Использование библиотеки MS Excel 404
15.1.2. Формат CSV 405
15.1.3. Формат HTML 406
15.1.4. Формат XML 406
15.1.5. Использование OLE DB-провайдера 406
15.1.6. Формат Office 2008 406
15.1.7. Бесплатные библиотеки 407
15.1.8. Платные библиотеки 407
15.2. Лицензионные ограничения MS Excel 407
15.3. Библиотека MS Excel 408
15.3.1. Раннее и позднее связывание 408
15.3.2. Сборки взаимодействия 408
15.3.3. Объектная модель Excel 410
Как найти нужные объекты 411
15.3.4. Раннее связывание 412
15.3.5. Позднее связывание 418
Как определять значения констант 423
15.3.6. Создание шаблона отчета 424
15.3.7. Быстрая вставка данных 428
15.4. Excel CSV, HTML и XML 429
15.4.1. Формат Excel/CSV 429
15.4.2. Формат Excel/HTML 432
15.4.3. Формат Excel/XML 435
15.4.4. Объединенный формат HTML и XML 443
15.4.5. Генерация Excel-документов в ASP.NET 445
15.5. Использование OLE DB 451
15.5.1. OLE DB-провайдер 451
15.5.2. OLE DB для платформы x64 460
15.6. Формирование файлов в формате Excel 2008 460
15.6.1. Кратко о формате Office 2008 460
15.6.2. Распаковка документа 462
15.6.3. Создание документа 464
15.6.4. Запись данных в документ 468
15.6.5. Использование блоков кода Microsoft 473
15.6.6. Использование утилиты DocumentReflector 477
15.6.7. Использование утилиты OpenXmlDiff 478
15.6.8. Описание констант MS Office 2008 479
Глава 16. Инструменты и библиотеки
480
16.1. Инструменты 480
16.1.1. Fiddler 480
16.1.2. Firebug 481
16.1.3. YSlow 482
16.1.4. Wireshark 482
16.1.5. SQL Server Profiler 484
16.1.6. Анализатор ссылок Xenu 484
16.1.7. HttpWatch 485
16.1.8. Отладчик Web Development Helper 485
16.1.9. Internet Explorer Developer Toolbar 485
16.1.10. Сайт Site-Perf 486
16.1.11. Doloto 487
16.1.12. Редактор IxEdit 487
16.1.13. jQueryPad 488
16.1.14. CSS-утилиты 489
16.1.15. UrlScan 489
16.1.16. Microsoft Ajax Minifier 489
16.2. Редакторы HTML-текста 490
16.2.1. CKEditor 490
16.2.2. Damn Small Rich Text Editor 490
16.2.3. TinyMCE 491
16.2.4. WYMeditor 491
16.2.5. widgEditor 491
16.2.6. jwysiwyg 492
16.2.7. NicEdit 492
16.2.8. Whizzywig 493
16.2.9. Yahoo! 493
16.2.10. markItUp! 493
16.2.11. elRTE 494
16.3. Архиваторы 494
16.3.1. Библиотека SharpZipLib 494
16.3.2. Библиотека CAKE3 495
16.4. Таблицы 495
16.4.1. Плагины jQuery 495
16.4.2. Таблица AjaxDataControl 495
16.5. Графики и диаграммы 496
16.5.1. Плагины jQuery 496
16.5.2. Графики и диаграммы MS Chart 496
16.5.3. Графики Google Chart 497
16.6. Разное 499
16.6.1. Библиотека Google Gears 499
16.6.2. CDN-сервисы 499
Приложение. Содержимое компакт-диска 501
Предметный указатель 504
XVIII Оглавление Оглавление XVII
|