1

シリアル化され、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;
                };
4

1 に答える 1