在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);
});
但是,映射似乎不起作用。我没有收到错误,但模型似乎只是一个空函数。
可以这样做吗?我做错了什么?
答案 0 :(得分:0)
使用@Html.Raw(JsonConvert.SerializeObject(this.Model))
例如来自此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);
});
答案 1 :(得分:0)
我相信您必须从.fromJSON切换到.fromJS并使用knockout mapping api的三参数方法:
ko.mapping.fromJS(data, {}, this.model);