2011-08-17 18 views
7

Ho questa applicazione, e il formato data predefinito deve essere dd/MM/yyyy (la lingua è portoghese brasiliano).Associazione modello ASP.Net MVC - come modificare il formato della data?

Ho già impostato cultura e UI cultura su pt-BR e ora myDate.ToShortDateString() restituisce le date come desidero. Non ho problemi a mostrarli.

Il problema è che quando l'utente riempie un campo di input con una data come 17/08/2011 e invia il modulo il parametro DateTime alla mia azione diventa null. Se fornisco una data nel formato 08/17/2011, funziona correttamente.

Come è possibile rendere obbligatorio il modello ASP.Net MVC per analizzare correttamente le date?

+4

controlla questa risposta http://stackoverflow.com/questions/528545/mvc-datetime-binding-with-incorrect-date-format/528560#528560 – dotjoe

+0

Prova la soluzione da questa domanda http://stackoverflow.com/ domande/6177626/asp-net-mvc-default-model-binder-problem – agradl

risposta

10

ho trovato quello che c'è accaduto. Il mio modulo stava pubblicando tramite il metodo GET e MVC utilizza semplicemente la cultura per un parametro di azione quando è passato nel RouteData o tramite il modulo tramite il metodo POST.

Ho appena modificato il modulo nel metodo POST e ha funzionato.

+0

Un giorno perso solo perché nessuno ha mai detto che il metodo GET non applica la cultura. Salvato la mia giornata .. Grazie, comunque, dovresti correggere il tuo post, funziona con POST non con GET. –

+0

corretto. Grazie. – Doug

+0

Ulteriori informazioni su come funziona MVC ModelBinder e perché: http://weblogs.asp.net/melvynharbour/mvc-modelbinder-and-localization – webStuff

2

Sono abbastanza sicuro che il problema è la mancanza di un DateTimeFormat sui tipi DateTime.

<input type="text" name="DateProperty" id="DateProperty" 
     value="@(Model.DateProperty.Value.ToString("d", 
      System.Threading.Thread.CurrentThread.CurrentUICulture.DateTimeFormat))" /> 

EDIT **

Un'altra cosa che si vuole essere certi è che il "nome" di proprietà del vostro elemento di ingresso corrisponde a ciò che si sta passando nella vostra azione. Se non lo è, apparirà null all'azione POST ogni volta.

 
    [HttpPost] 
    public ActionResult DoStuff(string dateParam) 
    { 
     return RedirectToAction("Home","Index", new { }); 
    } 

"dateParam" Dovrebbe corrispondere alla proprietà nome qui.

<input id="dateParam" name="dateParam" value="10/10/2010" /> 
+0

L'output della data su HTML non è un problema. Il vincolo del valore inviato è. Anche se faccio ciò che hai detto, il modulo di invio non funzionerà come previsto. – Doug

5

Prova questo sulla vostra proprietà nel modello di visualizzazione:

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")] 
Problemi correlati