【问题标题】:Knockout mapping from .Net class.Net 类的淘汰赛映射
【发布时间】:2017-07-07 18:10:33
【问题描述】:

在 C# 中,我将 API 调用中的对象传递给 UI,然后希望自动将该对象的属性映射到视图模型。我希望使用 Knockout 的映射插件来做到这一点。

 public class MyModel
    {
        public int ID { get; set; }

        [Display(Name ="Debt Name")]
        [Required(ErrorMessage = "A description is required")]
        public string Description { get; set; }

    }

这是我通过 API 调用 (WebAPI) 传递给 UI 的模型的简化版本。

在 Javascript 中,我定义了一个要填充的类:

class Model {
    id: KnockoutObservable<number>;
    description: KnockoutObservable<string>;
}

这在我的 ViewModel 之外。

在我的视图模型中,我创建了模型对象,并在我的构造函数中尝试使用映射填充类。你可以看到我注释掉的手动版本,但我试图摆脱它:

class DebtViewModel {

    model: Model = new Model();

    constructor() {

        //this.model.id = ko.observable(0);
        //this.model.description = ko.observable("");

        $.get("/api/debt/1")
            .done((data) => {

                this.model = ko.mapping.fromJSON(data);

                //this.model.id(data.ID);
                //this.model.description(data.Description);
    }); 

但是,映射似乎不起作用。我没有收到错误,但模型似乎只是一个空函数。

这可以吗?我做错了什么?

【问题讨论】:

  • “数据”是什么样的?可能映射插件无法解析它。

标签: javascript c# asp.net-web-api knockout.js


【解决方案1】:

使用 @Html.Raw(JsonConvert.SerializeObject(this.Model)) 将您的视图模型序列化为 JSON

例如来自answer

$(function () {
    var jsonModel = '@Html.Raw(JsonConvert.SerializeObject(this.Model))';
    var mvcModel = ko.mapping.fromJSON(jsonModel);

    var myViewModel = new viewModel();
    var g = ko.mapping.fromJS(myViewModel, mvcModel);

    ko.applyBindings(g);
});

【讨论】:

    【解决方案2】:

    我相信你将不得不从.fromJSON切换到.fromJS并使用knockout mapping api的三参数方法:

    ko.mapping.fromJS(data, {}, this.model);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 2012-12-05
      • 2015-03-30
      • 2014-03-26
      • 2014-03-20
      • 2015-07-16
      • 2013-08-05
      相关资源
      最近更新 更多