问题:

我正在尝试通过 jquery post 发送一个字符串数组,但它们没有被正确解析,我得到的只是列表中的空值。

javascript:

var array = [];
array.push("test")
array.push("test2")
array.push("tes3")

$.post("Admin/FilteredKeys", $.param(JSON.stringify({ Ids: array, OnlyActive: true }, true)));

C# 模型:
public class MySearch
{
    public bool OnlyActive { get; set; } = true;
    public List<string> Ids { get; set; }
}

Controller 中的 Action :
public async Task<IActionResult> FilteredKeys(MySearch filter)
{
    var data = await _service.GetFilteredKeyTypes(filter);
    return View();
}

我用谷歌搜索,发现传统属性需要设置为 true 但它保持不变,我也尝试了这个片段:
$.ajax({
    type: "POST",
    url: "Admin/FilteredKeys",
    data: postData,
    success: function(data){
        alert(data.Result);
    },
    dataType: "json",
    traditional: true
});

这是一个 .net 核心项目,我需要在某处更改其他参数吗?

编辑:

忘了补充,我最初的尝试是这样的:
$.Admin.worker.postJson("Admin/FilteredKeys", JSON.stringify({ Ids: array, OnlyActive: true }), function (data) {
    var t = "";
});

postJson: function (url, data, callback) {
    $.LoadingOverlay("show");
    $.ajax({
        url: url,
        type: 'POST',
        data: data,
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
            if (callback)
                callback(data);
            $.LoadingOverlay("hide");
        },
        error: function (event, jqxhr, settings, thrownError) {
            //$.helpers.errorHandler($("#fileDialogErrors"), event.responseText);
            $.LoadingOverlay("hide");
        }
    });
}

最佳答案

因为我相信接受的答案是不正确的 - 这是替代答案(类似,但与此处的其他答案不同)。首先,您需要使用 FromBody 属性装饰模型:

public async Task<IActionResult> FilteredKeys([FromBody] MySearch filter)
{
    var data = await _service.GetFilteredKeyTypes(filter);
    return View();
}

ajax 调用应该是这样的:
var array = [];
array.push("test")
array.push("test2")
array.push("test3")
 $.ajax({
    type: "POST",
    url: "Admin/FilteredKeys",
    data: JSON.stringify({ Ids: array, OnlyActive: true}),
    contentType: "application/json; charset=utf-8",
    success: function(data){
        // ...
    },
    failure: function(errMsg) {
        // ...
    }
});

关于c# - 将字符串数组发布到 .net-core mvc,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49754719/

10-11 10:23