ASP.NET 核心 MVC Ajax 无法正常工作
ASP.NET Core MVC Ajax not working properly
我的问题非常非常简单,但是我在整个互联网上都没有找到关于这个问题的任何解决方案。我是 ASP.NET CORE MVC 的新手,我觉得它的 AJAX 与正常的 ASP.NET.
相比很难理解
好吧,我正在尝试将 array/list 个对象传递给控制器,但我做不到。它非常简单,但无法按照我想要的方式工作(在正常情况下 ASP.NET MVC 工作得很好)。
例如我有这个:
var detalleVenta = new Array();
$.each($("#tableventa tbody tr"), function () {
detalleVenta.push(
{
"ProductoId" : $(this).find("td").eq(6).html(),
"Cantidad" : $(this).find("td").eq(2).html(),
"Precio" : $(this).find("td").eq(3).html(),
"Total" : $(this).find("td").eq(4).html()
}
);
});
$.ajax({
method:"POST",
data: JSON.stringify(detalleVenta),
"dataType": "json",
"contentType": "application/json",
url: '@Url.Action("GuardarVenta", "Venta")',
traditional: true,
success: function(data, textStatus) {
if (data == "OK" ){
location.href = '@Url.Action("Index","Compra")'
}
}
,
})
MVC 控制器:
public JsonResult GuardarVenta([FromBody]List<DetalleBinding> detalle)
{
...
}
public class DetalleBinding
{
public string ProductoId {get; set;}
public string Cantidad {get;set;}
public string Precio {get;set;}
public string Total {get;set;}
}
这种方式对我有用,ajax 成功将列表数据发送到控制器:
但我的问题是...如果我想从该数据发送更多数据怎么办?我通常以 JSON 格式编写它,如下所示:data : { "detalle" : detalleVenta, "Name" : "Mary", "Age" : 34}
但我的问题是这对我不起作用。
我试过这个:
$.ajax({
method:"POST",
data: {"detalle" : JSON.stringify(detalleVenta)},
"dataType": "json",
"contentType": "application/json",
url: '@Url.Action("GuardarVenta", "Venta")',
traditional: true,
success: function(data, textStatus) {
if (data == "OK" ){
location.href = '@Url.Action("Index","Compra")'
}
}
,
})
但它没有绑定到控制器并给我 null。
我做错了什么?
这是 console.log(JSON.stringify(detalleVenta))
显示的内容:
在Doc中可以看到:
Don't apply [FromBody] to more than one parameter per action method. Once the request stream is read by an input formatter, it's no longer available to be read again for binding other [FromBody] parameters.
所以如果你想发送更多数据,最简单的方法是通过查询字符串,如下所示(更改url):
$.ajax({
method:"POST",
data: JSON.stringify(detalleVenta),
dataType: "json",
contentType: "application/json",
url: "Venta/GuardarVenta?age=34&name=Marry",
traditional: true,
success: function(data, textStatus) {
if (data == "OK" ){
location.href = '@Url.Action("Index","Compra")'
}
操作:
public JsonResult GuardarVenta([FromBody]List<DetalleBinding> detalle,int age,string name)
{
...
}
我的问题非常非常简单,但是我在整个互联网上都没有找到关于这个问题的任何解决方案。我是 ASP.NET CORE MVC 的新手,我觉得它的 AJAX 与正常的 ASP.NET.
相比很难理解好吧,我正在尝试将 array/list 个对象传递给控制器,但我做不到。它非常简单,但无法按照我想要的方式工作(在正常情况下 ASP.NET MVC 工作得很好)。
例如我有这个:
var detalleVenta = new Array();
$.each($("#tableventa tbody tr"), function () {
detalleVenta.push(
{
"ProductoId" : $(this).find("td").eq(6).html(),
"Cantidad" : $(this).find("td").eq(2).html(),
"Precio" : $(this).find("td").eq(3).html(),
"Total" : $(this).find("td").eq(4).html()
}
);
});
$.ajax({
method:"POST",
data: JSON.stringify(detalleVenta),
"dataType": "json",
"contentType": "application/json",
url: '@Url.Action("GuardarVenta", "Venta")',
traditional: true,
success: function(data, textStatus) {
if (data == "OK" ){
location.href = '@Url.Action("Index","Compra")'
}
}
,
})
MVC 控制器:
public JsonResult GuardarVenta([FromBody]List<DetalleBinding> detalle)
{
...
}
public class DetalleBinding
{
public string ProductoId {get; set;}
public string Cantidad {get;set;}
public string Precio {get;set;}
public string Total {get;set;}
}
这种方式对我有用,ajax 成功将列表数据发送到控制器:
但我的问题是...如果我想从该数据发送更多数据怎么办?我通常以 JSON 格式编写它,如下所示:data : { "detalle" : detalleVenta, "Name" : "Mary", "Age" : 34}
但我的问题是这对我不起作用。
我试过这个:
$.ajax({
method:"POST",
data: {"detalle" : JSON.stringify(detalleVenta)},
"dataType": "json",
"contentType": "application/json",
url: '@Url.Action("GuardarVenta", "Venta")',
traditional: true,
success: function(data, textStatus) {
if (data == "OK" ){
location.href = '@Url.Action("Index","Compra")'
}
}
,
})
但它没有绑定到控制器并给我 null。
我做错了什么?
这是 console.log(JSON.stringify(detalleVenta))
显示的内容:
在Doc中可以看到:
Don't apply [FromBody] to more than one parameter per action method. Once the request stream is read by an input formatter, it's no longer available to be read again for binding other [FromBody] parameters.
所以如果你想发送更多数据,最简单的方法是通过查询字符串,如下所示(更改url):
$.ajax({
method:"POST",
data: JSON.stringify(detalleVenta),
dataType: "json",
contentType: "application/json",
url: "Venta/GuardarVenta?age=34&name=Marry",
traditional: true,
success: function(data, textStatus) {
if (data == "OK" ){
location.href = '@Url.Action("Index","Compra")'
}
操作:
public JsonResult GuardarVenta([FromBody]List<DetalleBinding> detalle,int age,string name)
{
...
}