ajax传页面数据给控制器 说到底这些数据也是 更改数据库 也就是model的处理
说白了ajax就是个打工的把model要用的参数运输给控制器方法罢了,但是js又不能用类里面的model对象
所以 匿名对象就是js层面的model 可以更好的理解为模拟model对象,来让ajax进行运输
在cshtml与控制器中ajax传参的时候 难免会传一个集合对象之类的多数据
这些参数传到控制器大多是转换成listmodel然后去增删改,所以匿名对象
可以很好的处理这种情况。
注意的是匿名对象的属性值一定匹配真实model的属性
这样才能做到很好的映射
主要是运用var 匿名
var model={}; 对象
var list=[];集合
list.push(model);将对象加入集合中
页面处理:
var Listpackage = [];//匿名模拟从表 团对象集合
$("#PackageList span").each(function () {
var packages = {}
var cls = $(this).attr("class");
if (cls == "checked") {
packages.PackageId = $(this).children(0).attr("id");
packages.PackageCode = $(this).children(0).attr("data-code");
Listpackage.push(packages);
}
});
if (Listpackage.length > 0) {
//第一种写法
var List = [];//增加或修改 匿名模拟从表 数据对象集合 属性要与数据库表属性匹配以便映射
var datalist = $('input[name="AddorUpData"]');
$(datalist).each(function (i, v) {
//每一个对象中属性赋值
var inventorys = {}
inventorys.Id = $(v).data("id");
inventorys.PackageDate = $(v).data("datetime");
inventorys.TotalRoomInventory = $(v).data("total");
inventorys.Airline = $(v).data("airline");
inventorys.Gateway = $(v).data("gateway");
List.push(inventorys);
});
//第二种写法
var $deals = $('[name="dealType"]:checked');
$.each($deals, function (i) {
var deals = {}
var deal = $deals.eq(i);
deals.Id = deal.data('dealid');
deals.OptionalTourId = deal.data('opid');
deals.TypeId = deal.val();
option.optionalDealTypes.push(deals);
});
$.ajax({
url: "/AffordableWorld/PackageInfo/AddorUpSpecialLIst",
type: "POST",
traditional: true,
data: {
"Planid": Planid,
"title": title,
"active": active,
"package": JSON.stringify(Listpackage),
"list": JSON.stringify(List),
"adminKey": $("#hiddKey").val()
},
success: function (result) {
alert(result);
location.href = "PackageShareInventory?adminKey=" + $("#hiddKey").val();
}
});
控制器:
//获取匿名对象 然后json反序列化成真正的对象list
string list = Request["list"];//列表相关内容
List<TourPackage_SpecialInventoryData> inventoryList = JsonConvert.DeserializeObject<List<TourPackage_SpecialInventoryData>>(list);
JSON.stringify将结果呈现为{"a":"A"}小json对象
JSON.parse将结果呈现为{a:"A"}