Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Safe way to pass a date param to an ajax call to a MVC action

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.

like image 735
Bruno Avatar asked May 09 '12 16:05

Bruno


2 Answers

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.

like image 59
gdoron is supporting Monica Avatar answered Sep 29 '22 08:09

gdoron is supporting Monica


gdoron's answer is correct for passing dates as querystrings. If they are passed as form values, however (post values) then the correct culture should be used (assuming the culture is property configured).

like image 28
Erik Funkenbusch Avatar answered Sep 29 '22 07:09

Erik Funkenbusch