В основном вещи поддерживаются совсем немного из коробки.Я не регистрирую ничего из Фила Хаака , и все работает без проблем.Связыватель модели по умолчанию может использовать данные, передаваемые на сервер.Получение 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
.
Дополнительная информация
Обработка ошибок состояния модели не так тривиальна, как можно подумать,Прочтите мое сообщение в блоге , чтобы получить больше информации об этом и одном из возможных решений проблемы.
Передача через списки или другие коллекции может представлять дополнительную проблему.Прочтите об этом в другом блоге , и вы увидите, как это правильно сделать.