很抱歉,這個問題已經太久了。我查閱了很多關于 Stack Overflow 的文章,但它并沒有在我的源代碼上運行。我正在使用 ASP.NET Core MVC。
我的 AJAX
function PayAjax(orders, payment, note) {
orders = [{ 'id': 1, 'quantity': 2 }, { 'id': 3, 'quantity': 4 }];
var formData = new FormData();
formData.append('orders', orders);
formData.append('payment', payment);
formData.append('note', note);
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: '/sale/pay',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function (result) {
var x = 1;
},
error: function (error) {
console.log(error);
}
});
}
我的控制器
[HttpPost]
public async Task<IActionResult> Pay(List<Order> orders, int payment, string note)
{
...
}
}
我的物件順序
public class Order
{
public int Id { get; set; }
public int Quantity { set; get; }
}
我的資料正在進入控制器,但我無法訪問值。
訂單的 count = 0。
即使我像下面這樣傳遞 JSON,控制器命令也總是空的
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: '/sale/pay',
type: 'POST',
data: JSON.stringify({ 'orders': orders, 'payment': payment, 'note': note}),
processData: false,
contentType: false,
success: function (result) {
var x = 1;
},
error: function (error) {
console.log(error);
}
});
uj5u.com熱心網友回復:
嘗試將資料formData一一放入:
function PayAjax(orders, payment, note) {
orders = [{ 'id': 1, 'quantity': 2 }, { 'id': 3, 'quantity': 4 }];
var formData = new FormData();
for (var i = 0; i < orders.length; i ) {
formData.append("orders[" i "].Id", orders[i].id);
formData.append("orders[" i "].Quantity", orders[i].quantity);
}
formData.append('payment', payment);
formData.append('note', note);
$.ajax({
dataType: 'json',
url: '/sale/pay',
type: 'POST',
data: formData,
processData: false,
contentType: false,
success: function (result) {
var x = 1;
},
error: function (error) {
console.log(error);
}
});
}
uj5u.com熱心網友回復:
您可以將這些引數請求包裝到單個物件
[HttpPost]
public async Task<IActionResult> Pay(PayRequest request)
public class PayRequest
{
public List<Order> orders {get; set;}
public int payment {get; set;}
public string noteget; set;}
}
uj5u.com熱心網友回復:
如果您想使用 formData 發布它,您應該通過 [FromForm] 注釋獲取引數并將物件轉換為 FormData
public ActionResult Pay([FromForm] List<Order> orders, [FromForm] int payment, [FromForm] string note) {
}
function buildFormData(formData, data, parentKey) {
if (data && typeof data === 'object' && !(data instanceof Date) && !(data instanceof File)) {
Object.keys(data).forEach(key => {
buildFormData(formData, data[key], parentKey ? `${parentKey}[${key}]` : key);
});
} else {
const value = data == null ? '' : data;
formData.append(parentKey, value);
}
}
function jsonToFormData(data) {
const formData = new FormData();
buildFormData(formData, data);
return formData;
}
function pay() {
orders = [{ 'Id': 1, 'Quantity': 2 }, { 'Id': 3, 'Quantity': 4 }];
PayAjax(orders, 2000, 'Hello')
}
function PayAjax(orders, payment, note) {
const dataToSend = {
orders,
payment,
note
}
const data = jsonToFormData(dataToSend)
$.ajax({
contentType: 'application/json; charset=utf-8',
dataType: 'json',
url: '/sale/pay',
type: 'POST',
data,
processData: false,
contentType: false,
success: function (result) {
var x = 1;
},
error: function (error) {
console.log(error);
}
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/410246.html
標籤:
上一篇:如何激活中間件
