首页 > 解决方案 > 将 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>无济于事。

有人可以告诉我我做错了什么吗?

标签: javascript.netasp.net-mvc-4ecmascript-6

解决方案


在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


推荐阅读