我试图通过简单的 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/