5

我有一个 MVC 操作,它采用它的一个参数 a DateTime,如果我传递“17/07/2012”,它会抛出一个异常,指出参数为空但不能有空值,但如果我传递01/07/2012它,它会被解析为Jan 07 2012.

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

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

4

2 回答 2

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;    
    }
}

在 Global.Asax 中写道:

ModelBinders.Binders.Add(typeof(DateTime), new DateTimeBinder());
ModelBinders.Binders.Add(typeof(DateTime?), new DateTimeBinder());

在这个优秀的博客上阅读更多内容,该博客描述了为什么 Mvc 框架团队为所有用户实现了默认文化。

于 2012-05-09T16:02:49.087 回答
1

gdoron 的答案对于将日期作为查询字符串传递是正确的。但是,如果它们作为表单值传递(后值),则应使用正确的文化(假设文化是属性配置的)。

于 2012-05-09T16:13:42.760 回答