asp.net-mvc - 从 aspnetmvc 序列化时忽略 knockout View 模型上的属性

标签 asp.net-mvc knockout.js knockout-mapping-plugin

我有一个 ASPNET mvc 站点,其中的 View 具有带 knockout 的 View 模型。我正在尝试将传递给 View 的模型序列化到 View View 模型中。

模型像标准 aspnet mvc 一样传递给

@model Client.Controllers.TripDto

使用 KO 映射创建的 knockout View 模型的完成方式如下

        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“自定义” View 模型上有属性(property)费用。问题是这个属性并不在 MVC 模型中,而只是一个稍后获取其数据的属性。 但到目前为止,我还无法将模型传递到 View 模型而不出现错误

Error: Unable to parse bindings. Message: ReferenceError: expenses is not defined; Bindings value: foreach: expenses [Break On This Error]

返回新函数("$context", "$element", functionBody);

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

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

最佳答案

is it possible to use KO mappings where not all properties are present in the model I'm mapping from?

我认为 KO 映射并不关心这一点,但模型关心这一点。当您调用 ko.applyBindings 时,KO 会搜索与 HTML 元素关联的属性,因此如果您要在 HTML 元素中使用属性 data-bind='id: property' 那么这个属性必须存在于你的 View 模型中。但如果它为空那就没问题了。

您只需扩展 View 模型,即可包含新属性 expenses 以及默认值,如 null

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

        innerModel.expenses= null;

        return innerModel;
    }
}

请检查此SO question

关于asp.net-mvc - 从 aspnetmvc 序列化时忽略 knockout View 模型上的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18173471/

相关文章:

c# - 是否可以在服务器 (IIS) 上设置内容过期以强制下载新的脚本文件版本?

c# - Controller 和服务层之间的接口(interface)

javascript - 如何在knockout.JS中用colorpicker设置 'style:color'

javascript - jQuery 中的 {{each 'itemName' }} 是什么意思?

javascript - Knockout.js,如何更改映射的二维数组的值?

knockout.js - Knockoutjs中的observable数组和映射插件有什么用

asp.net mvc 更新多条记录

c# - MVC System.Web.Helpers 圆环图标签定位

javascript - Knockout.js:没有 jQuery UI 的折叠/折叠元素

html - Knockoutjs 验证和服务器验证