【发布时间】:2014-10-07 03:50:22
【问题描述】:
是否可以使用 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"]);
}
...
}
在视图中:
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 的格式不正确,但我不知道如何解决这个问题,而且似乎找不到一个示例来说明如何。
如果这种组合是可能的,有人可以指出我的代码错在哪里吗?
【问题讨论】:
-
在使用查询字符串传递数据时我会小心。尝试使用 POST 代替,您将不必担心查询字符串的限制
-
我无法弄清楚如何在不重新加载视图的情况下使用 POST,所以我决定使用 GET。
-
你可以很容易地改变你必须是 POST 的答案中的属性,然后做同样的事情。不同之处在于请求的大小可以在 POST 中大得多
-
如果您进行异步调用,您的视图不应重新加载,即使它正在使用 POST。你是如何实现这个功能的? hayageek.com/jquery-ajax-post
-
Daniel,我对您关于将其设为 POST 而不是 GET 的意见非常感兴趣。我不喜欢 URL 中凌乱的查询字符串参数。我不确定您要问的是哪个功能实现。似乎每次发出 POST 时,都会调用 View 的关联控制器操作。我看到你提供了一个链接。我现在要去读它。我宁愿发布一个 POST...
标签: jquery ajax asp.net-mvc json