Партнерка на США и Канаду по недвижимости, выплаты в крипто
- 30% recurring commission
- Выплаты в USDT
- Вывод каждую неделю
- Комиссия до 5 лет за каждого referral
protected void DateValidate(object source,
ServerValidateEventArgs args)
{
string strdate = args. Value. ToString();
try
{
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!= 0)
{
args. IsValid = false;
}
}
В этом обработчике нам нужно обратиться к базе данных и проверить, не существует ли уже такого логина в таблице Readers. С помощью уже заданного источника данных формулируем запрос на выборку. Источник данных имеет соответствующие средства для этого: свойство SelectCommand и метод Select.
В выполняемой команде в качестве значения логина используется так называемый параметр команды SELECT с именем @login. Его следует предварительно объявить в тексте сценария следующим образом:
<SelectParameters>
<asp:ControlParameter ControlID="txtlogin" Name="login"
Type="String" />
</SelectParameters>
(можно также задать этот параметр запроса визуальным образом в построителе запроса через свойство SelectQuery источника данных). Чтобы получить значение из элемента управления на форме, параметр связывается с элементом управления через свойство ControlID.
Для получения результатов запроса будем использовать объект DataView. В этот объект сохраняем результаты запроса. Нам нужно всего лишь проверить, пустая ли получилась выборка или нет. Если выборка не пустая, значит, такой логин уже есть в базе, и пользователь должен будет придумать себе другое имя.
Наконец, когда пользователь заполнит корректно все данные, мы будем записывать их в базу данных. Создадим обработчик для кнопки «Зарегистрировать» и назначим его на событие Click кнопки:
protected void Save_Click(object sender, EventArgs e)
{
if (Page. IsValid)
{
SqlDataSource1.InsertCommand = "INSERT INTO readers (login, password, fio_reader, passport, datebird, addr_reader, tel_reader, email_reader VALUES (@login, @password, @fio_reader, @passport, @datebird, @addr_reader, @tel_reader, @email_reader)";
SqlDataSource1.Insert();
}
}
В этом обработчике мы будем выполнять команду Insert, но только в том случае, когда текущая страница (Page) является корректной (IsValid).
Для добавления новой строки у источника данных есть удобные свойство InsertCommand и метод Insert. Свойство InsertCommand содержит код выполняемой команды, а метод Insert запускает эту команду на выполнение.
В выполняемой команде в качестве значений полей используются так называемые параметры команды insert: @login, @password и т. п. Их следует предварительно объявить в тексте сценария следующим образом (или задать в построителе запроса InsertQuery источника данных):
<asp:SqlDataSource... >
<InsertParameters>
<asp:ControlParameter ControlID="txtlogin"
Name="login" Type="String" />
<asp:ControlParameter ControlID="txtpassword"
Name="password" Type="String" />
...
</InsertParameters>
</asp:SqlDataSource>
Чтобы получить значения из элементов управления на форме, каждый из параметров связывается с некоторым элементом управления через свойство ControlID.
И, наконец, разработаем страницу для авторизации читателей.
Авторизация читателей

Сценарий для авторизации читателей будет несколько отличаться от сценария авторизации сотрудников. Создадим файл login_reader.aspx, разместим в нем метки, текстовые поля, валидаторы непустоты и кнопку. Для того чтобы в поле пароля скрывать набираемые символы, зададим у него свойство textMode= Password.
Ниже поместим метку красного цвета с именем Message, текстом «Неверные логин/пароль» и установим у нее свойство visible=false.
Добавим на форму источник данных SQLDataSource, назначим ему, как и раньше, ConnectionString и через построитель запроса SelectQuery сформулируем запрос
Select * from readers where login=@login AND password=@password
Здесь же в построителе запроса добавим параметры запроса @login и @password и свяжем их с элементами управления – текстовыми полями для логина и пароля.
Свяжем с кнопкой следующий обработчик:
protected void Login_Click(object sender, EventArgs e)
{
DataView DataView1;
DataView1 = (DataView)SqlDataSource1.Select
(DataSourceSelectArguments. Empty);
if (DataView1.Count == 0)
{
Message. Visible = true;
}
else
{
Session. Add("reader", txtLogin. Text);
Response. Redirect("default_reader. aspx");
}
}
Так же, как и в сценарии регистрации, проверяем, есть ли в базе данных пользователь с этим логином (добавляем только условие для проверки пароля). Если такого пользователя нет, то на экран показываем сообщение об ошибке.
Если же такой логин в базе имеется, то создаем переменную сессии с именем этого пользователя и переадресуем его на главную страницу интерфейса читателя.
Для выхода читателя из авторизованного режима создадим сценарий logout_reader.aspx с единственным обработчиком, который удаляет переменную сессии с именем читателя и выполняет переадресацию на главную страницу сайта:
protected void Page_Load(object sender, EventArgs e)
{
Session. Remove("reader");
Response. Redirect("default. aspx");
}
Задание для самостоятельной работы. Этап 3.
Разработайте для вашего приложения сценарии авторизации сотрудников, личного кабинета и, если необходимо, регистрации и авторизации пользователей.
Этап 4. Разработка мастер-страниц
![]() |
Мастер-страницы, или эталонные страницы, или шаблоны – это удобное средство для организации общих элементов интерфейса или программной логики для целой группы страниц. В ASP.NET мастер-страница представляет собой некую общую «оболочку», в которую будут встраиваться элементы содержимого частных страниц.
Мастер-страница Текущая страница
Мастер-страницы имеют расширение. master, по умолчанию первая строка сценария имеет вид:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile= "MasterPage. master. cs" Inherits="librarian_MasterPage" %>
Внутри мастер-страницы должна быть по крайней мере одна заготовка – место для вставки кода текущей страницы, которое имеет уникальный идентификатор в рамках страницы:
<asp:contentplaceholder id="ContentPlaceHolder1"
runat="server">
</asp:contentplaceholder>
Каждая конкретная текущая страница, использующая мастер-страницу, при создании по умолчанию имеет вид:
<%@ Page Language="C#"
MasterPageFile="~/librarian/MasterPage. master"
AutoEventWireup="true" CodeFile="Search. aspx. cs"
Inherits="librarian_Search" Title="Поиск и просмотр" %>
<asp:Content ID="Content1"
ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
</asp:Content>
Здесь является обязательной ссылка на мастер-страницу: MasterPageFile="~/librarian/MasterPage. master", можно задать заголовок для страницы: Title="Поиск и просмотр", а также должен присутствовать хотя бы один элемент для вставки в мастер-страницу <asp:Content ... > ... </asp:Content> у которого значение ContentPlaceHolderID совпадает с заданным значением id тэга <asp:contentplaceholder> в мастер-странице.
Создадим, например, мастер-страницу для АРМ библиотекаря:

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage. master. cs" Inherits="librarian_MasterPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. w3.org/TR/xhtml1/DTD/xhtml1-transitional. dtd">
<html xmlns="http://www. w3.org/1999/xhtml" >
<head runat="server">
<title>Библиотека</title>
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |



