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

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

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

但是有一个问题我无法解决。

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

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

请看下面的代码。

路由器配置

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");
    }
  });
});

因此,当单击按钮时,所有选中的复选框数据都会作为键值对发送到 ApproveUsers 操作。

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

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

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

如果有人能帮助我了解原因并解决此问题,我将不胜感激。

谢谢

最佳答案

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

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

正如 Steve 所说,代码应该如下所示。

 data : JSON.stringify(CheckedUsers:cb)

关于javascript - MVC Action 通过 Jquery AJAX 请求接收到错误的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49369134/

相关文章:

javascript - 在 iOS5 网站中使用 native 滚动下拉刷新

javascript - 访问作为对象属性的 jQuery 元素引用

jquery - 如何将: put multiple ajax loader in the page and when you load each of them,的loading...div覆盖它?

javascript - 如何在javascript中更改浏览器历史记录

javascript - 从 jquery ui 按钮中删除悬停和默认状态

javascript - 从表行到详细信息的 AJAX 请求

javascript - 在 dojo 中将 UTC 或 BST 转换为本地用户时区

javascript - 在 Phonegap 中使用 eval() 是一种不好的做法吗?

javascript - 让 jquery 添加(或触发?)动画

java - 使用 jQuery (GWT) 进行表单上传