Asp.net mvc 通过jQuery AJAX将对象数组传递给控制器,ASP.NET Core 2.2 MVC中的操作数据始终为空-它使用的是.NET Framework 4.5

Asp.net mvc 通过jQuery AJAX将对象数组传递给控制器,ASP.NET Core 2.2 MVC中的操作数据始终为空-它使用的是.NET Framework 4.5,asp.net-mvc,asp.net-core-mvc,Asp.net Mvc,Asp.net Core Mvc,我在一个项目中工作,我需要使用ajax调用来保存包含订单细节的页面中的对象数据。当我在.NET framework 4.5版中使用project时,它工作得非常好,但当我使用ASP.NET核心MVC时,它就不工作了。需要帮忙吗 我在类似的问题上尝试了每一件事,但都不起作用。例如,我使用符号[frombody]——但我仍然有同样的问题 我有以下控制器操作: public ActionResult CreateOrders([FromBody] T_POS_ENT_ORDER_DETIALS_Tem

我在一个项目中工作,我需要使用ajax调用来保存包含订单细节的页面中的对象数据。当我在.NET framework 4.5版中使用project时,它工作得非常好,但当我使用ASP.NET核心MVC时,它就不工作了。需要帮忙吗

我在类似的问题上尝试了每一件事,但都不起作用。例如,我使用符号
[frombody]
——但我仍然有同样的问题

我有以下控制器操作:

public ActionResult CreateOrders([FromBody] T_POS_ENT_ORDER_DETIALS_Temp []T_POS_ENT_ORDER_Data)
{
    GRepository<T_POS_ENT_ORDER_DETIALS_Temp> t_pos_ent_orderOpr = new GRepository<T T_POS_ENT_ORDER_DETIALS_Temp>();

    T_POS_ENT_ORDER_Data.order_Date = DateTime.Now;
    t_pos_ent_orderOpr.Add(T_POS_ENT_ORDER_Data);

    return Json(new { msg = "Successfully added " }); 
}
我也有这门课:

public class T_POS_ENT_ORDER_DETIALS_Temp
{
    public string LocPrice { get; set; }
    public string LocProductID { get; set; }
    public string discount { get; set; }
    public string  posNumber { get; set; }
    public string productName { get; set; }
    public int productQynt { get; set; }
}

仅显示订单详细信息始终为空时没有错误…

我在您的数据中没有看到数组,只有一个带有某些字段的对象。另外,
billArray
T\u POS\u entu\u ORDER\u Data
不匹配,模型绑定通过名称匹配完成

要解决此问题,您应该将代码调整为仅发送和接收单个对象:

public ActionResult CreateOrders(T_POS_ENT_ORDER_DETIALS_Temp T_POS_ENT_ORDER_Data)

...

var DATA = {
    LocPrice: "12",
    LocProductID: "1002",
    discount: "0",
    posNumber: "1",
    productName: "soap",
    productQynt: "1"
 });

$.ajax({
    url: '/AjaxT_POS_ENT_ORDER/CreateOrders',
    data: JSON.stringify(DATA),
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    type: "POST",
    async: false,
    success: OnSuccess
});

小调,类名“DETIALS”->“DETAILS”中有一个输入错误。

您需要将
JSON.stringify({'billArray':DATA})
更改为
JSON.stringify(DATA)
,如下所示:

DATA.push({ LocPrice: "12",LocProductID: "1002" ,discount: "0",posNumber: "1" ,productName: "soap",productQynt: "1"});
1.意见:

<script>
    $(document).ready(function () {
        var DATA = [];
        DATA.push({ LocPrice: "12" });
        DATA.push({ LocProductID: "1002" });
        DATA.push({ discount: "0" });
        DATA.push({ posNumber: "1" });
        DATA.push({ productName: "soap" });
        DATA.push({ productQynt: "1" });
        $.ajax({
            url: '/AjaxT_POS_ENT_ORDER/CreateOrders',
            data: JSON.stringify(DATA),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            type: "POST",
            async: false
        });
    });
</script>
3.结果:

顺便说一下,如果要将它们作为一个数组对象而不是六个数组传递,则需要更改数据,如下所示:

DATA.push({ LocPrice: "12",LocProductID: "1002" ,discount: "0",posNumber: "1" ,productName: "soap",productQynt: "1"});

我在.Net Core 3.1中工作,这对我很有用:

1。控制器

尝试[FromForm]而不是[FromBody]

    [HttpPost]
    public ActionResult CreateOrdersPOSTObject([FromForm] List<T_POS_ENT_ORDER_DETIALS_Temp> prm)
    {
        //your logic...
        return Json(new { msg = "Successfully added " });
    }
或者,如果您愿意,您可以使用速记$。post具有相同的结果

            var DATA = [];
            DATA.push({ LocPrice: "12", LocProductID: "1002", discount: "0", posNumber: "1", productName: "soap", productQynt: "1" });
            DATA.push({ LocPrice: "23", LocProductID: "1003", discount: "0", posNumber: "1", productName: "shampoo", productQynt: "1" });
            DATA.push({ LocPrice: "7",LocProductID: "1004" ,discount: "0",posNumber: "2" ,productName: "sponge",productQynt: "2"});

            $.post(
                '@Url.Content("~/home/CreateOrdersPOSTObject")',
                { "prm": DATA },
                function () {
                  alert( "success" );
                })
              .fail(function() {
                alert( "error" );
              });

我做了你说的每一件事,但当我在controllerTry中进行调试时,对象仍然是空的,将传递的对象减少为单个字符串,直接回到基础并从那里开始构建。DATA=“XXX”并且在您的控制器中使用[HttpPost]CreateOrders(字符串内容)等。谢谢,这是我在尝试了几个小时的不同解决方案后唯一能做的事情。
            var DATA = [];
            DATA.push({ LocPrice: "12", LocProductID: "1002", discount: "0", posNumber: "1", productName: "soap", productQynt: "1" });
            DATA.push({ LocPrice: "23", LocProductID: "1003", discount: "0", posNumber: "1", productName: "shampoo", productQynt: "1" });
            DATA.push({ LocPrice: "7",LocProductID: "1004" ,discount: "0",posNumber: "2" ,productName: "sponge",productQynt: "2"});

            $.ajax({
                url: '@Url.Content("~/home/CreateOrdersPOSTObject")',
                data: { "prm": DATA },
                type: "POST",
                dataType: "json",
                async: true
            });
            var DATA = [];
            DATA.push({ LocPrice: "12", LocProductID: "1002", discount: "0", posNumber: "1", productName: "soap", productQynt: "1" });
            DATA.push({ LocPrice: "23", LocProductID: "1003", discount: "0", posNumber: "1", productName: "shampoo", productQynt: "1" });
            DATA.push({ LocPrice: "7",LocProductID: "1004" ,discount: "0",posNumber: "2" ,productName: "sponge",productQynt: "2"});

            $.post(
                '@Url.Content("~/home/CreateOrdersPOSTObject")',
                { "prm": DATA },
                function () {
                  alert( "success" );
                })
              .fail(function() {
                alert( "error" );
              });