【问题标题】:Pass a Javascript ES6 Map() to an MVC Controller将 Javascript ES6 Map() 传递给 MVC 控制器
【发布时间】:2018-08-11 22:50:47
【问题描述】:

我正在使用 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&lt;string, bool&gt; 组合,但均无济于事。

谁能告诉我我做错了什么?

【问题讨论】:

  • 请看documentation;默认情况下,数据以application/x-www-form-urlencoded 发送。您可能想要使用 JSON:contentType: "application/json"
  • 您是否有特殊原因要使用Map? - 您不能使用 ajax 发送 Map - 在发布之前需要将其转换回 object

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


【解决方案1】:

在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

【讨论】:

    猜你喜欢
    • 2013-03-19
    • 2020-08-23
    • 2014-04-15
    • 2013-05-25
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多