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

时间:2014-08-13 17:00:07

标签: jquery ajax asp.net-mvc json

是否可以在使用Ajax GET的查询字符串末尾包含一个简单的JSON字符串?我正在使用MVC并从View发送到Controller。在Controller中我希望能够做到这一点:

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"]);
    }

    ...
}

在视图中:

var myObj = '{ "Name" : "John", "Age" : "22" }';
$.ajax({
    type: "GET",
    url: "/GetData/?Id=" + $("#Id").val(),
    dataType: "json",
    data: {
        a: $('#a').val(),
        myObj: myObj
    },

    ...

});

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

如果可以使用这种组合,有人会指出我的代码错误吗?

1 个答案:

答案 0 :(得分:1)

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

Examples of AJAX 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)
    {

    }
});

并确保您的Action正在接受HTTP POST动词。

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

有关其他信息,请参阅this reference