Отображение knockoutjs из / в объект POCO

Есть ли способ сопоставить наблюдаемые объекты POCO и knockoutjs?

У меня есть класс 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. Обратите внимание, как идентификатор не отображается, потому что он мне не нужен.

Пока все хорошо, я вижу заметки на экране, но как я могу сохранить заметки обратно на сервер?

Я попытался преобразовать note (я сохраняю только новую заметку, а не всю коллекцию) в JSON и отправляю ее своему контроллеру, но я не знаю, как получить доступ к заметке в контроллере. Я пробовал:

    public string AddNote(string date, string content, string category, string background, string color)
    {
        // TODO
    }

, но не работает. Я хочу иметь что-то вроде:

public string AddNote(Note note) {}

(Кстати, какой лучший результат для метода, который просто сохраняет данные в БД? Void?)

Итак, как мне это сделать? Я попробовал плагин knockout.mapping, но он довольно запутанный, и у меня он не работает.

Спасибо.

12
задан Jesus Rodriguez 2 August 2011 в 12:25
поделиться