Übergeben einer DateTime an den Controller über eine URL, die einen Fehler in ASP.NET MVC 3 verursacht (Kultur)
Meine Anwendung ist setted mit pt-BR-Kultur (Datum dd-mm-yyyy) im web.config:
<globalization enableClientBasedCulture="false" requestEncoding="utf-8" responseEncoding="utf-8" fileEncoding="iso-8859-15" responseHeaderEncoding="utf-8" resourceProviderFactoryType="string" enableBestFitResponseEncoding="true" culture="pt-BR" uiCulture="pt-BR" />
Alle DateTime erstellt, die auf meinem system ist im richtigen format, aber erstellt habe ich eine controller-Methode so:
public ActionResult Test(DateTime date)
{
}
Aufruf der Methode direkt im browser die übergabe von null wird das Datum mit Portugiesisch-br-format, so:
mysite/Test/?date=19/01/2012 => date = null in my controller
mysite/Test/?date=01/01/2012 => date is fine, but in US format (mm-dd-yyyy)
Wie ich das beheben kann, dass, zu akzeptieren, meine Datum-format?
InformationsquelleAutor der Frage Paul | 2012-01-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es ein Problem mit der Standard-Modell, Sammelmappe, ist nicht leicht zu kennen, aber sobald Sie wissen, dass es Sie nicht mehr den gleichen Fehler machen:
Wenn Sie eine POST-Anforderung, die Standard-Modell-Bindemittel verwendet Ihre Kultur, die Einstellungen, die zum analysieren der Daten.
Wenn Sie eine GET-Anforderung, die Standard-Modell-Bindemittel verwendet
CultureInfo.InvariantCulture
zum analysieren der Daten und ignoriert Ihre aktuellen Kultureinstellungen.Da Sie über einen GET-request und übergeben Sie das Datum als query-string-parameter, sollten Sie formatieren Sie ihn mithilfe der Invarianten Kultur format beim senden in der url. Den richtigen Weg zur Formatierung des Datums als query-string-parameter ist
yyyy-MM-dd
.Können Sie einen Blick auf die folgenden blog-post die wird in mehr details.
InformationsquelleAutor der Antwort Darin Dimitrov
Als jemand, der arbeitet viel mit UNS Unternehmen, ich habe viel Erfahrung mit date Fragen.
Meine beste Rat ist: wählen Sie eine eindeutige format bei der übertragung.
und
Sind sichere Wetten, und wird erfolgreich analysiert werden, die von DateTime.Parse(obj).
Wenn Sie das Datum-format ist nicht eine option, sollten Sie sich
DateTime.ParseExact
, die Sie angeben können, die genaue format-string sind Sie nach.InformationsquelleAutor der Antwort Paul Alan Taylor
Ein Ansatz wäre, zu akzeptieren, das Datum als string und dann Bearbeiten Sie es in der Steuerung auf die richtige locale/Kultur.
InformationsquelleAutor der Antwort Kevin Junghans
Hab das gleiche problem mit einem
@Html.Action(..)
im Blick. Für diese situation kann gelöst werden, indem dieDateTime
in einem Modell:und in der Ansicht:
Hinweis: die
new { }
um die Instanz vonMyModel
auf diese Weise dieDateTime
ist nicht in eine Zeichenfolge konvertiert. Diese Lösung funktioniert nur fürHtml.Action()
und nicht fürHtml.ActionLink()
oderUrl.Action()
da MVC ist dabei einmyModel.ToString()
in der URL.InformationsquelleAutor der Antwort Marthijn