Чтение онлайн

на главную - закладки

Жанры

Шрифт:

<%= Html.TextBox("username") %>

<%= Html.ValidationMessage("username") %>

<a id="checkUsername" href="#">Проверить доступность логина</а>

<span id="check_username"></span>

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

<script type="text/javascript">

$(document).ready(function {

$("#checkUsername").bind("click",

function {

var username = $("#username").val;

$("#check_username")

.load("/Account/CheckUsername?username=" + username);

})

});

</script>

Здесь мы объявляем глобальный обработчик, который выполнится после загрузки документа $(document).ready (...). В этом обработчике мы задаем поведение для обработки нажатия пользователя на необходимую нам ссылку с идентификатором $("#checkUsername").bind("click", ...). В самом обработчике нажатия производятся следующие действия: получается значение введенного пользователем логина и с помощью функции load производится запрос на сервер для проверки пользовательских данных.

Нетрудно заметить, что в случае с jQuery нам пришлось произвести меньше действий. Во-первых, вместо определения серверного кода с определением Ajax.ActionLink мы сформировали с помощью HTML-разметки обыкновенную ссылку. Во-вторых, для передачи параметра с пользовательскими данными в случае jQuery нам не пришлось работать с внутренними объектами ASP.NET Ajax, вместо этого мы работали со ссылкой напрямую, сформировав ссылку для запроса обыкновенным сложением строк. И в-третьих, само количество кода для jQuery оказалось меньшим, чем потребовалось написать кода для ASP.NET Ajax.

Примечание

Следует заметить, что передача на сервер пользовательского ввода всегда сопряжена с опасностью. Злоумышленник может ввести в виде текста опасный код, например кусок SQL-кода или JavaScript-кода, который затем, в случае когда не проводится проверка пользовательского ввода, будет исполнен вашим сервером или браузером на компьютерах ваших пользователей. Чтобы избежать этого, необходимо всегда обрабатывать пользовательский ввод и учитывать его потенциальную опасность.

***********************************

Пример 2. Логин через Ajax

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

Первоначально переопределим действие LogOn в контроллере Account так, чтобы поддержать возможность произведения входа в систему черезе Ajax-запросы (листинг 7.2).

Листинг 7.2. Переопределение действия LogOn

public ActionResult LogOn(string userName,

string password,

bool rememberMe,

string returnUrl)

{

if (Request.IsAjaxRequest)

{

var result = new AjaxResult;

if (!ValidateLogOn(userName, password))

{

result.IsSuccess = false;

result.ErrorString = "введен неверный логин или пароль";

return Json(result);

}

FormsAuth.SignIn(userName, rememberMe);

result.IsSuccess = true; return Json(result);

}

else

{

if (!ValidateLogOn(userName, password))

{

return View;

}

FormsAuth.SignIn(userName, rememberMe);

if (!String.IsNullOrEmpty(returnUrl))

{

return Redirect(returnUrl);

}

else

{

return RedirectToAction("Index", "Home");

}

}

}

Обратите внимание на выделенный в листинге 7.2 фрагмент. В нем используется метод Request.IsAjaxRequest для определения типа запроса. Если запрос был произведен с помощью Ajax, то выполнятся дальнейшая обработка и возврат результата в виде JSON-данных с булевым значением, описывающим, произведен ли вход в систему, и строкой описания ошибки, если она возникла. Когда запрос не является Ajax-запросом, выполняется предыдущая логика.

Реализация на ASP.NET Ajax

Сделаем так, чтобы вход в систему был возможен на любой странице проекта (рис. 7.10). Для этого добавим разметку, необходимую для отображения элементов управления входа в систему, в элемент управления LogOnUserControl.ascx:

<% if (Request.IsAuthenticated) { %>

Welcome <b><%= Html.Encode(Page.User.Identity.Name) %></b>!

[ <%= Html.ActionLink("Log Off", "LogOff", "Account") %> ]

<% } else { %>

<div id="loginPanel">

<% using(Ajax.BeginForm("LogOn", "Account",

(object) null,

new AjaxOptions{OnSuccess = "OnLogon",

OnFailure = "OnError"})) {%>

Логин: <%= HtmL.TextBoxC'userNams'') %>

Пароль: <%= Html.Password ("password") %>

<%= HtmL.CheckBox("RememberMe") %> запомнить <input type^'submit" vaLue="Логин" /><br/>

Поделиться:
Популярные книги

Стая

Сергеева Оксана Николаевна
1. Стая
Любовные романы:
современные любовные романы
остросюжетные любовные романы
9.37
рейтинг книги
Стая

Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

Клеванский Кирилл Сергеевич
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.51
рейтинг книги
Сердце Дракона. нейросеть в мире боевых искусств (главы 1-650)

100 великих войн

Соколов Борис Вадимович
100 великих
Справочная литература:
энциклопедии
6.40
рейтинг книги
100 великих войн

Тринадцатый IV

NikL
4. Видящий смерть
Фантастика:
боевая фантастика
попаданцы
6.25
рейтинг книги
Тринадцатый IV

Тринадцатый V

NikL
5. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.50
рейтинг книги
Тринадцатый V

Пламенев. Книга 3-7

Карелин Сергей Витальевич
Пламенев
Фантастика:
аниме
уся
фэнтези
сянься
5.00
рейтинг книги
Пламенев. Книга 3-7

Корсаков

Кощеев Владимир
1. Корсаков
Фантастика:
альтернативная история
аниме
попаданцы
5.00
рейтинг книги
Корсаков

Трое в Долине

Никитин Юрий Александрович
5. Трое из леса
Фантастика:
героическая фантастика
8.90
рейтинг книги
Трое в Долине

Ученик

Первухин Андрей Евгеньевич
1. Ученик
Фантастика:
фэнтези
6.27
рейтинг книги
Ученик

Имя нам Легион. Том 7

Дорничев Дмитрий
7. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 7

Неучтенный элемент. Том 4

NikL
4. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 4

Лекарь Империи 5

Карелин Сергей Витальевич
5. Лекарь Империи
Фантастика:
городское фэнтези
аниме
героическая фантастика
попаданцы
5.00
рейтинг книги
Лекарь Империи 5

“Цесаревич” Часть I. Эскадренный броненосец. 1899-1906 гг.

Мельников Рафаил Михайлович
Боевые корабли мира
Научно-образовательная:
история
технические науки
военная техника и вооружение
военная история
4.00
рейтинг книги
“Цесаревич” Часть I. Эскадренный броненосец. 1899-1906 гг.

Кодекс Крови. Книга VII

Борзых М.
7. РОС: Кодекс Крови
Фантастика:
боевая фантастика
попаданцы
аниме
5.25
рейтинг книги
Кодекс Крови. Книга VII