#ajax #asp.net-mvc #json #jquery
#ajax #asp.net-mvc #json #jquery — jquery — запрос #jquery
Вопрос:
На стороне сервера у меня есть следующий класс
public class EditorContext
{
public Module Module { get; set; }
public Holder Holder { get; set; }
}
public class Module
{
public string CodeName { get; set; }
public string Content { get; set; }
}
public class Holder
{
public int Id { get; set; }
public int Type { get; set; }
}
public class EditorController : Controller
{
[HttpPost]
public ActionResult AddModule(EditorContext context)
{
return Json(new { });
}
}
От клиента я отправляю запрос следующим образом
var data =
{
Module:
{
CodeName: 1,
Content: 2
},
Holder:
{
Type: 3,
Id: 4
}
};
$.ajax({
type: "POST",
url: 'Editor/AddModule',
data: JSON.stringify(data),
async: false,
success: function () {
},
error: function (xhr, status, error) {
throw new Error();
}
});
1 — Скрипач показывает, что он отправил {«Модуль»:{«Кодовое имя»: 1, «Содержимое»: 2}, «Держатель»:{«Тип»:3, «Идентификатор»: 4}}, но в запросе сервера .Форма = {«Module»:{«CodeName»:1,»Content»:2},»Holder»:{«Type»:3,»Id»:4}} , ПОЧЕМУ?
2 — Если вместо «JSON.stringify(data)» я использую «postify», как в здесь, то EditorController.AddModule возвращает уже заполненный EditorContext. Это подтверждает изменение данных на «Модель.CodeName=1amp;Model.Содержимое = 2amp;Holder.Type=3amp;Holder.Id =4». Итак, почему таким образом EditorContext автоматически заполняется связующим по умолчанию, а в (1) этого не происходит?
Спасибо
Ответ №1:
Вам нужно сообщить связующему, что ваши данные в формате JSON, иначе он понятия не имеет, что должен анализировать их как таковые. Добавьте правильный заголовок типа содержимого к вашему запросу:
$.ajax({
type: "POST",
url: 'Editor/AddModule',
data: JSON.stringify(data),
contentType: "application/json",
async: false,
success: function () {
},
error: function (xhr, status, error) {
throw new Error();
}
});
Комментарии:
1. Я попытался добавить ContentType: «application / json» , но это не помогло. EditorContext. Значения Holder и EditorContext.Module равны нулю