将 Javascript ES6 Map() 传递给 MVC 控制器
Pass a Javascript ES6 Map() to an MVC Controller
我正在使用 ES6 中的 Map()
功能来创建密钥对值列表,将 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");
}
});
在后端你必须解析响应,见。
我正在使用 ES6 中的 Map()
功能来创建密钥对值列表,将 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");
}
});
在后端你必须解析响应,见