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 回答