繁体   English   中英

将字符串数组发布到.net-core mvc

[英]Posting array of strings to .net-core mvc

问题:

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

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; }
}

控制器中的动作:

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

我已经在Google上搜索了一下,发现传统属性需要设置为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) {
        // ...
    }
});

为什么不这样:

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

这个答案是为了替代(如果有人会喜欢此解决方案):

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

太确定控制器试图从主体中解析模型,您可以添加FromBody属性:

public async Task<IActionResult> FilteredKeys([FromBody] MySearch filter)
{
...
}

另外,您应该在请求中添加application / json内容类型:

$.ajax({
    type: "POST",
    url: ...,
    data: ...,
    success: ...
    contentType: "application/json"
});
 $.ajax({
        type: "POST",
        url: "Admin/FilteredKeys",
        data: { filter: postData},
        success: function(data){
            alert(data.Result);
        },
        dataType: "json",
        traditional: true
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM