Behandlung von Daten mit Asp.Net MVC und KnockoutJS
Ich habe vor kurzem angefangen, mit KnockoutJs und merkte schnell über die Standard - Json(myModelWithADate)
führte in der Standard-json-Kodierung von \/Date(-62135578800000)\/
Mit ein wenig Forschung, die ich nur vier mögliche Wege zur Bewältigung der Anzeige meiner Daten in der dom-Elemente.
1) Erstellen Sie eine Bindung, die behandelt die Konvertierung von Json-Datum auf das format, das Sie wünschen
ko.bindingHandlers.date = {
init: function (element, valueAccessor, allBindingsAccessor, viewModel) {
var jsonDate = valueAccessor();
var value = new Date(parseInt(jsonDate.substr(6)));
var ret = value.getMonth() + 1 + "/" + value.getDate() + "/" + value.getFullYear();
element.innerHTML = ret;
},
update: function(element, valueAccessor, allBindingsAccessor, viewModel) {
}
};
Nutzung
<td data-bind="date: DueDate">
</td>
2) Return "strings" aus dem Controller
return Json(new {MyDate = DateTime.Now.ToShortDateString()});
3) JSON.NET zur Angabe eines Datums-Zeit-format gesehen zu james.newtonking.com
Beispiel
string isoJson = JsonConvert.SerializeObject(entry, new IsoDateTimeConverter());
//{"Details":"Application started.","LogDate":"2009-02-15T00:00:00Z"}
4) verwenden Sie JSON.analysieren, verarbeiten Ihre Daten wie in dieser stackoverflow Antwort.
JSON.parse(jsonText, function(key, value) {
//Check for the /Date(x)/pattern
var match = /\/Date\((\d+)\)\//.exec(value);
if (match) {
var date = new Date(+match[1]); //Convert the ticks to a Date object
return humanReadable(date); //Format the date how you want it
}
//Not a date, so return the original value
return value;
});
Scheinen Sie alle zu funktionieren, aber ich bin immer noch am kämpfen mit denen man sich fühlt "rechts". Jetzt mein Darm wird mit einer Mischung mit der Bindung und zurückgeben von Zeichenfolgen. Wie ich sehen konnte, selbst die Verlängerung der verbindlich zu behandeln Eingang mit jQuery UI datepicker-Steuerelemente.
Ist es eine akzeptierte Praxis bei der Handhabung der Anzeige von Daten oder anderen Datentypen wie Währung? Gibt es eine andere option, die ich bin fehlt, die dieses problem löst?
InformationsquelleAutor der Frage Mark Coleman | 2012-01-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich persönlich denke, die JSON.NET Lösung ist die beste, einfach, weil es auferlegt, die weniger auf dem client. Alle anderen Lösungen erfordern zusätzliche client-Analyse oder zusätzliche client-code.
Habe ich umgeschaltet, um mit JSON.NET für alle meine ASP .NET-code, verwendet von JSON, weil es ein viel mehr anpassbare Bibliothek.
So habe ich zum Beispiel hatte zu implementieren, der die JSON-Daten in MVC, entsprach Google Chart API (in Kombination mit Knockout für paging, etc.) und die Standard -
JavascriptSerializer
einfach nicht tun es.Zusätzlich mit JSON.NET Sie können es tatsächlich spuckte voller Knockout-Modelle anzeigen, so dass Sie nicht sogar brauchen, zu beschäftigen das mapping plugin.
Schrieb ich eine sample library namens FluentJson.NET, die lässt Sie Dinge tun, in Gestochen wie:
Und erhalten:
So können Sie ein Knockout-view-Modell ohne client-side Reifen zu springen durch.
Könnte man leicht erweitern, etwas wie das zu handhaben, Datums-Werte, jedoch, das Sie bevorzugen würden.
InformationsquelleAutor der Antwort Paul Tyng
Ich würde vorschlagen, eine Mitte der Mensch-Ansatz durch
ko.mapping.fromJS( data, mapping )
dies würde ermöglichen es Ihnen, anpassen, sogar mit einem benutzerdefinierten Objekt.mapping-parameter ermöglicht es Ihnen, Griff, verpasst es leicht und kann problemlos genutzt werden, um mit arrays auch.
InformationsquelleAutor der Antwort Andres Toro
Den besseren Weg zu behandeln, Termine in knockoutjs ist die Nutzung moment Bibliothek und verarbeiten Daten wie boss.
Sie können leicht befassen sich mit Daten wie Datum /(-62135578800000)/. Keine Notwendigkeit zu kümmern, wie Ihre serialisieren Datum im controller.
Ansatz 1 : Direkt im Blick:
Lets sagen, dass Ihre knockout-Modell bekommt wie ein Datum in einer beobachtbaren genannt sentDate und jetzt ist es schon Wert /Datum(-62135578800000)/. Binden Sie Sie in der Ansicht können Sie tun :
Ansatz 2 : In benutzerdefinierte Bindung
Nutzung derselben, wie Sie gesagt hatte :
momentjs unterstützt viele Datums -, Zeit-Formate und utility-Funktionen auf Daten.
InformationsquelleAutor der Antwort Ajay Kelkar
Ich bin mit dem folgenden code zu erzeugen, kurz, Datum-strings. Ich benutze es für meine Datums-Zeichenketten und jQueryUi Datum-Picker.
Dieser erzeugt die folgende JSON -
Dies führt zu sauberen JavaScript-code für mich.
InformationsquelleAutor der Antwort photo_tom
Gerade kam auf diese Frage, weil wir auch begonnen, mit knockout.js auf unserer MVC3 app.
Da wir bereits über jQuery-datepicker und wir müssen das formatieren von Daten anders als durch locale (portal hat verschiedenen Sprachen und unterschiedlichen Formaten präsentiert werden, pro Sprache), so vielleicht dieses mashup von technologischen Anforderungen entstehen woanders und wird nützlich sein:
Und in der Ansicht dann zum Beispiel:
InformationsquelleAutor der Antwort povilasp
Eine saubere alternative zu @photo_tom die Antwort ist, schmücken das Grundstück mit dem IsoDateTimeConverter über die JsonConverter Attribut, etwa so:
InformationsquelleAutor der Antwort Jess Chadwick
Ich liebte Andres Toro Antwort, außer dass in meinem Fall, Eingabefelder erwarten formatierten strings. So bin ich mit Hilfe von JQuery zu formatieren, meine Termine nach meinem Lieblings-format von meinem Helfer
@Html.ConvertDateFormat()
Hoffe, dies hilft jemand Tag.
InformationsquelleAutor der Antwort Ashi