1

我整个早上都试图找到一种解决方法(浏览了 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
    });

我得到: 美好的

希望能找到答案,因为 application/json 更有用

编辑

当我将协议更改为POST时,可以正确传递参数。这是新问题:为什么不GET?因为转换后的请求查询字符串不符合 mvc3 的需要??

编辑2

http://forums.asp.net/t/1766534.aspx/1

似乎所有问题都在GET方法上。GET不应该传递复杂的参数??如果你是restFUL的粉丝,那就太奇怪了

4

1 回答 1

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)
      });
于 2013-01-06T04:30:25.163 回答