数组参数传递给控制器的方式

开发工具与关键技术:Visual Studio 与jquery、C#

作者:黄灿

撰写时间:2019.7.5

在项目上多多少少都会有些地方会使用到批量增删改的地方,删除可以通过ID获取到每一条数据然后拼接起来传递到控制器,然后在控制器里分割字符串,进行foreach循环删除,新增需要通过for循环获取到数据,但是也不能每获取到一条数据就传参一次数据,所以我把for循环获取到的数据封装到一个数组里面,然后通过数组传递给后台控制器,数组的传参我试过了多种方法:一、jquery.form插件里的ajaxSbumit提交,二、ajax异步请求提交,三、直接post请求提交。三种方法我都尝试过了,最终得到的结果是ajaxSbumit提交是不能把数组传递过去的,获取到数组,控制器也是为null,ajax异步请求提交和直接post请求提交这两种方法是可行的

Javascript循环获取数据把获取的数据添加到数组里的代码:



var PurchaseDetailArray
= new Array();//申明一个数组

var tr = $("#tabDetail").find("tr");

            //循环获取表格中的信息

            for (var i = 1; i < tr.length - 1; i++) {

                //获取采购订单配件明细的信息

                var PartsID = $("#PartsID" + i).val();//获取配件ID

                var VehicleTypeID = $("#VehicleTypeID" + i).val();//获取车型ID

                var Quantity = $("#Quantity" + i).val();//获取数量

                var Discount = $("#Discount" + i).val();//获取折扣

                var Money = $("#Money" + i).val();//获取金额

                var ActualQuantity = $("#ActualQuantity" + i).val();//获取实收数量

                var ArrayDetail = new Object();//申明一个对象

                ArrayDetail = { PartsID:
PartsID, VehicleTypeID: VehicleTypeID, Quantity: Quantity, Discount: Discount,
Money: Money, ActualQuantity: ActualQuantity };//对象赋值

                PurchaseDetailArray.push(ArrayDetail); //使用push()方法想数组里添加对象

            }


因为表格中有表头行,索引是从零开始,所以i从1开始,不循环表头行;循环长度i <
tr.length – 1是因为表格里最后一行是计算总值,最后一行也不需要循环,所以循环长度为获取到的表格长度-1减去最后一行

方式一:ajax异步请求提交

Javascript代码:



$.ajax({

            url: '@Url.Action("savePurchasrOrder")',            

            data: { "PurchaseDetailArray ":
PurchaseDetailArray  },//数组            

            // data: ArrayDatil, //对象           

            dataType: "json",            

            type: "POST",            

            //traditional: true,            

            success: function (returnJson) { 

                if (returnJson.State) {

                   
layer.confirm(returnJson.Text + '\n' + "是否立即审核该采购订单?\n点击<确定>--该订单会立即生效" + '\n' + "点击<取消>--只保存当前单据但不生效,只有审核后,该单据才会生效"

                        + '\n' + "\n现在未审核,下次打开未审核的单据时,您可以进行审核!", { icon: 3, title: "提示" }, function () {

                            Audit();//调用审核的方法

                        });

                }

                else {

                   
layer.alert(returnJson.Text, { icon: 0, title: "提示" });

                }

            }

        });


ajax请求提交是异步请求,传递的data可以为数组也可以为对象,我传递的是数组

方法二、直接post请求提交

Javascript代码:



$.post("/ProcurementAndSales/PurchaseOrder/savePurchasrOrder",

                {

                    PurchaseDetailArray:
PurchaseDetailArray,

                }, function (returnJson) {

                    layer.close(layIndex);

                    if (returnJson.State) {

                       
layer.confirm(returnJson.Text + '\n' + "是否立即审核该采购订单?\n点击<确定>--该订单会立即生效" + '\n' + "点击<取消>--只保存当前单据但不生效,只有审核后,该单据才会生效"

                            + '\n' + "\n现在未审核,下次打开未审核的单据时,您可以进行审核!", { icon: 3, title: "提示" }, function () {

                                Audit();//调用审核的方法

                            });

                    }

                    else {

                       
layer.alert(returnJson.Text, { icon: 0, title: "提示" });

                    }

                });


因为ajax异步请求的请求类型也是post,所以直接使用post请求提交也是可以把数组传递过去的

控制器Controller代码:

因为代码有点长,所以这里只给出循环保存数组的代码

public ActionResult savePurchasrOrder(SYS_PurchaseDetail sysPurchaseDetail, List<SYS_PurchaseDetail> PurchaseDetailArray)

这里接受数组是要List一个表接收的这个表是你存放数组里的数据的表



//foreach循环保存数组里的数据

                                foreach (var ArrayData in
PurchaseDetailArray)

                                {

                                    //查询刚刚新增的采购订单的主键ID,新增的ID肯定在最后一条数据

                                    var selPurchasrOrderID
= (from tbPurcharsOrder in
myModels.PW_PurchaseOrder

                                                             
select new

                                                             
{

                                                                 
PurchaseOrderID = tbPurcharsOrder.PurchaseOrderID,

                                                             
}).ToList();

                                    int listID =
selPurchasrOrderID.LastOrDefault().PurchaseOrderID;

 

                                   
sysPurchaseDetail.PurchaseOrderID = listID;//查出来的主键ID,赋值到明细的外键

                                    //把数组里的数据赋值添加到表中的字段

                                   
sysPurchaseDetail.PartsID = ArrayData.PartsID;

                                   
sysPurchaseDetail.VehicleTypeID = ArrayData.VehicleTypeID;

                                   
sysPurchaseDetail.Quantity = ArrayData.Quantity;

                                   
sysPurchaseDetail.Discount = ArrayData.Discount;

                                   
sysPurchaseDetail.Money = ArrayData.Money;

                                   
sysPurchaseDetail.ActualQuantity = ArrayData.ActualQuantity;

 

                                   
myModels.SYS_PurchaseDetail.Add(sysPurchaseDetail);

                                   
myModels.SaveChanges();

                                }


jquery.form插件里的ajaxSbumit提交是不可行的,所以代码就不列举出来了

猜你喜欢

转载自blog.csdn.net/weixin_44542088/article/details/94766873