【问题标题】:The field is not a date even if it is correct [duplicate]即使正确,该字段也不是日期[重复]
【发布时间】:2016-11-18 18:19:46
【问题描述】:

我在模型中有 DateTimes:

    [DataType(DataType.DateTime)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:dd/MM/yyyy HH:mm}")]       
    public DateTime Start { get; set; }

    [DataType(DataType.DateTime)]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:dd/MM/yyyy HH:mm}")]    
    public DateTime End { get; set; }

如果我写25.05.2016 10:00 它表示字段开始/结束不是日期,但如果我写12.05.2016 10:00 它是正确的。第一个数字匹配 Day (12),第二个匹配 Month (05),last 匹配 Year (2016),10 匹配 Hour,00 匹配 Minutes,为什么不能让我写 Day 超过 12?

【问题讨论】:

  • 在您的视图中,您是如何显示文本框的? @Html.EditorFor(model => model.Start)?
  • 您使用的是jQuery datepicker 还是任何插件?还是您手动输入日期?
  • 我是手动写的
  • 如果这是客户端验证错误,那么您需要重新配置$.validator(参考this answer)。如果它是服务器端验证错误,那么您需要将文化设置为接受dd/MM/yyyy 格式的文化或创建自定义ModelBinder
  • @Cezar,根据我之前评论中的链接,重新配置 $.validator 以接受 dd/MM/yyyy 格式的日期。

标签: asp.net-mvc datetime date-format


【解决方案1】:

不要直接在课堂上这样做,而是在视图中尝试。

@Html.EditorFor(model => model.Start, "{0:dd/MM/yyyy HH:mm}")

@Html.EditorFor(model => model.End, "{0:dd/MM/yyyy HH:mm}")

然后在你的模型中做:

[DataType(DataType.DateTime)]      
public DateTime Start { get; set; }

[DataType(DataType.DateTime)]
public DateTime End { get; set; }

如果这有帮助,请告诉我!

【讨论】:

  • 不起作用,当然第一个数字是正确的一天,但是如果天大于 12,这个愚蠢的验证器不会让它去发布功能......
  • @Cezar 那么当您点击提交或焦点离开文本框时会发生错误吗?
  • 我点击创建,它会检查文本框值是否正常,无需重新加载页面。
  • @Cezar 所以它转到[HttpPost] 行动?然后它失败了什么?异常发生在哪里?
  • 只有当第一个数字小于13时才去HttpPost。
【解决方案2】:

您在下面的代码中所拥有的只是显示格式。

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = @"{0:dd/MM/yyyy HH:mm}")]    

默认日期时间格式是 MM/dd/yyyy HH:mm,所以实际上日期时间是 12.05.2016 10:00,12 是月份,05 是日期和 2016 年。

如果您尝试设置具有其他格式的日期,C# 会应用此验证。

而显示格式的目的是将上述日期呈现为dd/mm/yyyy。

【讨论】:

  • 那么我怎样才能让它按照我想要的方式工作呢?正如我所写,第一个数字是天,而不是月,但它不允许我将天设置为大于 12(我通过在 post 控制器中预览我的 DateTime 对象来检查)
  • 你需要做这样的事情
【解决方案3】:

DateTime dt=DateTime.ParseExact("24/01/2013", "dd/MM/yyyy", CultureInfo.InvariantCulture);如果您还需要该信息,请添加时间格式HH:mm

【讨论】:

  • 我必须把它放在哪里?我提醒一下,如果第一个数字大于 12,它将不会进入 POST 功能。
  • 我假设您正在尝试发布此内容,您可以在 cshtml 中进行此解析。
【解决方案4】:
[DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}", ApplyFormatInEditMode = true)]
public DateTime Start { get; set; }

在你看来:

@Html.EditorFor(x => x.Start)

这应该可以。

【讨论】:

  • 不起作用,当然第一个数字是正确的一天,但是如果天大于 12,这个愚蠢的验证器不会让它去发布功能......
  • 你能把你的cshtml代码贴在这里。所以我们可以看看并提出问题所在。
猜你喜欢
  • 2021-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 2013-10-16
相关资源
最近更新 更多