如何通过 ajax MVC 将对象列表传递给方法

How to pass list of object to method by ajax MVC

大家好,我想在 ajax 调用中传递列表,但在我的控制器中,我得到的是空数据

这是我的代码

Class

public class CurrentProcessNameAndBucketName
{
    public string ProcessName { get; set; }
    public string BucketName { get; set; }
    public int Id { get; set; }
    public int AccountId { get; set; }
    public int FromProcessId { get; set; }
    public int FromBucketId { get; set; }
    public int ToProcessId { get; set; }
    public int ToBucketId { get; set; }
    public string FromRefField { get; set; }
    public string ToRefField { get; set; }
    public int UserId { get; set; }
}

控制器

        [HttpPost]
        [Authorize]
        [Route("api/Master/Workflow/InsertRefFieldClone")]
        public bool InsertRefFieldClone(List<BusinessEntities.Master.CurrentProcessNameAndBucketName> item)
        {
            try
            {
                BusinessLayer.IMaster.IWorkflow a = (BusinessLayer.IMaster.IWorkflow)DALFinder.GetInstance(typeof(BusinessLayer.IMaster.IWorkflow));
                for (var i = 0; i < item.Count(); i++)
                {
                    a.InsertRefFieldClone(item[i]);
                }
                return true;
            }
            catch (Exception ex)
            {
                Utils.Logger.Instance.LogException(ex);
                return false;
            }
        }

我的前端

const saveDetails = [];
const dataLength = tbody_Copy.children().length;
for (let i = 0; i < dataLength; i++) {
    const saveDetail = [];
    saveDetail.Id = 0;
    saveDetail.AccountId = Utils.getCurrentUser().AccountId;
    saveDetail.FromProcessId = ctrlProcess.val();
    saveDetail.FromBucketId = ctrlBucket.val();
    saveDetail.ToProcessId = processId;
    saveDetail.ToBucketId = bucketId;
    saveDetail.FromRefField = $('#' + tbody_Copy.children().eq(i).find('SELECT').attr('id')).val();
    saveDetail.ToRefField = tbody_Copy.children().eq(0).children().eq(1).text();
    saveDetail.UserId = Utils.getUserId();
    saveDetails.push(saveDetail);
}
const data = saveDetails;
var access_token = Utils.getToken();
$.ajax({
    url: Utils.getWebApiUrl() + "/api/Master/Workflow/InsertRefFieldClone",
    contentType: 'application/json; charset=utf-8',
    data: JSON.stringify(data),
    dataType: 'json',
    type: 'POST',
    beforeSend: function (xhr) {
        xhr.setRequestHeader('Authorization', 'bearer ' + access_token);
    },
    success: function (response) {
        debugger
    },
    failure: function (response) {
        Utils.showError(JSON.stringify('Records cannot be saved please try again later.'));
    },
    error: function (response) {
        Utils.showAlert(response.responseText);
    }
});

我不明白我的代码有什么问题,它对我来说看起来不错,但它不起作用。 我在网上甚至在Whosebug上看到了很多例子和问题,但仍然没有解决这个问题。

将不胜感激。

尝试使用对象而不是数组来初始化您的详细信息:

const saveDetail = []; // wrong

const saveDetail = {}; // correct

参考this page