我试图通过处理简单的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有问题。但我不知道为什么。
如果有人能帮助我知道原因并解决这个问题我真的很感激。
谢谢,
答案 0 :(得分:1)
我发现我的代码有什么问题。
我在AJAX调用中缺少参数名称,因此参数biding失败。
史蒂夫说,代码应该如下所示。
data : JSON.stringify(CheckedUsers:cb)