2011-08-17 14 views
7

Tengo esta aplicación y el formato de fecha predeterminado debe ser dd/MM/yyyy (el idioma es portugués de Brasil).Enlace de modelo ASP.Net MVC: ¿cómo cambiar el formato de fecha?

Ya había establecido la cultura y la cultura de IU en pt-BR y ahora myDate.ToShortDateString() devuelve las fechas como yo quiera. No tengo problemas para mostrarlos.

El problema es que cuando el usuario rellena un campo de entrada con una fecha como 17/08/2011 y envía el formulario, el parámetro DateTime a mi acción se vuelve nulo. Si proporciono una fecha en el formato 08/17/2011, funciona bien.

¿Cómo puedo hacer que el modelo de ASP.Net MVC sea vinculante para analizar mis fechas correctamente?

+4

marque esta respuesta http://stackoverflow.com/questions/528545/mvc-datetime-binding-with-incorrect-date-format/528560#528560 – dotjoe

+0

Pruebe la solución de esta pregunta http://stackoverflow.com/ preguntas/6177626/asp-net-mvc-default-model-Binder-problem – agradl

Respuesta

10

encontré lo happended. Mi formulario estaba publicando a través del método GET, y el MVC solo usa el parámetro cultural para un parámetro de acción cuando se pasa en el RouteData o por el formulario a través del método POST.

Acabo de cambiar el formulario al método POST y funcionó.

+0

Un día perdido solo porque nadie dice que el método GET no aplica la cultura. Me salvó el día ... Gracias, aún, debes corregir tu publicación, funciona con POST no con GET. –

+0

Corregido. Gracias. – Doug

+0

Más información sobre cómo funciona MVC ModelBinder y por qué: http://weblogs.asp.net/melvynharbour/mvc-modelbinder-and-localization – webStuff

2

Estoy bastante seguro de que el problema es la falta de DateTimeFormat en sus tipos de DateTime.

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

EDITAR **

Otra cosa que quiere estar seguro de que es el "nombre" propiedad de su elemento de entrada coincide con lo que está pasando en su acción. Si no es nulo, aparecerá en la acción POST cada vez.

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

"dateParam" debe coincidir con el nombre de la propiedad aquí.

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

La salida de la fecha a HTML no es el problema. La vinculación del valor presentado es. Incluso si hago lo que me dice, el envío del formulario no funcionará como se esperaba. – Doug

5

Pruebe esto en su propiedad en el modelo de vista:

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