JavaScript オブジェクトの 1 つをシリアライズして作成された POST 文字列は、Web ページに投稿すると次のようになります。
bikeID=1&vehicleID=23&VIN=1HD1FB416AB666666&slotNum=0&alias=Betsy&BikeCustomizations[0][ CustomizationTypeID] =1&BikeCustomizations[0][ ManufacturerID] =4&BikeCustomizations[0][ CustomizationSubTypeID] =1&BikeCustomizations[1][ CustomizationTypeID] =2&BikeCustomizations[1][ ManufacturerID] =-1
これは私の ASP.NET MVC 3 アプリケーションに投稿されます。基本属性「bikeID」を取得し、アイテムの正しい数BikeCustomizations
(この場合は 2) を取得しますが、それらのオブジェクトには値がありません。
POST 文字列を変更して (Fiddler を使用して) 以下に再投稿すると、逆シリアル化は正常に機能します。
bikeID=1&vehicleID=23&VIN=1HD1FB416AB666666&slotNum=0&alias=Betsy&BikeCustomizations[0].CustomizationTypeID=1&BikeCustomizations[0].ManufacturerID=4&BikeCustomizations[0].CustomizationSubTypeID=1&BikeCustomizations[1].CustomizationTypeID=2&BikeCustomizations[1].ManufacturerID=-1
BikeCustomizations[1][ CustomizationTypeID] =2
違いがvsであることがわかりますBikeCustomizations[1].CustomizationTypeID=2
。
質問: オブジェクトの文字列化でファンキーな配列スタイルのプロパティ セッター構文を使用しないようにする方法はありますか?
オブジェクト作成の JavaScript は次のとおりです。
Cust.buildBike = function (bikeObj) {
if (bikeObj != undefined)
this.bike = bikeObj;
else
this.bike = { bikeID: -1 };
this.bike.BikeCustomizations = new Array();
var that = this;
$.each(this.customizationsArr, function (key, obj) {
if (obj == undefined)
return true;
var typeID = obj.ID,
SubTypeID = obj.SubTypeID,
ManufacturerID = obj.ManufacturerID,
Model = obj.Model;
if (ManufacturerID == -1)
SubTypeID = undefined;
that.bike.BikeCustomizations.push({
CustomizationTypeID: typeID,
ManufacturerID: ManufacturerID,
CustomizationSubTypeID: SubTypeID,
Model: Model
});
});
return this.bike;
}
...
$('#customizationPageNext').click(function () {
var data = Cust.buildBike(bikeObj);
$.mobile.changePage('/Selection/Calibrations/', { data: data });
});