之前总结了一篇关于ajax使用
.ajax传递数组的博客,但是每次使用
.
a
j
a
x
传
递
数
组
的
博
客
,
但
是
每
次
使
用
.ajax都需要配置url、dataType、contentType等,太过麻烦,于是想尝试使用$.post方法进行传值,最近正好在项目中需要使用,做一下笔记
一、简单类型的list传递
function CreateTask() {
var rows = $('#itemGrid').datagrid('getSelections');
if (rows) {
var ids = [];
$.each(rows, function (index, value) {
ids.push({ name:'ids',value:value.Id });
})
ids.push({ name: 'taskname', value: $('#taskname').val() });
var selected = $('#userTree').tree('getSelected');
if (selected) {
ids.push({ name: 'recieverid', value: selected.attributes.UserId });
ids.push({name:'recievername',value:selected.text});
}
$.post("/Inspection/CreateTask", ids, function (data) {
$.messager.alert(data.title,data.msg);
}, 'json')
}
}
后台代码
public ActionResult CreateTask(List<int> ids,string taskname,int recieverid,string recievername)
{
}
主要思路是网数组中添加键值对对象,name属性的值需要与后台controller接收的数据字段同名
二、复杂类型对象list传递
根据需要,传一个List < ExportPackagesPara>对象,对象定义如下:
public class ExportPackagesPara
{
public int Id { get; set; }
public string text { get; set; }
public string entity { get; set; }
public string filter { get; set; }
}
function AlertMessage() {
var checks = packageTree.getCheckedNodes();
var pakages = {};
var i = 0;
checks.forEach(function (currentValue, index) {
var node = packageTree.getDataById(currentValue);
if (node.text == "资源" || node.text == "资产" || node.text == "资金") {
} else {
pakages["paras[" + i + "].Id"] = node.Id;
pakages["paras[" + i + "].text"] = node.text;
pakages["paras[" + i + "].entity"] = node.entity;
pakages["paras[" + i + "].filter"] = node.filter;
i++;
}
});
$.post("/ExportPackages/ExportPackages?plugin=LSRPM.Management", pakages, function (data) {
var obj_data = data;
}, 'json');
}
后台代码
public ActionResult ExportPackages(List<ExportPackagesPara> paras){
}
需要注意的是,如果采用formdata传递数据,则传递的数据样式必须是paras[0].Id(Id为对象的属性),不能是paras[0][Id]这种,而且数组序号必须从0开始且连续,中间不能跳号。
GOOD LUCK!!!