私は、1つのオブジェクト 'Budget'と1つの配列 'BudgetDetails'を持つvmという複雑なオブジェクトを渡す必要があります。 ajaxを使ってこの複雑なオブジェクトを私のapiコントローラに送信する "Uncaught RangeError:最大呼び出しスタックサイズを超えました"というエラーメッセージが表示されます。複雑なオブジェクトをajaxを使ってWeb APIコントローラに送信
これは私のjQueryのコードです:私はコメントとして、あなたが私のコンソールにエラーが表示されない配列でHTMLテーブルの各行を挿入部分を入れて、とせずに送信する場合
$(document).ready(function() {
var vm = {
Budget: {},
BudgetDetails: []
}
$("#submit").click(function() {
vm.Budget = {
DateIssue: $("#dateIssue").val(),
BudgetAccepted: $("#budgetAccepted").val(),
VehicleId: $("#vehicleId").val()
};
$('#budgetDetail tr.detail').each(function (index, tr) {
var lines = $('td', tr).map(function (index, td) {
return $(td).text();
});
vm.BudgetDetails.push(lines);
});
$.ajax({
url: "/api/budgets",
method: "post",
data: vm,
success: function() {
console.log("ok");
}
});
});
});
APIにオブジェクト 'Budget'を発行してください。 'BudgetDetails'配列を 'Budget'オブジェクトと共に送信しようとするとエラーが表示されます。
これは私のAPIのコントローラーです:
[HttpPost]
public IHttpActionResult CreateBudget(NewBudgetDto newBudgetDto)
{
return Ok();
}
これは私のNewBudgetDtoクラスです:
public class NewBudgetDto
{
public BudgetDto Budget { get; set; }
public List<BudgetDetailDto> BudgetDetails { get; set; }
}
これは私のBudgetDtoクラスです:
public class BudgetDto
{
public int Id { get; set; }
public DateTime DateIssue { get; set; }
public VehicleDto Vehicle{ get; set; }
public int VehicleId { get; set; }
public bool BudgetAccepted { get; set; }
}
これは私のBudgetDetailDtoクラスです:
public class BudgetDetailDto
{
public int Id { get; set; }
public int BudgetId { get; set; }
public int ProductId { get; set; }
public byte Quantity { get; set; }
public int Price { get; set; }
public int Discount { get; set; }
public int Total { get; set; }
}
私は本当に問題がどのようなものか分かりません。
'データ:JSON.stringify {{newBudgetDto:VM})'と追加 'のcontentType:「アプリケーション/ json'' –
BudgetDetailDtoはprobly BudgetDtoへの参照を有し、応答がある場合には、再帰的にスタックを殺していデシリアライズしようとしています。またはBudgetDtoにはNewBudgetDtoのリファレンスがあります。 – Fals
私はJSON.stringify {{newBudgetDto:vm})とcontentType: 'application/json'を入れて、ヌル値を送信しています。 –