MVC Action通过Jquery AJAX请求接收错误的参数

时间:2018-03-19 17:36:38

标签: javascript jquery ajax asp.net-mvc asp.net-ajax

我试图通过处理简单的MVC项目来熟悉ASP MVC。

但有一个我无法弄清楚的问题。

在某些事件中,AJAX请求被发送到一个采取IDictionary类型参数的动作。

但是接收的参数包含控制器名称,操作名称和语言,而不是Jquery AJAX调用中指定的数据。

请看下面的代码。

RouterConfig

public static void RegisterRoutes(RouteCollection routes)
{
  routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

  routes.MapRoute(
    name: "Language",
    url: "{lang}/{controller}/{action}/{id}",
    defaults: new {controller = "Login", action="Index", id=UrlParameter.Optional},
    constraints: new {lang = @"en|fr"}
  );

  routes.MapRoute(
    name: "Default",
    url: "{controller}/{action}/{id}",
    defaults: new { controller = "Login", action = "Index", id = UrlParameter.Optional, lang = "en" }
  );
}

行动

public ActionResult ApproveUsers(IDictionary<string, string> CheckedUsers)
{
  return View();
}

JQuery的

  $('#confirmModal #action').click(function () {
  var cb = {};
  var data = {};
  $("input:checkbox:checked").each(function () {
    var key = $(this).attr('value');
    var val = $(this).closest('tr').next().find('table').attr('id');
    cb[key] = val;

  });
  $.ajax({
    type: "POST",
    url: '/AdminHome/ApproveUsers',
    dataType: "html",
    contentType: 'application/json',
    data : JSON.stringify(cb),
    success: function (result) {
        alert("success");
    },
    error: function(result) {
        alert("failed");
    }
  });
});

因此,当单击按钮时,所有选中的复选框数据将作为keyvaluepair发送给ApproveUsers操作。

但无论Jquery中的cb对象包含什么,ApproveUsers操作中的IDictionary参数仅如下所示

 [0] {[ contoller, AdminHome ]}
 [1] {[ action, ApproveUsers ]}
 [2] {[ lang, en]} 

这看起来像RouteConfig有问题。但我不知道为什么。

如果有人能帮助我知道原因并解决这个问题我真的很感激。

谢谢,

1 个答案:

答案 0 :(得分:1)

我发现我的代码有什么问题。

我在AJAX调用中缺少参数名称,因此参数biding失败。

史蒂夫说,代码应该如下所示。

 data : JSON.stringify(CheckedUsers:cb)