路线是:
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) {
}
});
});
});
答案 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
答案 2 :(得分:1)
你怎么得到那个“jquery ......不传递参数”?你试过用firebug嗅探请求吗?
您正在POST主体中发送数据,但尝试以常规方式(使用操作参数)(如GET)访问它们。
所有POST数据都在Request.Form
中,或者您必须通过绑定到某个自定义ViewModel
来处理它。
答案 3 :(得分:0)
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);
}