是否可以使用Ajax GET在查询字符串的末尾包含一个简单的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"]);
}
...
}
In the View:
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
总是空的。我怀疑这是因为data:
已经创建了一个JSON和myObj不是在正确的格式,但我不知道如何解决这个问题,似乎找不到一个例子显示如何。
如果这个组合是可能的,有人可以指出我的代码是错误的吗?
由于您希望传递的数据量(12个参数)可能包含大量数据,因此您可能希望使用POST而不是GET。
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)
{
}