Передайте JSON на веб-сайт ASP.NET MVC2 - PullRequest
0 голосов
/ 23 ноября 2010

Я создал список объектов JSON и теперь хочу перейти на веб-сайт ASP.NET MVC2.

Если я не использую веб-сервис, вместо этого использую Controllers / Views, какой тип ввода? строка? Каковы хорошие практики при этом?

Цель состоит в том, чтобы я хотел использовать среду Microsoft AJAX, которая позволяет браузерам без поддержки javascript по-прежнему использовать веб-сайт. В противном случае я бы использовал jQuery для вызова AJAX веб-службы.

Ответы [ 2 ]

1 голос
/ 23 ноября 2010

В основном вещи поддерживаются совсем немного из коробки.Я не регистрирую ничего из Фила Хаака , и все работает без проблем.Связыватель модели по умолчанию может использовать данные, передаваемые на сервер.Получение JSON-строк на сервере не составляет труда, только если у вас есть клиентская часть (или другая служба на стороне сервера), которой вы не можете реально управлять.Фил Хаак очень хорошо объясняет это в комментарии к этому сообщению в блоге .

Серверная часть

Рассмотрим эту модель приложения на стороне сервера:

public class Person
{
    [Required]
    public string FirstName { get; set; }

    [Required]
    public string LastName { get; set; }

    [Required]
    [Range(0, 100)]
    public int Age { get; set; }
}

И рассмотрим это действие контроллера (People controller):

[HttpPost]
public ActionResult Add(Person data)
{
    if (!this.ModelState.IsValid)
    {
        // do something about invalid data (check "Additional Info" below)
    }

    Person result = this.Service.Add(data);
    return Json(result);
}

Клиентская часть

Это действие сможет использовать объекты JavaScript, такие как:

var person = {
    FirstName: "John",
    LastName: "Doe",
    Age: 35
};

Используя jQuery, например, это было бы следующим образом:

$.ajax({
    url: "People/Add",
    type: "POST",
    data: person,
    success: function(data, status, xhr) {
        // process data
    },
    error: function(xhr, status, err) {
        // process invalid results
    }
});

Это не будет напрямую отправлять строку JSON на сервер, но мне интересно, почему кто-то потрудился преобразовать строку JSON и отправить ее, а затем сделатьдополнительная обработка на стороне сервера, когда вы можете использовать принцип KISS и следовать этому маршруту, который я описал здесь.Он работает из коробки даже в MVC 1. Вы можете пройти через все, что вам нужно.Списки, массивы, объекты и т. Д.

Вы, вероятно, создали свою строку JSON из реального объекта / массива Javascript.Я предлагаю вам использовать этот оригинальный объект, который вы создали и передаете его вызову $.ajax.

Дополнительная информация

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

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

0 голосов
/ 23 ноября 2010

Вот хорошая статья о том, как передать JSON в действия.Для этого требуется, чтобы вы включили сборку ASP.NET Futures, но это просто добавление dll в вашу корзину и создание ссылки.Приятно, что код автоматически свяжется с моделями для вас.Пока я нашел одно исключение: перечисления еще не работают. Моя работа вокруг заключалась в создании связывателя модели по умолчанию, который обрабатывает преобразование перечислений из целых чисел, хотя там могут быть и более лучшие варианты.

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