Реферат: Пинягина о. В

КАЗАНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
ФАКУЛЬТЕТ ВЫЧИСЛИТЕЛЬНОЙ МАТЕМАТИКИ И КИБЕРНЕТИКИ

КАФЕДРА ЭКОНОМИЧЕСКОЙ КИБЕРНЕТИКИ










ПИНЯГИНА О.В.


Разработка

Web-АРМ

на ASP.NET


УДК 004.738.5

ББК 32.973.26-018.02


Печатается по постановлению редакционно-издательского совета

факультета вычислительной математики и кибернетики

Казанского государственного университета


Рецензенты:

…………………………………..

………………………………….


Пинягина О.В. Разработка Web-АРМ на ASP.Net / О.В. Пинягина – Казань: Казанский государственный университет, 2010. – ??? с.


Данное учебно-методическое пособие разработано в поддержку курса "Информационные технологии в экономике" и предназначено для проведения компьютерных лабораторных занятий и для самостоятельной работы студентов, обучающихся по специальности 06.18.00 “Математические методы в экономике”.

В пособии поэтапно рассматривается процесс разработки автоматизированных рабочих мест для сотрудников библиотеки на базе технологии ASP.Net и СУБД SQL server.

Электронный ресурс по данному курсу находится на сайте кафедры экономической кибернетики Казанского государственного университета по адресу: http://kek.ksu.ru/EOS/ITE/index.html


 Казанский государственный

университет, 2010

 Пинягина О.В., 2010
Содержание



Содержание 3

Предисловие 4

^ Этап 1. Разработка концептуальной схемы web-сайта 6

7

8

8

9

Этап 2. Разработка структуры базы данных 12

ER-модель 12

Реляционная модель 13

Конфигурирование приложения 14

Создание таблиц в SQL server 17

Обзор Asp.Net 20

22

Этап 3. Разработка системы регистрации и авторизации пользователей 23

Авторизация сотрудников 23

Личный кабинет сотрудника 25

Регистрация читателей 28

Авторизация читателей 33

Этап 4. Разработка мастер-страниц 35

Этап 5. Разработка сценариев поиска и просмотра данных 39

Сценарий поиска и просмотра читателя в АРМ библиотекаря 39

Сценарий поиска и просмотра книг в АРМ библиотекаря 46

^ Этап 6. Разработка сценариев добавления, редактирования и удаления данных 51

Управление издателями и категориями 51

Регистрация новых книг 54

Поиск книг и создание экземпляров 56

Выдача и прием книг 62

^ Этап 7. Выгрузка и загрузка данных в формате XML 64

Загрузка данных из XML-файла в базу данных 64

Выгрузка данных в XML-файл 66

Вопросы и ответы 69

71

Литература 72
Предисловие

В данном учебном пособии подробно и поэтапно рассматривается процесс разработки Web-сайта, представляющего собой группу автоматизированных рабочих мест для сотрудников библиотеки на базе технологии ASP.Net и СУБД SQL server. Процесс разработки АРМ включает следующие этапы:

разработка концептуальной схемы сайта;

разработка структуры базы данных;

разработка системы регистрации и авторизации пользователей;

разработка мастер-страниц;

разработка сценариев поиска и просмотра данных;

разработка сценариев добавления, редактирования и удаления данных;

выгрузка и загрузка данных в формате XML.

Основная цель учебного пособия – помочь в изучении технологии ASP.Net на примере конкретного практического приложения.

Предполагается, что читатель:

успешно изучил курс "Базы данных" и имеет представление о проектировании баз данных, языке SQL и СУБД SQL server;

успешно изучил курс "Интернет-технологии" и имеет представление о языке HTML, архитектуре динамических Интернет-приложений, клиент-серверном взаимодействии web-сервера и браузера;

успешно изучил язык C# как основу технологии .Net в рамках курса «Объектно-ориентированное программирование» и имеет опыт разработки «настольных» .Net-приложений.

Эти технологии являются обязательными для понимания основ ^ ASP.Net и разработки на этой базе практических web-приложений.

Следует отметить, что ASP.Net представляет собой целый набор разнообразных современных динамично развивающихся технологий, и охватить их все в рамках одного курса не представляется возможным. Наша программа-минимум – изучить основы. Заинтересованный читатель может обратиться к списку литературы, приведенному в конце пособия.

В качестве среды разработки будем использовать ^ Visual Studio 2005 и SQL server 2005 express. Среда разработки Visual Studio 2005 содержит встроенный web-сервер для отладки проектов, его мы и будем использовать. Устанавливать полнофункциональный web-сервер MS IIS для отладки нет необходимости, он нужен только для развертывания сайта в Интернет.

Для создания проекта в VS выберите ^ File – New – Web site – ASP.NET Website. Путь к сайту может быть любым, нежелательно только в имени пути использовать русские буквы. Зададим, например, путь C:\WebSite. Заготовка для нашего сайта создана.

На вкладке Solution мы видим структуру нашего проекта:

каталог App_data (пока пустой),

главная страница default.aspx (и файл C#-кодов default.aspx.cs).

Запустим проект на выполнение (в режиме Debug!) – мы увидим, как в браузере Internet Explorer откроется главная страница нашего сайта. После запуска в проекте появится файл конфигурации web.config.


^ Задание для самостоятельной работы. Этап 0.

Выберите предметную область – область человеческой деятельности, для которой вы будете разрабатывать АРМ. Выбирайте такую тему, которую вы хорошо представляете себе или, по крайней мере, знаете источник, у которого можно проконсультироваться. Можете выбрать тему, по которой вы создавали проект в рамках курса «Базы данных».

Очевидно, что разрабатываемый проект носит, главным образом, учебный характер, но полученный результат должен быть достаточно правдоподобным.

Создайте в Visual Studio заготовку для вашего сайта.
^ Этап 1. Разработка концептуальной схемы web-сайта


Разработка любого проекта начинается с формулировки требований. Итак, сформулируем в произвольной форме постановку нашей задачи.

Требуется создать Web-сайт, представляющий собой группу автоматизированных рабочих мест для сотрудников библиотеки. Основная цель библиотеки – выдача книг читателям. Для осуществления этой цели нужно вести базу книг, учитывать новые поступления, списывать ветхие или утерянные экземпляры, вести учет выдач и возврата книг читателям, рассылать напоминания о просроченных книгах и т. п.

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

сотрудник отдела комплектования,

сотрудник книгохранилища,

библиотекарь;

администратор.

Кроме того, выделим специфическую роль «читатель» (некий «внешний» пользователь), для которой создадим отдельную таблицу.

Сотрудник отдела комплектования занимается учетом новых поступлений. С точки зрения нашей системы он должен создавать новые записи о книгах и заносить в базу данных подробную информацию о них.

Сотрудник книгохранилища получает требования на выдачу книг и регистрирует факт снятия книги с полки и возвращения на полку.

Библиотекарь занимается регистрацией новых читателей, а также выдачей им лично в руки и возвратом книг, регистрацией просрочки возврата, регистрацией потерянных книг, изменением информации о читателях и удалением читателей из базы (например, по окончании учебы).

Каждый пользователь имеет доступ к своей личной регистрационной информации (кроме изменения логина).

Администратор занимается регистрацией пользователей и настройкой параметров приложения.

Читатели могут просматривать каталог книг, проводить поиск книг и оставлять заявки на нужные им книги. Кроме того, они могут просматривать список взятых ими книг.

Теперь коротко перечислим, какая информация должна храниться в базе данных. Для каждой книги должны быть представлены название, автор(ы), цена, количество страниц, внешний вид обложки, ISBN (международный код), издательство, категория, год издания, место хранения, состояние книги. Следует учесть, что в библиотеке часто бывает несколько экземпляров одной и той же книги. Книги также различаются сроком выдачи – учебную литературу выдают сроком на учебный год, прочие книги – на месяц.

Читатель характеризуется фамилией, именем, отчеством, паспортом, датой рождения, адресом – почтовым и электронным. Для авторизации читателю нужны логин и пароль. Читатель может оставлять заявку на нужную ему книгу.

Факт выдачи книги характеризуется датой выдачи, сроком возврата, датой фактического возврата, информацией о том, кто выдал и кто принял книгу.

Для каждого пользователя изобразим основные режимы работы в виде схем. Обратите внимание, что работа каждого сотрудника начинается с авторизации.

Схема 1. Основные режимы работы читателя






Главная страница: авторизация

ое меню страница

Просмотр заявок

Личные данные

Поиск

книги

Просмотр взятых книг


Заявка на книгу







Схема 2. Основные режимы работы сотрудника отдела комплектования






Главная страница: авторизация

ое меню страница


^ Работа с книгами
Создание книги Поиск* и просмотр книги Редактирование книги
Создание экземпляра

^ Поиск и просмотр экземпляра Списание экземпляра



^ Редактирование экземпляра




В языке UML подобные схемы называются Use case – варианты использования. Пунктиром на схеме отмечен автоматический возврат в соответствующий режим работы после завершения редактирования.


Схема 3. Основные режимы работы сотрудника книгохранилища






Обработка требования – выдача книги



Главная страница: авторизация

ое меню страница

^ Поиск*

книги


Список книг на выдачу



^
Список книг на возврат



Прием возвращенной книги


_____________________________________________________________________________

*Обратите внимание, что в современных библиотеках сотрудники имеют возможность работать со штрих-кодами на читательских билетах и книгах. Это существенно ускоряет процедуру поиска.

Схема 3. Основные режимы работы библиотекаря






Главная страница: авторизация

ое меню страница


Работа с читателями

Работа с книгами







^ Регистрация читателя

Поиск и просмотр читателя

Редактирование

Поиск и просмотр книги



^
Выдача

Возврат

Приведем эскизы основных страниц сайта.

Главная страница нашего сайта может иметь примерно такой вид:




Поскольку эта страница загружается по умолчанию, оставим ее название default.aspx, хотя содержание страницы представляет собой исключительно HTML-код, без каких-либо серверных команд.

АРМ библиотекаря:




АРМ сотрудника отдела комплектования:




^ Задание для самостоятельной работы. Этап 1.

В произвольной форме разработайте концептуальную схему вашего проекта. Коротко опишите требования к системе, определите роли пользователей и режимы их работы. В рамках вашего проекта должно быть не менее 2 ролей пользователей. База данных должна содержать не менее 5 таблиц. Имейте в виду, что пользователями вашей системы должны быть именно сотрудники некоторого предприятия. Интерфейс для «внешнего» пользователя (покупателя, читателя, клиента) разрабатывать не обязательно.

^ Этап 2. Разработка структуры базы данных ER-модель
На основе описания требований к проекту составим модель сущностей–связей для базы данных.



Сущность «книга» характеризуется уникальным номером ISBN, автором, названием, годом издания, ценой, количеством страниц, обложкой. Атрибуты книги «издательство» и «категория» выделим в отдельные сущности-справочники.

В библиотеке может быть несколько экземпляров одной и той же книги. Чтобы избежать дублирования информации, выделим отдельную сущность «экземпляр», которая связана с книгой связью многие-к-одному. Свойство «статус» может принимать значения «в хранилище», «на абонементе», «выдан». Свойство «состояние» может принимать значения «годен», «списан», «утерян».

Сущность «читатель» содержит атрибуты: номер читательского билета, ФИО, адрес, телефон, e-mail, номер паспорта, логин, пароль.

Сущность «сотрудник» содержит атрибуты: номер сотрудника, ФИО, адрес, телефон, e-mail, должность, логин, пароль.

Для фиксации информации о заявках и выдачах книг создадим слабую сущность «заявка(выдача)», которая будет содержать дату заявки, а также информацию о выдаче книги: дату выдачи, срок возврата, фактическую дату возврата, логин библиотекаря, выдавшего и принявшего книгу.

^ Реляционная модель

Преобразуем ER-модель в реляционную модель. Получим следующие таблицы.


Книга(ISBN, Название, Автор, Цена, Год, Страницы, Обложка, Тип, ^ НомИзд, НомКат) - ISBN будет внешним ключом для таблицы Экземпляр.


Издатель(НомИзд, НазИзд) - столбец НомИзд является внешним ключом для таблицы Книга.


Категория(НомКат, НазКат) - столбец НомКат является внешним ключом для таблицы Книга.


Экземпляр (НомЭкз, Статус, Состояние, ISBN) - НомЭкз будет внешним ключом для таблицы Заявка.


Сотрудник (Логин, Пароль, ФИОСотр, АдрСотр, ТелефСотр, E-mailСотр, Должность) – на самом деле таблица пользователей-сотрудников (точнее, несколько таблиц) автоматически создается в проекте ASP.Net, об этом мы будем говорить подробнее в дальнейшем, а пока примем за первичный ключ сотрудника его Логин.


Читатель(НомБилета, Логин, Пароль, ФИОЧит, Паспорт, ДатаРожд, АдрЧит, ТелефЧит, E-mailЧит) - логин тоже является уникальным, но для удобства сделаем первичным ключом номер билета.


ЗаявкаВыдача(НомБилета, НомЭкз, ДатаЗаявки, ДатаВыдачи, СрокВозврата, ДатаВозврата, ЛогинВыдал, ЛогинПринял) – слабая сущность в составе своего первичного ключа содержит все первичные ключи своих сильных сущностей.
^ Конфигурирование приложения

Для создания базы данных воспользуемся визуальными возможностями Visual Studio, предусмотренными для администрирования приложения. Выберем Web Site – ASP.Net Configuration – Provider – Select a single provider for all site management data – AspNetSqlProvider, и щелкнем по гиперссылке test. Получим сообщение «Successfully established a connection to the database».

Теперь настроим тип аутентификации. Здесь есть два варианта: либо использовать учетные записи ^ Windows, либо создавать и хранить пользователей, роли и полномочия в нашей собственной базе данных. Используем второй вариант. Выберите Security – Select authentication type – From the internet и нажмите на кнопку Done. В папке App_data нашего проекта появится файл aspnetdb.mdf – это и есть файл базы данных SQL server.

Теперь будем создавать роли: Security – Enable roles – ^ Create or Manage roles. Создадим 3 роли – librarian, collector, warehouse. Роль читателя будем обрабатывать отдельно.

Для каждой роли нужно назначить права доступа. Сначала в нашем проекте создадим для каждой роли отдельную папку, куда в дальнейшем будем помещать файлы сценариев (если к каким-то сценариям должны иметь доступ разные роли, для таких сценариев тоже можно создать отдельную папку). Затем на вкладке Security будем использовать ссылки Create access rules и Manage access rules. Здесь можно разрешать (allow) или запрещать (deny) доступ разных пользователей и ролей к папкам. Например, для папки librarian (библиотекарь) назначение прав доступа будет выглядеть следующим образом:





Права доступа назначаются в этой таблице снизу вверх. По умолчанию разрешается доступ для всех пользователей (этот режим невозможно отменить, так как он наследуется из родительского каталога). Мы сначала запрещаем доступ для всех пользователей, а затем разрешаем доступ для библиотекаря. Таким образом, кроме библиотекаря, никто другой не сможет запустить сценарии из этого каталога.

При попытке доступа к этому каталогу из любой другой роли будет выполняться автоматическая переадресация на страницу авторизации (login.aspx).

Назначенные нами права доступа сохраняются в файле конфигурации web.config соответствующего каталога и выглядят примерно так:










Теперь создадим, по крайней мере, по одному пользователю для каждой роли. Обратите внимание, что по умолчанию пароль должен содержать не менее 7 символов, и не менее чем одним символ должен быть небуквенным и нецифровым. Не забудьте привязать пользователя к роли, т.е., отметить соответствующий флажок.




У вас может возникнуть вопрос – а где же, собственно, будут сохраняться все эти данные? Для них ^ Visual Studio автоматически создает необходимые таблицы. Откройте в проекте вкладку Server и посмотрите, какие таблицы имеются по умолчанию в нашей базе данных:

роли хранятся в таблице aspnet_Roles,

пользователи – в таблицах aspnet_Users и aspnet_Membership,

связь пользователей с ролями – в таблице apsnet_UsersInRoles.

Вы, наверное, обратили внимание, что у пользователей нет ни ФИО, ни должности, ни адреса? Для этих и прочих дополнительных полей мы будем в дальнейшем использовать такое понятие, как Profile. Отложим этот вопрос до следующего этапа.

^ Создание таблиц в SQL server
Нам осталось создать остальные нужные нам для работы таблицы. Выберите базу данных, папку Tables, щелкните правой кнопкой мыши, выберите Add new table и создавайте структуру таблиц в визуальном режиме. Для задания первичного ключа выберите нужное поле таблицы (для составного ключа нужно выделить несколько полей), щелкните правой кнопкой мыши и выберите пункт «Set primary key». Рядом с названием появится изображение ключика.

Наши таблицы имеют следующую структуру:


Categories

^ Имя столбца

Тип (размер)

Дополнительно

Id_cat

Int

Identity, первичный ключ

Name_cat

Nchar(100)

Not null, default=1


Publishers

^ Имя столбца

Тип (размер)

Дополнительно

Id_publ

Int

Identity, первичный ключ

Name_publ

Nchar(100)

Not null, default=1


Books

^ Имя столбца

Тип (размер)

Дополнительно

ISBN

Nchar(20)

Not null, первичный ключ

Name_book

Nchar(100)

Not null

Author

Nchar(100)

Not null

Price

Decimal(6,2)

Not null

Year

Decimal(4,0)

Not null

Pages

Int

Not null

Type

Smallint

Not null, 1 – учебная, 0- прочая

Id_cat

Int

Not null

Id_publ

Int

Not null

Image

Nchar(20)

Not null


Items

^ Имя столбца

Тип (размер)

Дополнительно

Id_item

Int

Identity, первичный ключ

State

Int

Not null, 0- годен, 1- списан, 2 -утерян.

Status

Int

Not null, 0 - в хранилище, 1 - на абонементе, 2 – на руках

ISBN

Nchar(20)

Not null

Для удобства заполнения состояния и местонахождения экземпляра книги создадим вспомогательные таблицы State и Status

State

^ Имя столбца

Тип (размер)

Дополнительно

Id_state

Int

Первичный ключ

Name_state

Nchar(20)

Not null


Status

^ Имя столбца

Тип (размер)

Дополнительно

Id_status

Int

Первичный ключ

Name_status

Nchar(20)

Not null


Readers

^ Имя столбца

Тип (размер)

Дополнительно

Id_reader

Int

Identity, первичный ключ

Login

Nchar(10)

Not null

Password

Nchar(10)

Not null

FIO_reader

Nchar(50)

Not null

Passport

Numeric(10)




DateBird

Datetime




Addr_reader

Nchar(100)




Tel_reader

Nchar(20)




Email_reader

Nchar(20)

Not null


Orders

^ Имя столбца

Тип (размер)

Дополнительно

Id_reader

Int

Not null, часть первичного ключа

Id_item

Int

Not null, часть первичного ключа

Date_order

Datetime

Not null, часть первичного ключа

Date_get

Datetme




Date_return

Datetime




Deadline

Datetime




Login_give

Nchar(10)




Login_take

Nchar(10)





^ Задание для самостоятельной работы. Этап 2.

Разработайте для вашей базы данных ER-модель, реляционную модель, создайте таблицы в SQL server. Через интерфейс администратора настройте конфигурацию сайта, создайте роли, пользователей, назначьте им права доступа.

^ Обзор Asp.Net

Как читателю уже известно, ASP.NET – это новая технология для создания серверных Web-приложений компании Microsoft. Она входит в состав платформы Microsoft .Net Framework, которая представляет собой набор тесно связанных друг с другом новых революционных технологий, начиная с технологии для получения доступа к базам данных и заканчивая технологией для создания распределенных приложений. ASP.NET является одним из самых важных компонентов .NET Framework и позволяет разрабатывать современные высокопроизводительные Web-приложения и Web-службы.


^ Семь важных фактов об ASP.NET [1]

1. ASP.Net интегрирована с .Net Framework.

Среда .Net Framework содержит обширную коллекцию классов, структур, интерфейсов – более 7000 типов. Они сгруппированы в пространства имен. Интересно отметить, что способ использования классов в ASP.NET ничем не отличается от способа применения их в любом другом типе приложения .NET (Windows-приложение, Windows-служба, консольное приложение и т.п.)

^ 2. ASP.NET компилируется, а не интерпретируется.

Приложения ASP.NET всегда компилируются – фактически невозможно выполнить код C# или VB.NET без его предварительной компиляции.

В действительности эти приложения проходят два этапа компиляции. На первом этапе код C# (или другого языка) компилируется в код промежуточного языка под названием Microsoft Intermediate Language (MSIL, или IL). Этот этап может произойти автоматически при первом запросе страницы, или его можно выполнить заранее. Скомпилированный файл с кодом IL называется сборкой.

Второй этап компиляции наступает непосредственно перед фактическим выполнением страницы. На этом этапе код IL компилируется в низкоуровневый машинный код. Этот этап называют также Just-in-time компиляцией и он проходит одинаково для всех приложений .NET.

^ 3. ASP.NET поддерживает несколько языков.

Это языки Visual Basic, Visual C#, Visual J# (в Visual Studio 2005). Какой бы язык не использовал разработчик .NET, код все равно компилируется в MSIL. Фактически MSIL – это единственный язык, который понимает среда выполнения Common Language Runtime.

^ 4. ASP.NET функционирует внутри исполняющей среды CLR.

Возможно, наиболее важный аспект, касающийся ASP.NET – это ее функционирование внутри исполняющей среды CLR. Основные преимущества CLR: автоматическое управление памятью и сборка мусора, безопасность типов, понятие метаданных, структурированная обработка ошибок, многопоточность.

^ 5. ASP.NET является объектно-ориентированной.

Разработчик может в полной мере использовать многочисленные классы .NET Framework, а также разрабатывать собственные.

Один из лучших примеров объектно-ориентированного мышления в ASP.NET можно найти в так называемых «серверных элементах управления». Серверные элементы управления представляют собой инкапсуляцию в миниатюре. Разработчики могут программно манипулировать объектами управления с использованием кода для настройки их внешнего вида, предоставления данных для отображения и даже реакции на события. Низкоуровневые подробности HTML «спрятаны за сценой». Вместо того чтобы вынуждать разработчика писать «сырой» HTML вручную, объекты управления преобразуются в HTML по завершении визуализации страницы. Таким образом, ASP.NET предлагает серверные элементы управления в качестве способа устранения низкоуровневых подробностей программирования на HTML и HTTP.

^ 6. ASP.NET поддерживает множество устройств и браузеров.

Одна из самых сложных проблем для Web-разработчиков – совместимость разрабатываемого приложения с большим количеством современных браузеров. Различные браузеры, версии и конфигурации по-разному поддерживают HTML. В ASP.NET серверные элементы управления способнее генерировать HTML-код, адаптируясь к возможностям клиента.

^ 7. ASP.NET легко развертывается и конфигурируется.

Еще одной сложной проблемой для разработчиков является развертывание готового приложения на реальном web-сервере. Необходимо не только переместить файлы Web-страниц, базы данных и компоненты, но также повторно создать множество параметров конфигурации. В ASP.NET этот процесс существенно упрощен. Развертывание осуществляется обычным копированием. Большинство установок конфигурации приложения или его отдельных каталогов хранятся в специальных файлах ASP.NET web.config. Этот файл содержит иерархически сгруппированные настройки приложения, хранимые в удобочитаемом формате XML, который можно редактировать с использованием простого текстового редактора, подобного Notepad.

Итак, приступим непосредственно к разработке нашего ASP.NET-приложения.


^ Этап 3. Разработка системы регистрации и авторизации пользователей Авторизация сотрудников

Наших сотрудников регистрирует администратор через служебный web-интерфейс, поэтому начнем сразу с системы авторизации сотрудников. На главной странице нашего сайта есть гиперссылка «вход для сотрудников», которая ссылается на файл login.aspx. Создадим этот файл: File – New – File, изменим имя файла на login.aspx и обратим внимание на флажок «Place code in separate file». Этот флажок означает, что на самом деле будет создан еще и файл login.aspx.cs, в который мы будем помещать код программы на C# - функции-обработчики, выполняемые на серверной стороне.

По умолчанию созданный .aspx-файл содержит тег



который представляет собой так называемую «серверную форму» - то есть объект, для которого можно задавать функции-обработчики, выполняемые на сервере перед отправкой в браузер. По умолчанию сценарий вызывает сам себя. Запомните, что в пределах одной web-страницы можно разместить только одну серверную форму – иначе возникнет ошибка компиляции. Обычных HTML-форм можно размещать сколько угодно.

Выберем на вкладке ^ Toolbox секцию Login, выберем в этой секции объект Login и поместим на нашу форму. Он выглядит (в режиме Design) следующим образом:




а его код выглядит так:





Очевидно, этот объект следует подкорректировать, хотя бы для замены надписей на русские. Для этого щелкнем правой кнопкой на объекте и выберем пункт «Convert to template». Теперь можно изменять составные части объекта. Используйте для этого окно Properties.

Если мы теперь заглянем в код страницы, то теперь увидим там более подробные теги. Например, теги для имени пользователя будут выглядеть так





Логин:





*





Здесь сначала создается метка , затем текстовое поле , а затем специальный объект для проверки непустоты этого поля: . Этот объект проявит себя, если пользователь не заполнит поле имени и нажмет кнопку Log In. Кстати, эта проверка выполняется на клиентской стороне – сервер генерирует для этого специальные клиентские обработчики.

Обработку ошибок объект-логин берет на себя. А вот в случае успешной авторизации обработку придется написать самим. Если сотрудник успешно авторизован, то его следует переадресовать на главную страницу АРМ, соответствующего его роли. Для этого в файле login.aspx.cs зададим обработку для события загрузки страницы:


protected void Page_Load(object sender, EventArgs e)

{

if (System.Web.HttpContext.Current.User.Identity.IsAuthenticated)

{

if(System.Web.HttpContext.Current.User.IsInRole("librarian"))

Response.Redirect("~/librarian/Default.aspx");

else if

(System.Web.HttpContext.Current.User.IsInRole("warehouse"))

Response.Redirect("~/warehouse/Default.aspx");

else if

(System.Web.HttpContext.Current.User.IsInRole("collector"))

Response.Redirect("~/collector/Default.aspx");

}

}


Здесь сначала выполняется проверка, аутентифицирован ли пользователь. Если да, то проверяем, относится ли пользователь к одной из трех наших ролей. В случае положительного ответа выполняем перенаправление с помощью объекта Response – это специальный объект, который инкапсулирует информацию об ответе сервера браузеру.

Для выхода из авторизованного режима создадим очень простой сценарий. Он не имеет никаких визуальных элементов и содержит только единственный обработчик загрузки страницы:

protected void Page_Load(object sender, EventArgs e)

{

FormsAuthentication.SignOut();

Session.RemoveAll();

Session.Clear();

Response.Redirect("default.aspx");

}


В этом обработчике мы выходим из авторизованного режима и выполняем переадресацию на главную страницу сайта.

Примечание: для неавторизованных пользователей любая попытка попасть на защищенную страницу приводит к автоматической переадресации на страницу login.aspx. Поменяем это назначение на страницу default.aspx. Для этого в корневом файле web.config найдем строку





и заменим ее на:







^ Личный кабинет сотрудника
Итак, авторизация нами успешно обработана. Создадим заодно страничку для личного кабинета сотрудников, где они смогут изменить свой пароль, а также заполнить дополнительные сведения о себе: ФИО, адрес, телефон и т.п.

Для хранения дополнительных данных о сотруднике используем такое понятие, как Profile. В файле web.config корневого каталога внутри секции . . .

создадим специальную секцию

добавляем поля пользователю -->





















Теперь для авторизованного пользователя эти свойства будут доступны (и для чтения, и для записи) через объект ^ Profile, обращаться к ним можно будет так: Profile.PersonalInfo.UserFIO и т.п.

Создадим файл cabinet.aspx, разместим в форме метки (label), текстовые поля (textbox) и кнопку (button) из стандартной секции панели Toolbox. Они выглядят так:



. . .




Рядом c полем txtFIO разместим элемент для проверки непустоты поля: элемент управления RequiredFieldValidator из вкладки Tools секции Validation. Установим у него значение свойства ControlToValidate=txtFIO и изменим свойство Text=Поле ФИО не может быть пустым! В тексте сценария он будет выглядеть так:


runat="server" ErrorMessage="RequiredFieldValidator" ControlToValidate="txtFIO">Поле ФИО не может быть пустым!




Все эти элементы управления являются так называемыми «серверными элементами управления», т.е., если форма вызывает сама себя, то мы можем для элементов управления задавать серверные функции-обработчики. Назначим на кнопку серверный обработчик: OnClick="Update". В файл cabinet.aspx.cs поместим код этого обработчика, который записывает значения из текстовых полей в профиль пользователя.

protected void Update(object s, EventArgs e)

{

Profile.PersonalInfo.UserFIO = txtFIO.Text;

Profile.PersonalInfo.UserAddr = txtAddr.Text;

Profile.PersonalInfo.UserTel = txtTel.Text;

Profile.PersonalInfo.UserState = txtState.Text;

}


Для чтения данных из профиля пользователя предусмотрим обработчик загрузки страницы.


protected void Page_Load(object sender, EventArgs e)

{

if (!System.Web.HttpContext.Current.User.Identity.IsAuthenticated)

Response.Redirect("login.aspx");


if (!IsPostBack)

{

txtFIO.Text = Profile.PersonalInfo.UserFIO;

txtAddr.Text = Profile.PersonalInfo.UserAddr;

txtTel.Text = Profile.PersonalInfo.UserTel;

txtState.Text = Profile.PersonalInfo.UserState;

}

}

Этот обработчик сначала проверяет, аутентифицирован ли пользователь, и если нет, то перенаправляет его на страницу авторизации. Если же пользователь уже авторизовался, проверяем, первый ли раз загружена страница. Если страница загружена первый раз, то мы переписываем данные из профиля пользователя в текстовые поля. Если же форма уже вызывала сама себя, то данные показаны на экране и нам не нужно читать их из профиля.




Для изменения пароля создадим страницу changepass.aspx. Добавим на страницу элемент управления ChangePassword из секции ^ Login. Для редактирования его составных частей в контекстном меню выберем строкy «Convert to template». Измените сообщения на русские, не забудьте также у объекта ChangePassword1 изменить свойство ChangePasswordFailureText на «Неверный пароль или новый пароль. Длина пароля должна быть не менее {0}. Число нецифросимвольных знаков: {1}.» и назначить страницу перехода после успешного изменения пароля SuccessPageURL, например: сabinet.aspx.



^ Регистрация читателей
Информация о читателях у нас хранится в отдельной таблице, поэтому для регистрации и авторизации читателей придется создавать отдельный интерфейс. Создадим сценарий RegReader.aspx в каталоге библиотекаря Librarian, поскольку именно библиотекари занимаются регистрацией новых читателей.

Нам нужно получить доступ к таблице readers. Технология доступа к базам данных в .NET называется ADO.NET. Эта технология содержит много разнообразных классов для доступа и представления информации. Мы будем использовать только некоторые из них. Заинтересованный читатель может обратиться, например, к книге [5], полностью посвященной этой технологии.

Поместим на страницу элемент управления SQLDataSource (источник данных) из группы Data с вкладки Tools. Этот элемент управления не имеет визуального представления в браузере пользователя, поэтому его можно помещать в любое место нашей страницы.

Теперь источнику данных нужно назначить свойство ConnectionString, в качестве значения свойства можно выбрать имя файла базы данных ASPNETDB.MDF. При этом автоматически устанавливается свойство ProviderName = System.Data.SqlClient.

Разместим на нашей странице метки (label), текстовые поля (textbox) и кнопку (button) из стандартной секции панели Toolbox. (Если текстовые поля и прочие элементы не хотят переименовываться в окне свойств, можете переименовать их прямо в тексте сценария.)

Для каждого текстового поля зададим свой валидатор RequiredFiedValidator (как мы это делали в личном кабинете сотрудника).

Для поля почтового адреса зададим валидатор, проверяющий регулярные выражения – RegularExpressionaValidator. У него нужно назначить свойство ControlToValidate=имя_текстового_поля_для_e-mail и свойство ValidationExpression (выбрать из списка «Internet e-mail address»). Напомним, что эти проверки будет выполнять браузер без отправки данных на сервер.

Информация о нашем пользователе содержит такое поле, как дата рождения. Поскольку для ввода даты мы используем текстовое поле, следует организовать проверку корректности введенной даты. Для этого зададим пользовательский валидатор CustomValidate, назначим ему свойство ControlToValidate=имя_текстового_поля_для_даты_рождения и зададим обработчик ServerValidate, например, с именем DateValidate. Текст обработчика следует помещать в файл RegReader.aspx.cs:


protected void DateValidate(object source, ServerValidateEventArgs args)

{

string strdate = args.Value.ToString();

try

{

System.DateTime date = Convert.ToDateTime(strdate);

args.IsValid = true;

}

catch (FormatException ex)

{

args.IsValid = false;

}

}

Второй параметр этой функции представляет собой значение, проверяемое на корректность. Мы пытаемся (try) преобразовать значение параметра (строку) к типу данных DateTime и в зависимости от результата устанавливаем его свойство IsValid, показывающее, является ли корректным наше значение. В том случае, когда строку не удается преобразовать корректно, возникает исключение FormatException, которое мы и обрабатываем.




Обратите внимание – эта проверка выполняется не в браузере, а на сервере, уже после отправки браузером данных.

Если значение было некорректным и мы выполнили действие args.IsValid=false, то автоматически назначается свойство Page.IsValid=false для всей страницы в целом. Это свойство мы будем использовать для дальнейшей обработки.

Нам нужно выполнить еще одну проверку: поле логина должно содержать уникальное значение. Проверить это можно, разумеется, только серверными средствами. Создадим для логина пользовательский валидатор CustomValidate, назначим ему свойство ControlToValidate= имя_текстового_поля_для_логина и зададим обработчик ServerValidate, например, с именем LoginValidate. Текст обработчика помещаем в файл RegReader.aspx.cs:


protected void LoginValidate(object source, ServerValidateEventArgs args)

{

DataView DataView1;

SqlDataSource1.SelectCommand =

"SELECT * FROM Readers WHERE login=@login";

DataView1 = (DataView)SqlDataSource1.Select(DataSourceSelectArguments.Empty);

if (DataView1.Count
еще рефераты
Еще работы по разное