Angular js JSON-Daten mit MVC-modellbindung für DateTime?
Ich bin mit Angular JS, um get-und post-Daten auf meinem MVC 4 Controllers als JSON. Alle meine Eigenschaften ordnungsgemäß konvertiert, außer die DateTime/DateTime? Typen. Ich würde gerne eine "set it and forget it" - Ansatz, um die Behandlung von Datumsangaben, so dass neue Klassen und oder Eigenschaften, die Hinzugefügt werden, werden Sie nicht haben, zu erinnern, zu tun, einige spezielle Konvertierung zu handhaben, ein Datum richtig. Ich habe gesehen, die folgenden Ansätze und mögliche Nachteile. Mit welchem Ansatz sind Leute da draußen mit der gleichen Plattform? Gibt es etwas in MVC4, dass ist der Umgang mit diesem richtig, dass ich kann nicht konfiguriert haben? Alle Vorschläge werden sehr geschätzt werden.
- Benutzerdefinierte binder Modell. Als details in Phil Haack blog. Möglich
performance-Probleme. - Führen Sie einige änderungen, auf die JS-Seite. Wie detailliert in Robert Koritnik s blog. Dies scheint nicht zu funktionieren für Angular js, gibt es vielleicht eine Einstellung in der $http.post, die dies ermöglichen, zu arbeiten, sondern mein Objekt hat, werden alle null-Werte mit diesem Ansatz.
- Haben einige zusätzliche Immobilien wie FormattedDateTime konvertiert werden kann auf die POST-Aktion. Dies ist nicht ein "set it and forget it-Konzept", obwohl es nicht erlaubt, für die korrekte Anzeige von Daten in der client-Seite, die sich noch in der " /Datum(695573315098)/format
Bitte sehen Sie den folgenden code Beispiel.
C# - Klasse:
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public DateTime BirthDate { get; set; }
public DateTime? ApprovedForSomething { get; set; }
}
Angular JS-Controller:
function PersonController($scope, $http) {
$scope.getPerson = function () {
$http.get('../../Home/GetPerson/1').success(function (data) {
$scope.Person = data;
});
}
$scope.updateApprovedForSomething = function () {
$http.post('../../Home/UpdatePerson', { person: $scope.Person }).success(function (data) {
console.log(data);
});
}
}
Fiddlers POST:
HTTP/1.1 200 OK Cache-Control: private Content-Type: application/json;
charset=utf-8 Server: Microsoft-IIS/8.0 X-AspNetMvc-Version: 4.0
X-AspNet-Version: 4.0.30319 X-Quelldateien:
=?UTF-8?B?YzpcdXNlcnNcbmlja1xkb2N1bWVudHNcdmlzdwfsihn0dwrpbyaymdeyxfbyb2ply3rzxfzhbglkyxrpb25uzxn0xehvbwvcr2v0ugvyc29uxde=?=
X-Powered-By: ASP.NET Datum: Wed, 16 Jan 2013 14:48:34 GMT
Content-Length: 124{"FirstName":"Bob","LastName":"Smith","BirthDate":"/Date(695573315098)/","ApprovedForSomething":"/Date(1358261315098)/"}
Wie Sie sehen können, mit den Fiddler-Daten das Datum kommt als JSON-Datum, aber wenn man die POST-Methode der DateTime-Eigenschaft ist nicht richtig, und die DateTime? - Eigenschaft ist null.
- Ich gehe mit Phil Haack Lösung. JSON-Daten sollte in einem JavaScript-lesbaren format, wenn Sie den server verlassen. Es ist die JavaScript Object Notation, afterall.
- +1 auf Haack. Mit JSON.NET fix wird das datetime Problem so gut wie dumm, Serialisierungs-format .NETTO-Wörterbücher.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie die Möglichkeit, Ihre AJAX-postback behandelt werden, die von einem WebApi ist
ApiController
statt einer MVC-controller?Ich lief in dieses problem, vor kurzem, und nutzten die ApiController die Unterstützung für das ISO-8601 Datum-format.
Hier einige info:
http://www.hanselman.com/blog/OnTheNightmareThatIsJSONDatesPlusJSONNETAndASPNETWebAPI.aspx