jquery和asp.net mvc数组参数传递给控制器的方式

5 篇文章 0 订阅
2 篇文章 0 订阅

在项目上多多少少都会有些地方会使用到批量增删改的地方,删除可以通过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提交是不可行的,所以代码就不列举出来了

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值