我有一个使用JQuery与后端通信的网页。我有一些POST动作。但是,我现在有一个GET操作,我注意到传递给它的参数值为null。我的POST动作工作得很好。我无法弄清楚原因。
从我的.html文件中,我有以下JQuery查询:
var vm = { emailAddress:"someone@somewhere.com" };
$.ajax({
url: "/myService/myAction",
type: "GET",
data: JSON.stringify(vm),
contentType: "application/json",
success: myAction_Succeeded,
error: myAction_Failed
});
在我的控制器中,我有:
public class MyServiceController : Controller
{
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult MyAction(string emailAddress)
{
return Json(new { address:emailAddress });
}
}
我的路线设置如下:
context.MapRoute(
"MyAction",
"myService/{controller}/MyAction",
new { controller = "MyService", action = "MyAction" }
);
我有一种预感,我在路线上遗漏了一些东西。但我不确定它是什么。我遵循与POST操作使用的语法相同的语法。具有这些操作的参数可以正常工作。但是我的GET操作的参数(如上面的参数)具有空值。我的问题是,我做错了什么,如果我需要传递多个参数怎么办?
非常感谢你的帮助!
答案 0 :(得分:4)
允许您向ASP.NET MVC 3中的控制器操作发送JSON请求的JsonValueProviderFactory适用于POST请求。对于GET请求,您可以使用标准请求:
var vm = { emailAddress:"someone@somewhere.com" };
$.ajax({
url: "/myService/myAction",
type: "GET",
data: vm,
success: myAction_Succeeded,
error: myAction_Failed
});
或者,如果要在AJAX请求中发送JSON请求,请修改type: 'POST'
。显然,在这种情况下,您必须从控制器操作中删除HttpVerbs.Get
属性,该操作当前将其限制为仅GET请求。