Używam Angular JS do pobierania i przesyłania danych do mojego kontrolera MVC 4 jako JSON. Wszystkie moje właściwości są konwertowane poprawnie z wyjątkiem DateTime/DateTime? typy. Chciałbym mieć podejście "ustaw i zapomnij" do obsługi terminów, aby nowe klasy i lub dodane właściwości nie musiały pamiętać, aby wykonać specjalne przekształcenie w celu prawidłowego obchodzenia się z daną datą. Widziałem następujące podejścia i możliwe wady. Jakie podejście mają osoby korzystające z tej samej platformy? Czy jest coś w MVC4, które obsługuje to poprawnie, że nie mam skonfigurowane? Wszelkie sugestie będą bardzo mile widziane.Angular js danych JSON z powiązaniem modelu MVC dla DateTime?
- Spoiwo do modelu niestandardowego. Szczegóły na blogu . Możliwe problemy z wydajnością .
- Wykonaj pewne modyfikacje po stronie JS. Jak szczegółowo w Robert Koritnik's blog. Nie wydaje się to działać dla Angular js, być może istnieje ustawienie w http.post, które pozwoli to zadziałać, ale mój obiekt ma wszystkie wartości zerowe z tym podejściem.
- Mieć dodatkowe właściwości, takie jak FormattedDateTime, które można przekonwertować na akcję POST. To nie jest „ustaw i zapomnij to podejście” choć nie pozwala na prawidłowe wyświetlanie dat w po stronie klienta, które są jeszcze w „/ Data (695573315098) /” formacie
Proszę patrz poniższy kod przykład. C klasa #:
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 Kontroler:
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: prywatny Content-Type: application/json; Charset = UTF-8 serwera: Microsoft IIS/8,0 X AspNetMvc Wersja: 4,0 X aspnet Wersja: 4.0.30319 X SourceFiles:?? = UTF-8 B YzpcdXNlcnNcbmlja1xkb2N1bWVudHNcdmlzdWFsIHN0dWRpbyAyMDEyXFByb2plY3RzXFZhbGlkYXRpb25UZXN0XEhvbWVcR2V0UGVyc29uXDE = X = Powered-By: ASP.NET Data: środa, 16 stycznia 2013 14:48:34 GMT Długość treści: 124
{"FirstName": "Bob", "LastName": "Smith", "BirthDate" : "/ Data (695573315098) /", "ApprovedForSomething": "/ Date (1358261315098) /"}
jak widać z danych Fiddler data jest podchodząc jako data JSON, ale podczas naciśnięcia POST MNIE thod właściwość DateTime nie jest poprawna i DateTime? Właściwość ma wartość NULL.
pójdę roztworem Phil Haack jest. Daty JSON powinny być w formacie odczytywalnym w JavaScript, gdy opuszczają serwer. Jest to JavaScript Object Notation, afterall. –
+1 na Haack. Używanie JSON.NET naprawi problem datetime, a także głupi format serializacji słowników .NET. –