2012-05-09 32 views
5

Tengo una acción MVC que toma uno de sus parámetros como DateTime y si paso "17/07/2012" arroja una excepción que dice que el param es nulo pero no puede tener un valor nulo pero si paso 01/07/2012 se analiza como Jan 07 2012.Manera segura de pasar un parámetro de fecha a una llamada ajax a una acción MVC

Estoy pasando las fechas a la llamada ajax en formato DD/MM/YYYY, ¿debo confiar en el formato MM/DD/YYYY a pesar de la cultura configurada en web.config?

Este es un método simple y solo existe este parámetro de una fecha.

Respuesta

7

Tienes tres opciones seguras para enviar parámetro de fecha en Asp.NET-MVC:

  • enviarlo como YYYY/MM/DD es el estándar ISO para las fechas internacionales.
  • Utilice POST solicitud en lugar de GET solicitud.

  • Si desea cambiar la forma en que el defecto Model Binder une fechas:

Se puede cambiar la carpeta de modelo por defecto a utilizar la cultura del usuario utilizando IModelBinder

public class DateTimeBinder : IModelBinder 
{ 
    public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) 
    { 
     var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName); 
     var date = value.ConvertTo(typeof(DateTime), CultureInfo.CurrentCulture); 

     return date;  
    } 
} 

Y en el Mundial .Sax escriba:

ModelBinders.Binders.Add(typeof(DateTime), new DateTimeBinder()); 
ModelBinders.Binders.Add(typeof(DateTime?), new DateTimeBinder()); 

Lea más en this excellent blog que describe por qué el equipo de Mvc framework implementó una cultura predeterminada para todos los usuarios.

1

La respuesta de gdoron es correcta para pasar fechas como querystrings. Sin embargo, si se pasan como valores de formulario (valores de publicación), se debe utilizar la cultura correcta (suponiendo que la cultura está configurada de forma personalizada).

Cuestiones relacionadas