Есть ли способ сопоставления от/к POCO и наблюдаемым нокаутам?
У меня есть класс Note:
public class Note
{
public int ID { get; set; }
public string Date { get; set; }
public string Content { get; set; }
public string Category { get; set; }
public string Background { get; set; }
public string Color { get; set; }
}
и это мой javascript:
$(function () {
ko.applyBindings(new viewModel());
});
function note(date, content, category, color, background) {
this.date = date;
this.content = content;
this.category = category;
this.color = color;
this.background = background;
}
function viewModel () {
this.notes = ko.observableArray([]);
this.newNoteContent = ko.observable();
this.save = function (note) {
$.ajax({
url: '@Url.Action("AddNote")',
data: ko.toJSON({ nota: note }),
type: "post",
contentType: "json",
success: function(result) { }
});
}
var self = this;
$.ajax({
url: '@Url.Action("GetNotes")',
type: "get",
contentType: "json",
async: false,
success: function (data) {
var mappedNotes = $.map(data, function (item) {
return new note(item.Date, item.Content, item.Category, item.Color, item.Background);
});
self.notes(mappedNotes);
}
});
}
Игнорируйте тот факт, что функция сохранения не используется (чтобы упростить код здесь).
Итак, когда я загружаю страницу, я вызываю сервер, и я получаю список объектов Note, и я сопоставляю его в javascript. Обратите внимание, что идентификатор не отображается, потому что мне это не нужно в моем представлении.
Пока все хорошо, я вижу заметки на экране, но как я могу сохранить заметки на сервере?
Я попытался преобразовать заметку (Im, сохраняющую только новую заметку, а не всю коллекцию) в JSON, и отправить ее на мой контроллер, но я не знаю, как получить доступ к заметке в контроллере. Я пробовал:
public string AddNote(string date, string content, string category, string background, string color)
{
// TODO
}
но не работает. Я хочу иметь что-то вроде:
public string AddNote(Note note) {}
(Btw, какой лучший результат для метода, который просто сохраняет данные в DB? void?)
Итак, как я это делаю? Я пробовал плагин knockout.mapping, но это довольно запутанно, и я не заставляю его работать для меня.
Спасибо.