Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
Как уже писалось в начале главы, технология AJAX все больше вместо передачи данных в формате xml использует формат JSON (JavaScript Object Notation).
JSON не зависит от языка программирования, он более удобен и легче обрабатывается.
Например, объект Book в формате JSON мог бы выглядеть бы так: {"Name":"Война и мир", "Author":"Л. Толстой", "Year":"1863"}
.
В JSON каждый отдельный объект заключается в фигурные скобки и представляет собой набор пар ключ-значение, разделенных запятыми, где ключом является название свойства объекта, а значением соответственно значение этого свойства.
Ранее мы в ajax-форме обращались к методу, который возвращал данные в виде обычной разметки html. Теперь изменим его или определим новый, чтобы он возвращал данные в формате JSON:
public JsonResult JsonSearch(string name) { var jsondata = db.Books.Where(a => a.Author.Contains(name)).ToList<Book>(); return Json(jsondata, JsonRequestBehavior.AllowGet); }
Новое действие теперь возвращает объект JsonResult, который принимает объект с результатами запроса (в данном случае объект jsondata).
Второй необязательный параметр представляет значение перечисления JsonRequestBehavior
и может принимать два значения:
AllowGet
(разрешить Get-запросы) и DenyGet
(запретить Get-запросы). В данном случае мы разрешаем действию посылать результаты
в JSON-формате в ответ на запросы Get.
Теперь изменим ajax-форму в нашем представлении:
<script type="text/javascript"> function OnSuccess(data) { var results = $('#results'); // получаем нужный элемент results.empty(); //очищаем элемент for (var i = 0; i < data.length; i++) { results.append('<li>' + data[i].Name + '</li>'); // добавляем данные в список } } </script> @using (Ajax.BeginForm("JsonSearch", new AjaxOptions {OnSuccess = "OnSuccess"})) { <input type="text" name="name" /> <input type="submit" value="Поиск" /> } <br /> <div id="results"></div> @Scripts.Render("~/scripts/jquery-1.10.2.min.js") @Scripts.Render("~/scripts/jquery.unobtrusive-ajax.min.js")
Поскольку параметр UpdateTargetId
не будет приниматься во внимание при получении данных в формате JSON, поэтому вся логика
по выводу данных на страницу закладывается в обратный вызов OnSuccess
. В обработчике OnSuccess
мы последовательно
добавляем полученные данные в нужный элемент html-страницы.