在ASP.NET MVC中使用jQuery调用Ajax不传递参数

时间:2010-05-07 01:37:58

标签: jquery asp.net-mvc ajax parameters

路线是:

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 个答案:

答案 0 :(得分:7)

This帖子解释了问题和可能的解决方案(类似于@Erv的解释)。

如果从contentType: "application/json; charset=utf-8"调用中删除jQuery.ajax,将使用默认内容类型(form-urlencoded),并将您指定的json数据作为数据参数(data: { i: i, s: s, b: b })将正确映射到您的动作参数....所以,除非你真的想发送json数据,只需删除contentType,你会没事的.....

答案 1 :(得分:2)

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。您需要使用json2.js

之类的东西将其转换为JSON

答案 2 :(得分:1)

你怎么得到那个“jquery ......不传递参数”?你试过用firebug嗅探请求吗?

您正在POST主体中发送数据,但尝试以常规方式(使用操作参数)(如GET)访问它们。
所有POST数据都在Request.Form中,或者您必须通过绑定到某个自定义ViewModel来处理它。

答案 3 :(得分:0)

嗯,可能是错的,但你传递的是jQuery i,s,b但是在你的行动中,我,b。

jQuery帖子的顺序必须正确。

修改

以下是我如何使用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);
        }