2

ビューモデルが IIS で JSON に変換されないという非常に奇妙な問題が発生しています。システムで同じコードをデバッグすると、問題なく動作し、viewmodesl が JSON に変換されます。IIS では、同じコードが同じ結果を生成しません。

これは、ビューモデルで ko.toJSON を呼び出した後のビューモデルの外観です。

IIS の場合:

"{"__ko_mapping__":{"ignore":[],"include":["_destroy"],"copy":[],"mappedProperties": {"__type":true,"Prop1":true,"Prop2":true,"Prop3":true,"Prop4":true,"Prop5":true}}}"

ローカルで

{"__type":"DealerModel","Prop1":"","Prop2":"","Prop3":"","Prop4":"","Prop5":"Some Name  ltd"}}}"

これは私の DealerModel クラスがどのように見えるかです:

[Serializable]
Public class DealerModel
{
    public string Porp1 { get; set; }
    public string Porp2 { get; set; }
    public string Porp3 { get; set; }
    public string Porp4 { get; set; }
    public string Porp5 { get; set; }
}

問題は、どうにかして DealerModel が JSON などに型として渡されていないことだと思います。

誰もこの問題に直面しましたか? ここで何が問題になる可能性がありますか?

これは、viewmodesl を JS に変換する方法です。サーバー側のメソッドは arraylist を想定しています。

            var jsonViewModel = '';
            jsonViewModel = ko.toJSON(myNameSpace.ViewModel1);
            jsonViewModel = jsonViewModel.replace(/\/Date\((.*?)\)\//gi, "new Date($1)");
            saveArray[0] = jsonViewModel

            jsonViewModel = ko.toJSON(myNameSpace.ViewModel2);
            jsonViewModel = jsonViewModel.replace(/\/Date\((.*?)\)\//gi, "new Date($1)");
            saveArray[1] = jsonViewModel

$.ajax({
                type: "POST",
                url: "Services/SomeService.asmx/SaveObjects",
                cache: true,
                contentType: "application/json; charset=utf-8",
                data:"{args:" + ko.toJSON(saveArray) + "}",
                dataType: "json"
            });

SaveObjects メソッドは arrayList を想定しています。

4

4 に答える 4

3
ko.toJSON(saveArray);

json オブジェクトは作成しません。json文字列を生成します。

json オブジェクトを作成するには

ko.toJS(saveArray);

注: ネイティブの JSON シリアライザー (IE 7 以前など) を持たない古いブラウザーでこれを機能させるには、json2.jsライブラリーも参照する必要があります。

于 2013-03-05T06:01:44.640 に答える
1

ko.mapping プラグイン__ko_mapping__によって追加されていませんか? IIS で ko.mapping を使用し、空のマッピング オプション オブジェクトを渡そうとしたが、パラメーターを交換したかのように、オブジェクトにプロパティがないように見えます。

var mappingOptions = { };
var data = { "FirstName": "Bruce". "LastName": "Banner" };
var vmBad = ko.mapping.fromJS(mappingOptions, data);
var vmGood = ko.mapping.fromJS(data, mappingOptions);

vmBad は実際には、マッピング プラグインが使用する非表示のko_mappingプロパティだけを持つビュー モデルになります。その場合は、ko.mapping を使用して json に変換し、そのプロパティを削除する必要があります。( jsfiddle )

于 2012-05-08T09:01:41.090 に答える
0

これを行うことができるはずです:

        $.ajax({
            type: "POST",
            url: "Services/SomeService.asmx/SaveObjects",
            data: { args: saveArray }
        });

これが機能しない場合は、エンドポイント コードも投稿できますか?

更新 サーバーからのデータを含むコールバックが見られなかったので、あなたが必要とは思わなかったものをあなたのajax投稿から削除しました。

于 2012-05-04T15:25:59.843 に答える
-1

あなたが呼び出すとき、ko.toJSON(myNameSpace.ViewModel1)それはすべきですko.toJSON(myNameSpace.ViewModel1())。ビュー モデルを実行すると、プロパティが正しく表示される可能性があります。

于 2012-05-23T09:02:47.067 に答える