我有一个 MVC 操作,它采用它的一个参数 a DateTime
,如果我传递“17/07/2012”,它会抛出一个异常,指出参数为空但不能有空值,但如果我传递01/07/2012
它,它会被解析为Jan 07 2012
.
我以格式将日期传递给 ajax 调用,尽管配置了文化,DD/MM/YYYY
我是否应该依赖格式?MM/DD/YYYY
web.config
这是一种简单的方法,只有一个日期参数。
我有一个 MVC 操作,它采用它的一个参数 a DateTime
,如果我传递“17/07/2012”,它会抛出一个异常,指出参数为空但不能有空值,但如果我传递01/07/2012
它,它会被解析为Jan 07 2012
.
我以格式将日期传递给 ajax 调用,尽管配置了文化,DD/MM/YYYY
我是否应该依赖格式?MM/DD/YYYY
web.config
这是一种简单的方法,只有一个日期参数。
在 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;
}
}
在 Global.Asax 中写道:
ModelBinders.Binders.Add(typeof(DateTime), new DateTimeBinder());
ModelBinders.Binders.Add(typeof(DateTime?), new DateTimeBinder());
在这个优秀的博客上阅读更多内容,该博客描述了为什么 Mvc 框架团队为所有用户实现了默认文化。
gdoron 的答案对于将日期作为查询字符串传递是正确的。但是,如果它们作为表单值传递(后值),则应使用正确的文化(假设文化是属性配置的)。