Формат JSON

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 31.10.2015

Как уже писалось в начале главы, технология 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-страницы.

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850