将日期参数传递给对MVC操作的ajax调用的安全方法

Bru*_*uno 5 javascript c# ajax asp.net-mvc

我有一个MVC操作,它接受一个参数a DateTime并且如果我传递"17/07/2012"它会抛出一个异常,说param为null但不能有空值但是如果我传递01/07/2012它被解析为Jan 07 2012.

我将日期传递给ajax调用DD/MM/YYYY格式,我应该依赖MM/DD/YYYY格式,尽管配置文化web.config

这是一个简单的方法,只有一个日期参数.

gdo*_*ica 8

在Asp.NET-MVC中有三个安全选项来发送日期参数:

  • 发送它,因为YYYY/MM/DD它是国际日期的ISO标准.
  • 使用POST请求而不是GET请求.

  • 如果要更改默认Model Binder绑定日期的方式:

您可以使用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;    
    }
}
Run Code Online (Sandbox Code Playgroud)

而在Global.Asax写道:

ModelBinders.Binders.Add(typeof(DateTime), new DateTimeBinder());
ModelBinders.Binders.Add(typeof(DateTime?), new DateTimeBinder());
Run Code Online (Sandbox Code Playgroud)

这个出色的博客上阅读更多信息,该博客描述了Mvc框架团队为所有用户实施默认文化的原因.