почему postify работает, а stringify - нет? - PullRequest
0 голосов
/ 01 мая 2011

На стороне сервера у меня следующий класс

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 - Fiddler показывает, что он отправил {"Модуль": {"CodeName": 1, "Content": 2}, "Holder": {"Type": 3, "Id": 4}} , но на сервере Request.Form =% 7b%22Module% 22% 3a% 7b% 22CodeName% 22% 3a1% 2c% 22Content% 22% 3a2% 7d% 2c% 22Holder% 22% 3a% 7b% 22Type% 22% 3а3% 2c% 22Id% 22% 3a4% 7d%7d , ПОЧЕМУ?

2 - Если вместо «JSON.stringify (data)» я использую «postify», как в здесь , поэтому EditorController.AddModule получает уже заполненный EditorContext.Это означает изменение данных на "Model.CodeName = 1 & Model.Content = 2 & Holder.Type = 3 & Holder.Id = 4".Итак, почему таким образом EditorContext автоматически заполняется связывателем по умолчанию, а в (1) - нет?

Спасибо

1 Ответ

2 голосов
/ 01 мая 2011

Вы должны сообщить связующему, что ваши данные в формате 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();
        }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...