почему postify работает, а stringify нет?

#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 равны нулю