【问题标题】:Javascript posting array displaying syntax wrongJavascript发布数组显示语法错误
【发布时间】:2015-11-10 17:46:45
【问题描述】:

我的actionresult如下

[HttpPost]
public ActionResult AddRoomFeature(string[] selectedFeatures, int RoomID)
{
    return View();
}

Javascript Ajax

var selectedFeatures = [];

$('input.Hotelfeature:checkbox:checked').each(function () {
    selectedFeatures.push($(this).val());
});

$.ajax({
    type: 'POST',
    url: '@Url.Action("AddRoomFeature", "HotelRoom")',
    data: {
        selectedFeatures: JSON.stringify(selectedFeatures),
        RoomID: $("#RoomID").val()
    },
    success: function (data) {
    },
    error: function (XMLHttpRequest, textStatus, errorThrown) {
        alert("error");
    }
});

问题:

如果我将 selectedFeatures 发布到 actionresult,

selectedFeatures 将值显示为 ["\1",\"2\"]

通常值应在字符串数组中显示为 "1","2"

我在 ajax 代码中错过了什么?

任何帮助将不胜感激。

谢谢。

【问题讨论】:

    标签: javascript ajax asp.net-mvc


    【解决方案1】:

    SelectedFeatures 作为单个字符串值接收,因为您在发送 ajax 请求之前在实际数组上使用了JSON.stringify。当您发出 jQuery ajax 请求时,您可以使用纯 JavaScript 对象指定要发送到服务器的数据。不需要手动序列化。数据被转换为查询字符串或请求正文。默认内容类型为application/form-url-encoded

    所以,你的代码应该变成:

    var selectedFeatures = [];
    
    $('input.Hotelfeature:checkbox:checked').each(function () {
        selectedFeatures.push($(this).val());
    });
    
    $.ajax({
        type: 'POST',
        url: '@Url.Action("AddRoomFeature", "HotelRoom")',
        data: {
            selectedFeatures: selectedFeatures, // Note the missing JSON.stringify
            RoomID: $("#RoomID").val()
        },
        success: function (data) {
        },
        error: function (XMLHttpRequest, textStatus, errorThrown) {
            alert("error");
        }
    });
    

    【讨论】:

    • 几乎 :)。参数selectedFeatures 将是null。您需要添加 traditional: true, ajax 选项才能使其正常工作
    猜你喜欢
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    • 2019-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多