Acabo de empezar a usar knockout y estoy teniendo problemas con Serialización y deserialización DateTime con el JavaScriptSerializer.Fecha de vinculación para eliminar el modelo de vista con el predeterminado JavaScriptSerializer
He actualizado el modelo de regalos en Steves koListEditor ejemplo de su blog para incluir un campo DateTime modificación:
public class GiftModel
{
public string Title { get; set; }
public double Price { get; set; }
public DateTime Modified { get; set; }
}
Entonces actualizado la Index.aspx para incluir el nuevo campo:
<asp:Content ContentPlaceHolderID="MainContent" runat="server">
<h1>Gift list editor</h1>
<p>You have asked for <span data-bind="text: gifts().length"> </span> gift(s)</p>
<form class="giftListEditor">
<table>
<tbody data-bind="template: { name: 'giftRowTemplate', foreach: gifts }"></tbody>
</table>
<button data-bind="click: addGift">Add Gift</button>
<button data-bind="enable: gifts().length > 0" type="submit">Submit</button>
</form>
<script type="text/html" id="giftRowTemplate">
<tr>
<td>Gift name: <input class="required" data-bind="value: Title, uniqueName: true"/></td>
<td>Price: \$ <input class="required number" data-bind="value: Price, uniqueName: true"/></td>
<td>Modified: <input class="required date" data-bind="value: Modified, uniqueName: true"/></td>
<td><a href="#" data-bind="click: function() { viewModel.removeGift($data) }">Delete</a></td>
</tr>
</script>
<script type="text/javascript">
var initialData = <%= new JavaScriptSerializer().Serialize(Model) %>;
var viewModel = {
gifts : ko.observableArray(initialData),
addGift: function() {
this.gifts.push({ Title: "", Price: "", Modified:"" });
},
removeGift: function (gift) {
this.gifts.remove(gift);
},
save: function() {
ko.utils.postJson(location.href, { gifts: this.gifts });
}
};
ko.applyBindings(document.body, viewModel);
$("form").validate({ submitHandler: function() { viewModel.save() } });
</script> </asp:Content>
Sin embargo, cuando el JavaScriptSerializer serializa el Modelo
var initialData = <%= new JavaScriptSerializer().Serialize(Model) %>;
la fecha de modificación está saliendo de esta manera:
También al usar fechas Reino Unido es decir, 25/01/2011 el JavaScriptSerializer.Deserialize desencadena la siguiente excepción:
25/01/2011 no es un valor válido para DateTime.
Aunque tengo 2 problemas aquí, la pregunta principal es si alguien ha utilizado con éxito knockout de MVC 2 y ha conseguido que el JavaScriptSerializer funcione con DateTimes? Me di cuenta de que podría escribir mi propia JavaScriptSerializer pero esperaba no era una solución ya preparada por ahí :)
Aquí está el código para la versión actualizada de koListEditor de Steve Sanderson:
Gracias
de Dave
Cualquiera que mire lo que antecede ... puede usar JSON.net para enviar fechas al cliente en el formato que desee ... ver http://james.newtonking.com/archive/2009/02/20/good -date-times-with-json-net.aspx – CraftyFella