2017-02-18 12 views
0

В C# я передаю объект из моего вызова API в пользовательский интерфейс и хочу автоматически сопоставить свойства этого объекта с моделью просмотра. Я надеюсь сделать это с помощью картографического плагина для Knockout.Отображение нокаута из .Net-класса

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).

В 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

сериализовать модель представления в JSON с помощью @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); 
}); 
0

Я считаю, что вы должны перейти от .fromJSON к .fromJS и использовать метод три параметра нокаута картирование api:

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

 Смежные вопросы

  • Нет связанных вопросов^_^