シリアル化され、JSON 文字列に解析されるフォームがあります。フォーム フィールドの 1 つは、JSON オブジェクトを含む隠しフィールドです。別のチュートリアルの次の関数を使用して、フォーム データを変換します。
$.fn.serializeObject = function()
{
var o = {};
var a = this.serializeArray();
$.each(a, function() {
if (o[this.name] !== undefined) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
o[this.name] = this.value || '';
}
});
return o;
};
これは、JSON を含む非表示フィールドが二重引用符で囲まれていることを除いて、うまく機能します。これは、コントローラーに戻ったときにバインドされません。二重引用符を手動で削除すると、すべてうまくいきます。
次のように出くわします:
{"Package":"[{"Qty":"15"}]","Fname":"test name"}
する必要があります:
{"Package":[{"Qty":"15"}],"Fname":"test name"}
これを考慮して上記の関数を変更するにはどうすればよいですか?
ありがとう!
アップデート
これは、関数の新しいバージョンで説明されています。
$.fn.serializeObject = function () {
var o = {};
var a = this.serializeArray();
$.each(a, function () {
if (o[this.name] !== undefined) {
if (!o[this.name].push) {
o[this.name] = [o[this.name]];
}
o[this.name].push(this.value || '');
} else {
if (this.value.charAt(0) == "[") {
o[this.name] = JSON.parse(this.value);
}
else {
o[this.name] = this.value || '';
}
}
});
return o;
};