如何通过 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
大家好,我想在 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