Jquery 在Querystring中使用Ajax和常规参数发送JSON

Jquery 在Querystring中使用Ajax和常规参数发送JSON,jquery,ajax,asp.net-mvc,json,Jquery,Ajax,Asp.net Mvc,Json,是否可以使用Ajax GET在querystring的末尾包含一个简单的JSON字符串?我正在使用MVC并从视图发送到控制器。在控制器中,我希望能够执行以下操作: public class myObj { public string Name { get; set; } public int Age { get; set; } } [AcceptVerbs(HttpVerbs.Get)] public JsonResult GetData(string Id) { //

是否可以使用Ajax GET在querystring的末尾包含一个简单的JSON字符串?我正在使用MVC并从视图发送到控制器。在控制器中,我希望能够执行以下操作:

public class myObj
{
    public string Name { get; set; }
    public int Age { get; set; }
}

[AcceptVerbs(HttpVerbs.Get)]
public JsonResult GetData(string Id)
{
    // Get querystring parameter
    string a = Request["a"];

    // Create typed object
    if (Request["myObj"] != null)
    {
        JavaScriptSerializer jss = new JavaScriptSerializer();
        myObj myobj = null;
        myobj = jss.Deserialize<myObj>(Request["myObj"]);
    }

    ...
}
我不认为我上面的例子说明了我为什么要这样做,但我的问题是这是否可能。当执行Ajax GET时,myObj在控制器中始终为null。我怀疑这是因为
data:
已经在创建一个JSON,而myObj的格式不正确,但我不知道如何解决这个问题,似乎也找不到一个示例来说明如何解决这个问题


如果这种组合是可能的,有人能告诉我我的代码哪里错了吗?

由于要传递的数据量(12个参数)可能包含大量数据,您可能希望使用POST而不是GET

并确保您的操作接受HTTP POST谓词

[AcceptVerbs(HttpVerbs.Post)]
public JsonResult GetData(string id, string a, myObj myObj)
{
}

有关更多信息,请参阅。

使用查询字符串传递数据时,我会非常小心。试着改用POST,你就不必担心查询字符串的限制了。我还没有弄清楚如何在不重新加载视图的情况下使用POST,所以我开始使用GET。你可以很容易地更改答案中的属性,即你必须是POST,然后做完全相同的事情。不同之处在于POST中请求的大小可能会大得多。如果进行异步调用,即使视图使用POST,也不应重新加载视图。你是如何实现这个功能的?丹尼尔,我对你的建议很感兴趣,让这篇文章成为一篇博文而不是GET。我不喜欢URL中凌乱的查询字符串参数。我不确定您询问的是哪个函数实现。似乎每次发布POST时都会调用视图的关联控制器操作。我看到你提供了一个链接。我现在就去读。我更愿意发布帖子……丹尼尔,我花了相当多的时间试图让帖子在没有重新加载视图的情况下运行。我放弃了,选择了GET。我再试了一次,它似乎工作得很好-在Ajax中更改
类型:POST
,并用
HttpVerbs.POST
装饰控制器函数。我不知道为什么它以前不起作用,但是谢谢你鼓励我再试一次。这是一个更好的解决方案。我很高兴能帮上忙!
var myObj= { "Name" : "John", "Age" : "22" }; //Array with similar properties to your Model

$.ajax({
    url : "/GetData/", 
    type: "POST",
    data : myObj,
    success: function(data, textStatus, jqXHR)
    {
        //data - response from server
    },
    error: function (jqXHR, textStatus, errorThrown)
    {

    }
});
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult GetData(string id, string a, myObj myObj)
{
}