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.

Original source

Related problems