在ASP.NET MVC 3中将参数从JQuery传递到Controller Action

时间:2012-02-11 13:40:56

标签: jquery asp.net-mvc-3

我有一个使用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操作的参数(如上面的参数)具有空值。我的问题是,我做错了什么,如果我需要传递多个参数怎么办?

非常感谢你的帮助!

1 个答案:

答案 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请求。