Safe way to pass a date param to an ajax call to a MVC action
ajax, asp.net-mvc, c#, javascript
Solution
You got three safe options to send date parameter in Asp.NET-MVC:
- Send it as `YYYY/MM/DD` it's the ISO standard for international dates.
Use `POST` request instead of `GET` request.
If you want to change the way the default `Model Binder` binds dates:
you can change the default model binder to use the user culture using 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;
}
}
And in the Global.Asax write:
ModelBinders.Binders.Add(typeof(DateTime), new DateTimeBinder());
ModelBinders.Binders.Add(typeof(DateTime?), new DateTimeBinder());
Read more at this excellent blog that describe why Mvc framework team implemented a default Culture to all users.
Problem
I have a MVC action that takes one of its parameters a `DateTime` and if I pass "17/07/2012" it throws an exception saying that the param is null but cannot have a null value but if I pass `01/07/2012` it is parsed as `Jan 07 2012`. I'm passing the dates to the ajax call in `DD/MM/YYYY` format, should I rely on `MM/DD/YYYY` format despite the configured culture in `web.config`? This is a simple method and there is just this one date parameter.