Ajax вызов с jQuery в ASP.NET MVC не передает параметры - PullRequest
3 голосов
/ 07 мая 2010

Маршрут:

routes.MapRoute(
    "Ajax", // Route name
    "BizTalk/Services/{action}", // URL with parameters
    new
    { // Parameter defaults
     controller = "BizTalk"
    }
   );

Мой контроллер:

public JsonResult AjaxTest(string s, int i, bool b)
  {
   return Json("S: " + s + "," + "I: " + i + "," + "B: " + b);
  }

Мой код jQuery:

$(document).ready(function() {
   $("#btn_test").click(function() {
    var s = "test";
    var i = 8;
    var b = true;
    $.ajax({
     type: "POST", cache: false,
     url: "/BizTalk/Services/AjaxTest",
     data: { i: i, s: s, b: b },
     contentType: "application/json; charset=utf-8",
     dataType: "json",
     success: function(msg) {
     }
    });
   });
  });

Ответы [ 4 ]

7 голосов
/ 07 мая 2010

Этот пост объясняет проблему и возможное решение (аналогично тому, как объяснил @Erv).

Если вы удалите contentType: "application/json; charset=utf-8" из вашего звонка на jQuery.ajax содержимое по умолчаниюбудет использоваться тип (form-urlencoded), и данные json, которые вы указали в качестве параметра данных (data: { i: i, s: s, b: b }), будут правильно сопоставлены с вашими параметрами действия .... поэтому, если вы действительно не хотите отправлять данные json, просто удалите contentTypeи у тебя все будет хорошо .....

2 голосов
/ 07 мая 2010

ASP.NET MVC не отображает автоматически входящие данные JSON в параметры метода действия.

См. Следующую статью, чтобы найти решение для добавления этой возможности:

http://haacked.com/archive/2010/04/15/sending-json-to-an-asp-net-mvc-action-method-argument.aspx

Кроме того, я думаю, что ваш вызов jQuery на самом деле не отправляет JSON, хотя, похоже, эточто ты хочешь это сделать.jQuery не будет автоматически преобразовывать объект data в JSON.Вам нужно конвертировать его в JSON самостоятельно с помощью чего-то вроде json2.js

1 голос
/ 07 мая 2010

как вы узнали, что "jquery ... не передает параметры"? Вы пытались прослушать запрос с помощью firebug?

вы отправляете данные в теле POST, но пытаетесь получить к ним доступ обычным способом (с использованием аргументов действия), например, GET.
все данные POST находятся в Request.Form, или вы должны обрабатывать их, связываясь с некоторыми пользовательскими ViewModel.

0 голосов
/ 07 мая 2010

Э-э, возможно, вы ошиблись, но вы передаете jQuery i, s, b, но в действии, которое у вас есть s, i, b.

Порядок должен быть правильным для сообщений jQuery.

EDIT

Вот как я использую сообщения jQuery;

jQuery

        $.post("/Articles/jQueryAddComment", { commentText: commentText, id: id, type: commentType }, function(returnedHTML) {
//Do something with the returned html.
        });

В моем контроллере

        public ActionResult jQueryAddComment(string commentText, int id, string type)
        {
//do some stuff
                return PartialView("CommentList", fvm);
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...