¿Hay alguna manera de mapear desde/hacia un POCO y knockoutjs observable?mapeo de knockoutjs desde/hacia el objeto POCO
tengo una clase Nota:
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; }
}
y este es mi 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);
}
});
}
ignorar el hecho de que la función de ahorro no se utiliza (para simplificar el código aquí).
Entonces, cuando cargo la página llamo al servidor y recupero una lista de objetos Note y la asigno en javascript. Observe cómo ID no está asignado porque no lo necesito en mi opinión.
Hasta ahora, bien, veo las notas en la pantalla, pero ¿cómo puedo guardar las notas en el servidor?
Intenté convertir la nota (estoy guardando solo la nota nueva y no toda la colección) en JSON y la envío a mi controlador, pero no sé cómo acceder a la nota en el controlador. Intenté:
public string AddNote(string date, string content, string category, string background, string color)
{
// TODO
}
pero no funciona. Quiero tener algo como:
public string AddNote(Note note) {}
(Por cierto, ¿cuál es el mejor retorno de un método que acaba de guardar los datos en la base de datos vacío??)
Así que, ¿Cómo puedo hacer esto? Probé el plugin knockout.mapping pero es bastante confuso y no lo entiendo para mí.
Gracias.
impresionante respuesta épica funciona perfecto, pero: ¿me puede explicar el último párrafo Y .. ¿Cómo cargar desde el servidor de asignación manual que estoy haciendo aquí o tengo que probar el plugin de mapeo??? –
Sí, +1 para la gran respuesta. Está muy claro con excelentes ejemplos. –
Guau - excelente trabajo. –