【问题标题】:what is the correct way to send json datatime to asp.net action for model binding将 json datetime 发送到 asp.net 操作以进行模型绑定的正确方法是什么
【发布时间】:2013-11-19 13:23:11
【问题描述】:

将 json datetime 发送到 asp.net mvc action 以便 Model 可以绑定到 Json datatime 的正确方法是什么?

我正在使用 ajax 将表单提交给特定的控制器操作,并且我正在发送大量数据,包括 MyDate(即字符串,它包含 dd-mm-yyyy 格式的数据,但它没有使用任何特定的格式dateformat 和 UTC 一样,客户端的这个日期是由字符串连接组成的,结果是以下格式的字符串):

MyDate":"28-11-2013"

Controller Action public JsonResult Save(MyModel m) 接收数据并将json数据转换为模型m数据,但是日期字段存在问题。模型中的 datefield 是这样定义的:

    [Display(Name = "My date")]
    [DataType(DataType.Date)]
    [DisplayFormat(DataFormatString = "{dd-MM-yyyy}")] 
    public Nullable<DateTime> MyDate { get; set; }

如果 json 发送 05-11-2013,那么 DateTime 的“月”和“日期”部分是混合的(05 应该是日期,11 应该是月份,但在模型 m 中反之亦然)。如果我发送28-11-2012,那么DateTime 设置为null(因为它被视为不正确的日期)。

这样做的正确方法是什么?

编辑:我认为问题与文化有关。

【问题讨论】:

  • 当你说“但它没有使用任何特定的日期格式格式化”时,这是否意味着你有一些写成 mm-dd-yyyy 和一些写成 dd-mm-yyyy?
  • 我的意思是它不是作为新的 Date 或类似的东西创建的。它由字符串连接创建,格式为 dd-mm-yyyy。
  • 看这里:msdn.microsoft.com/en-us/library/w2sa9yss(v=vs.110).aspx 如果您发布您的反序列化/解析方法也会有所帮助。
  • 我没有反序列化/解析方法,我猜它是由 Asp.net mvc 模型绑定自动完成的。我对此还不熟悉。

标签: c# asp.net asp.net-mvc json datetime


【解决方案1】:

您应该始终使用yyyy-MM-dd 格式。它由标准(ISO-8601)定义,不会被误解。

Obligitory XKCD:

                          

【讨论】:

  • 如果用户需要其他格式怎么办?例如,表单上有输入,用户输入他的日期,然后表单被序列化?我应该在序列化之前更改日期格式吗??
  • 始终通过网络发送 ISO。如果您想对 user 使用不同的格式,那很好。在 JavaScript 中执行此操作。像 moments.js 这样的库可以让这部分变得简单。
猜你喜欢
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
相关资源
最近更新 更多