Отправка параметров в вызове AJAX - PullRequest
0 голосов
/ 05 сентября 2010

Ранее об этом спрашивали другие, но я не смог использовать их ответы.

Я пытаюсь отправить некоторые данные, выполнив следующие действия:

 function addForumPost() {
            var title = jQuery('#forumTitle').val();
            var message = htmlEncode(jQuery('#message').htmlarea("toHtmlString"));
            var tagNames = addTags();

            var dataPost = $.toJSON({ title: 'testingsadf', message: message, tagNames: tagNames });
        jQuery.ajax({
            type: "POST",
            url: "/Create",
            data: dataPost,
            dataType: "json",
            success: function (result) {
            }
        });
    }

IЯ проверил и дважды проверил, что вход содержит данные, но я получаю данные только от параметра сообщения в моем контроллере.Два других значения равны нулю.Как вы можете видеть в приведенном выше примере, я даже назначил некоторый статический текст параметру title, но я все еще получаю данные только для параметра сообщения.

Контроллер выглядит следующим образом:

  [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Create(string title, string message, List<string> tagNames)
        {
          ....
        }

Ответы [ 3 ]

1 голос
/ 05 сентября 2010

Ваша ошибка очень проста. Если у вас есть действие, которое возвращает JsonResult, то это означает , а не , что вы должны отправить также JSON-кодированные входные параметры в метод. Просто удалите использование $.toJSON() и используйте объект в качестве значения data для параметра jQuery.ajax (см., Например, ответ Дарина).

Если вы вызываете веб-службу ASMX вместо действия ASP.NET MVC, вы должны использовать contentType: "application/json; charset=utf-8" и преобразовывать значения всех параметров веб-метода в JSON, но немного другим способом (см. Как создать объект JSON для отправки в AJAX WebService? ). Но в ASP.NET MVC такого требования нет. MVC преобразует входные параметры, которые вы отправляете в соответствии с методом Parse (int.Parse, DateTime.Parse и т. Д.), И не десериализуется из JSON. Так что, если вы ищете примеры кода, посмотрите, какие именно технологии используются в бэкэнде: ASP.NET MVC, веб-службы ASMX или WFC.

1 голос
/ 05 сентября 2010

Попробуйте установить параметр traditional, начиная с jQuery 1.4. Это работает для меня:

var title = 'title';
var message = 'message';
var tagNames = ['tag1', 'tag2'];

jQuery.ajax({
    type: 'POST',
    url: '/Home/Create',
    data: { title: title, message: message, tagNames: tagNames },
    dataType: 'json',
    traditional: true,
    success: function (result) {
    }
});

С помощью этого действия:

[HttpPost]
public ActionResult Create(
    string title, 
    string message, 
    IEnumerable<string> tagNames
)
{
    return Json(new
    {
        Title = title,
        Message = message,
        TagNames = tagNames
    });
}
0 голосов
/ 05 сентября 2010
  1. Вам не нужно публиковать json для описанного вами типа действия.
  2. Вам не нужно вручную собирать поля в карту. Используйте .serializeArray ()

    var postData = $ ('. Myform'). SerializeArray ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...