javascript - 将 Javascript ES6 Map() 传递给 MVC 控制器
问题描述
我正在使用Map()
ES6 中的功能来创建密钥对值列表,将 ID 号设置为布尔值。我想将此 Javascript 对象传递给 MVC 4 控制器。
这是我的 Javascript:
var bankHolidays = new Map();
$('.bank-holiday-switch').each(function () {
var id = $(this).attr('id');
var isChecked = $(this).is(':checked');
bankHolidays.set(id, isChecked);
});
$.ajax({
url: '/AdminPanel/Settings/SaveBankHolidays',
type: 'POST',
data: { bankHolidays: bankHolidays },
success: function (result) {
alert("Success");
}
});
我可以console.log()
映射对象并查看它是否按预期创建。但是,当我将它传递给这个 MVC 控制器时:
[HttpPost]
public JsonResult SaveBankHolidays(Dictionary<int, bool> bankHolidays)
{
// DO stuff
}
..没有抛出错误,但它只是说bankHolidays
字典中有0个值。我可以毫无问题地调用该控制器中的其他操作。我尝试了许多不同的组合Dictionary<string, bool>
无济于事。
有人可以告诉我我做错了什么吗?
解决方案
在http协商中,xhr在这种情况下,我们必须发送字符串,所以你需要一些字符串表示Map()
,在我看来,最好的选择是以某种方式使用JSON字符串化,因为JSON的解析有广泛的支持在服务器端代码中:
var bankHolidays = new Map();
bankHolidays.set(1, 2);
bankHolidays.set(3, 4);
var result = JSON.stringify([...bankHolidays]);
console.log(result)
在您的代码中类似于:
$.ajax({
url: '/AdminPanel/Settings/SaveBankHolidays',
type: 'POST',
data: JSON.stringify([...bankHolidays]),
success: function (result) {
alert("Success");
}
});
在后端,您必须解析响应,请参阅this。
推荐阅读
- postgresql - Postgresql 中存储过程中的表 alis 的架构不存在
- python - 如何在 python 的列表元素中拆分两个字符?
- vba - 我在打开表单时遇到问题,在访问中,让它进入最大屏幕尺寸
- ssh - 在仅允许入站 SSH 连接的目标计算机上使用 VSCode 中的“远程 SSH”
- python - 如何查询每小时的入住人数?
- xcode - 在 Xcode 的开发者文档窗口中调整字体大小?
- json - 如何使用代码中的 json 在 pixjs 中加载 spritesheet?
- javascript - Promised Web Workers 的速度
- html - 将元素固定在粘性元素下方
- mysql - 编写查询以在每一行中打印员工姓名和 UIN。如果不存在 UIN,则在其位置打印 NULL。输出顺序无关紧要