Как отправить объект AJAX/JQuery на контроллер (несоответствие) MVC4

У меня была эта путаница на некоторое время, и это по следующей причине:

Я пытаюсь отправить объект jquery

var myObject = {
 Title: $('#Title').val(),
 Title2: $('#Title2').val(),
 Title3: $('#Title3').val(),
 };

через вызов ajax

$.ajax({
 data: { myObjectName = myObject
 },
 datatype: "json",
 url: "myUrl",
 cache: false,
 error: function (ts)
 {//handle error},
 success: function (result)
 {//handle success}
 });

Я получаю свой объект в своем контроллере следующим образом:

public ActionResult MyAction(ObjectType myObjectName)

Однако при получении объекта из javascript он не распознает его как таковой и просто создает экземпляр нового ObjectType.

Я знаю, что могу отправить его в виде строки, сериализую его, если я поместил свой объект внутри формы и т.д.... то, что я хочу знать, - это то, почему этот подход иногда работает для меня (я получил его для работы с другим ObjectType (s)), а в других случаях - нет. Имеет ли это какое-либо отношение к тому, насколько сложным является объект? Отправка неполного объекта? (Последний, похоже, не является тем, что я отправил "неполные" объекты, а пустые поля просто получили экземпляр с нулевым значением)

ЛЮБОЕ понимание было бы оценено. Благодарю!

1 ответ

Измените свой код;

$.ajax({
 data: myObject,
 datatype: "application/json",
 type: "POST",
 url: "myUrl",
 cache: false,
 error: function (ts)
 {//handle error},
 success: function (result)
 {//handle success}
});

Обратите внимание, что тип POST означает, что вам также нужно будет добавить [HttpPost] к вашему ActioResult.

Пока ObjectType является классом с полями

public class ObjectType
{
 public string Title { get; set; }
 public string Title2 { get; set; }
 public string Title3 { get; set; }
}

Ваш текущий код пытается привязать вашу модель к тому, что будет напоминать

public class SomeObject
{
 ObjectType myObjectName { get; set; }
}

public class ObjectType{
 public string Title { get; set; }
 public string Title2 { get; set; }
 public string Title3 { get; set; }
}

licensed under cc by-sa 3.0 with attribution.