我试图整个上午找到一个解决方法(浏览SO中的所有相关帖子并自己做了几个实验),但都失败了。
这是服务器代码:
控制器:
[HttpGet]
public JsonResult Test(Entity e)
{
return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}
实体:
public class Entity
{
public string A { set; get; }
public string B { set; get; }
}
使用客户端代码:
var e = {
A: "1",
B: "2"
};
$.ajax({
url: "/Home/Test",
contentType: "application/json; charset=utf-8",
dataType: "json",
data: JSON.stringify(e)
// data: e
});
我得到:
使用客户端代码:
var e = {
A: "1",
B: "2"
};
$.ajax({
url: "/Home/Test",
//contentType: "application/json; charset=utf-8",
dataType: "json",
//data: JSON.stringify(e)
data: e
});
我得到:
希望找到答案,coz application / json更有用
修改
当我将协议更改为 POST 时,可以正确传递参数。 这是一个新问题:为什么不获取?因为转换后的请求查询字符串不符合mvc3的需要吗?
EDIT2
http://forums.asp.net/t/1766534.aspx/1
似乎所有问题都在 GET 方法上。 GET 不应该通过复杂的参数?如果你是restFUL的粉丝那就非常奇怪
答案 0 :(得分:1)
尝试指定请求类型(尽管默认情况下默认为GET):
var e = {
A: "1",
B: "2"
};
$.ajax({
type: "GET",
url: "/Home/Test",
contentType: "application/json;charset=utf-8",
dataType: "json",
data: JSON.stringify(e)
});
或尝试使用POST
请求并使用JsonResult
属性修饰[HttpPost]
操作方法:
[HttpPost]
public JsonResult Test(Entity e)
{
return Json(new { success = true }, JsonRequestBehavior.AllowGet);
}
然后
$.ajax({
type: "POST",
url: "/Home/Test",
contentType: "application/json;charset=utf-8",
dataType: "json",
data: JSON.stringify(e)
});