2010-12-03 8 views
2

Meine Anwendung wird unter RO-RO-Kultureinstellungen ausgeführt, die im web.config globalisation-Abschnitt konfiguriert sind. Wenn ich eine POST-Anforderung wieGlobalisierungsproblem mit DateTime und ASP.NET MVC 3 Modellbindung

POST /myapp/index 
date=03-12-2010&value=something 

Modellbindungskarten mache dieses Datum Wert „3. Dezember 2010“ zu korrigieren, da das Standard-Datums-Zeitformat für Ro-Ro-Kultur ist dd-MM-yyyy. Wenn ich die Anforderungsmethode ändern, um die gleichen Daten zu erhalten Bestehen des Datumswert in meiner Aktion „12. März 2010“ (MM-TT-JJJJ Datetime-Format)

GET /myapp/index?date=03-12-2010&value=something 

$.getJSON('/Home/Index', $('form').serialize(), function(d) { 
      // ... 
}); 
$.post('/Home/Index', $('form').serialize(), function(d) { 
      // ... 
}, 'json'); 

Also in diesem Fall „getJSON“ & „wird Post "muss das gleiche Ergebnis zurückgeben, aber ich erhalte unterschiedliche Ergebnisse wegen des Datumsunterschieds.

Wie kann ich das gleiche Parsing-Format für GET-Anfragen auch aktivieren?

Ich weiß, dass ich ein generisches Format wie JJJJ-MM-TT für Daten verwenden kann, aber ich bin nur neugierig, warum passiert das?

Antwort

13

Von meiner vorherigen Antwort zu diesem Thema. Nullable DateTime Parameter is never bound when calling the action

"Dies ist beabsichtigt Alles, was Teil der URI (man beachte die‚Uniform‘in URI) wird interpretiert, als ob es aus der invarianten Kultur kam Das ist so, dass ein Benutzer in den USA, der einen Link kopiert und ihn über IM an einen Freund im Vereinigten Königreich sendet, sicher sein kann, dass sein Freund genau die gleiche Seite sieht (im Gegensatz zu einem HTTP 500 aufgrund eines DateTime-Konvertierungsfehlers) Im Allgemeinen sollten Daten, die in RouteData oder QueryString übergeben werden, im Format JJJJ-MM-TT vorliegen, um über die Kulturen hinweg eindeutig zu sein

Wenn Sie einen QueryString- oder RouteData-Parameter in einer kulturbewussten Weise interpretieren müssen, ziehen Sie ihn als Zeichenfolge ein und konvertieren Sie ihn dann manuell in den gewünschten Typ und übergeben Sie die gewünschte Kultur. (DateTime.Parse hat Überladungen, mit denen Sie eine Kultur angeben können.) Wenn Sie dies tun, empfehle ich auch, die gewünschte Kultur als QueryString- oder RouteData-Parameter zu verwenden, damit der 'Uniform'-Teil des URI nicht verloren geht, z. Die URL wird ungefähr so ​​aussehen ...? culture = fr-fr & Datum = 01-10-1990. "