如何从Ajax将具有多个值的json对象发布到Controller

时间:2019-02-01 18:34:40

标签: asp.net-mvc asp.net-core asp.net-ajax javascript-objects

我有这个Ajax帖子致力于单个值,但是我需要它用于多个值。我想念什么?

我已经尝试将公共类“值”设置为列表和Guid []。我试图将方法参数调整为List AND Value []。不知道还有什么尝试。

Class:
public class Value
{
    public Guid TimeId { get; set; }
}

Method:
public IActionResult ApproveAllTimesheets([FromBody]Value information)

View JS:
function SubAll() {
        var selectedValues = $('#timesheet').DataTable().column(0).checkboxes.selected().toArray();

        var instructions = {};
        for (var TimeId in selectedValues) {
            instructions[TimeId] = { TimeId: selectedValues[TimeId] };
        }

        var inst = JSON.stringify(instructions);

        $.ajax({
            url: "/Admin/ApproveAllTimesheets",
            type: "POST",
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            data: inst,
            success: function (result) {
                alert(result);
            },
            error: function (xhr, textStatus) {
                if (xhr.status == 401) { alert("Session Expired!"); window.location = "/Account"; }
                else {
                    alert('Content load failed!', "info");
                }
            }
        });
    };

如果我通过该对象发送它可以工作,但是我需要像我的ajax帖子一样通过多个值发送。

var指令= {TimeId:“ 13246578-1234-7894-4562-456789123456”};

更新#1 我通过扩展类找到了一种对我有用的结构,现在我只需要弄清楚如何创建正确的对象和数组组合即可。

New Classes:
public class ValueContainer
{
    public List<Value> MasterIds { get; set; }
}

public class Value
{
    public Guid TimeId { get; set; }
}

Method:
 public IActionResult ApproveAllTimesheets([FromBody]ValueContainer information)

Structure I need now (this works hard coded):
 var jsonObject = {
            "MasterIds": [{ TimeId: "13246578-1234-7894-4562-456789123450" }, { TimeId: "13246578-1234-7894-4562-456789123451" }, { TimeId: "13246578-1234-7894-4562-456789123452" }]
        };

我还是这个新手,但是我看到的是jsonObject是一个具有键“ MasterIds”的对象,而对应的值是一个具有键“ TimeId”的对象的数组...这是正确的评估?...以及如何在代码中创建它?

1 个答案:

答案 0 :(得分:0)

您需要创建一个对象数组,然后将其设置在容器对象中:

 var instructions = []; // an array 
    for (var i = 0; i < selectedValues.length; i++) {
        instructions.push({ TimeId: selectedValues[i] };
    }

var Value = {TimeId: instructions}; // creating object with property TimeId as array of guid

var inst = JSON.stringify(Value);
.......
....... your ajax code

,并且您的class属性也应为array类型:

public Guid[] TimeId { get; set; }