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

JQu*_*ile 6 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
});
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我有:

public class MyServiceController : Controller
{
  [AcceptVerbs(HttpVerbs.Get)]
  public ActionResult MyAction(string emailAddress)
  {
    return Json(new { address:emailAddress });
  }
}
Run Code Online (Sandbox Code Playgroud)

我的路线设置如下:

context.MapRoute(
  "MyAction",
  "myService/{controller}/MyAction",
  new { controller = "MyService", action = "MyAction" }
);
Run Code Online (Sandbox Code Playgroud)

我有一种预感,我在路线上遗漏了一些东西.但我不确定它是什么.我遵循与POST操作使用的语法相同的语法.具有这些操作的参数可以正常工作.但是我的GET操作的参数(如上面的参数)具有空值.我的问题是,我做错了什么,如果我需要传递多个参数怎么办?

非常感谢你的帮助!

Dar*_*rov 4

JsonValueProviderFactory 允许您将 JSON 请求发送到 ASP.NET MVC 3 中的控制器操作,可与 POST 请求配合使用。对于 GET 请求,您可以使用标准请求:

var vm = { emailAddress:"someone@somewhere.com" };
$.ajax({
    url: "/myService/myAction",
    type: "GET",
    data: vm,
    success: myAction_Succeeded,
    error: myAction_Failed
});
Run Code Online (Sandbox Code Playgroud)

或者,如果您想发送 JSON 请求,请type: 'POST'在 AJAX 请求中进行修改。显然,在这种情况下,您必须HttpVerbs.Get从控制器操作中删除该属性,该属性目前仅限于 GET 请求。