Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 从aspnetmvc序列化时忽略剔除viewmodel的属性_Asp.net Mvc_Knockout.js_Knockout Mapping Plugin - Fatal编程技术网

Asp.net mvc 从aspnetmvc序列化时忽略剔除viewmodel的属性

Asp.net mvc 从aspnetmvc序列化时忽略剔除viewmodel的属性,asp.net-mvc,knockout.js,knockout-mapping-plugin,Asp.net Mvc,Knockout.js,Knockout Mapping Plugin,我有一个ASPNET mvc站点,在视图中有带敲除的viewmodels。我正在尝试将传递给视图的模型序列化为视图模型 模型通过类似标准的aspnet mvc传递给 @model Client.Controllers.TripDto 使用KO映射创建的knockout viewmodel如下所示 var jsonModel = '@Html.Raw(JsonConvert.SerializeObject(this.Model))'; var mvcModel =

我有一个ASPNET mvc站点,在视图中有带敲除的viewmodels。我正在尝试将传递给视图的模型序列化为视图模型

模型通过类似标准的aspnet mvc传递给

@model Client.Controllers.TripDto
使用KO映射创建的knockout viewmodel如下所示

        var jsonModel = '@Html.Raw(JsonConvert.SerializeObject(this.Model))';
        var mvcModel = ko.mapping.fromJSON(jsonModel);
        var viewModel = new TripViewModel();
        var mapping = {
            'ignore': ["expenses"]
        };
        ko.mapping.fromJS(mvcModel, mapping, viewModel);

        ko.applyBindings(viewModel);
我在KO“自定义”视图模型上有一个属性开销。问题在于,该属性不在MVC模型中,而只是一个稍后获取其数据的属性。 但到目前为止,我还无法将模型传递到viewmodel中而不出错

错误:无法分析绑定。消息:ReferenceError:未定义费用;绑定值:foreach:费用 [在此错误上中断]

返回新函数(“$context”,“$element”,functionBody)

我有点不确定是否真的是映射失败了,但到目前为止,还没有看到任何可能的错误

所以问题是,在我映射的模型中不存在所有属性的情况下,是否可以使用KO映射

是否可以在不存在所有属性的情况下使用KO映射 在我映射的模型中

我认为KO并不关心这一点,但模型关心这一点。调用
ko时,applyBindings
ko将搜索与HTML元素关联的属性,因此,如果要在HTML元素
data bind='id:property'
中使用属性,则该属性必须存在于视图模型中。但是如果它是空的,那么就可以了

只需扩展视图模型,就可以包含新属性
expenses
,其默认值为
null

var mapping = {
    create: function (options) {
        //customize at the root level.  
        var innerModel = ko.mapping.fromJS(options.data);

        innerModel.expenses= null;

        return innerModel;
    }
}

请检查此项

谢谢,该属性已在自定义viewmodel中定义为self.expenses=ko.observearray();我遇到了类似的问题,并使用下划线.js设置了默认的空数组/对象,这样映射插件就不会崩溃。如果需要的话,很乐意提供到示例的链接。实际上,我的问题与延迟加载有关,现在正在使用这种方法。但是感谢您提供有关创建的信息!