【问题标题】:datetime not always getting set日期时间并不总是设置
【发布时间】:2019-03-21 13:10:18
【问题描述】:

我有一个 C# ASP.NET MVC 项目。这个项目有一个表单,它以yy/mm/dd hh:mm 的格式提交日期时间。控制器有一个模型绑定来接收表单值。

datetime 属性声明如下:

public DateTime? aDate { get; set; }

public DateTime? bDate { get; set; } 

使用 Chrome 开发工具,我已经确认DateTime 值总是会被​​发送。 但是,有时会设置 aDate/bDate 属性,有时则不会。

我无法在发送的日期中观察到任何一致的行为或模式,这会导致这种情况。有时其中一个会被设置,而另一个不会。

如果模型中的所有其他属性对应的表单元素具有值,则始终会设置它们。

这可能是什么原因造成的?

【问题讨论】:

  • 不要使用这种格式。使用 ISO8601 格式,与 Javascript 使用的格式相同。您使用的格式可以以任何方式可以想象的方式解析,尤其是因为一年只使用两位数。谁说前两位数字是年份而不是?特别是 今天,2019 年 3 月 21 日? 21/03/19 是什么意思?给定应用程序的语言环境,发送到应用程序的字符串很可能是无效的,并且活页夹会拒绝它
  • 在 Javascript 中使用 Date.toISOString()。在您的 HTML 中确保您提交值,而不是您使用的任何日期选择器中的文本。例如,检查 <input type="date"> 元素的文档。日期格式为YYYY-MM-DD
  • 我试过了,我使用了以下格式字符串 - yyyy-mm-ddThh:mm:ss.ffffff 它没有用
  • 试过如何?在哪里?表单代码是什么样的?如何提交?
  • 我的 datepicker 使用 input type="text" 我检查了提交的字符串并且每次都是正确的,即使服务器无法设置日期

标签: c# asp.net-mvc datetime


【解决方案1】:

我不认为你必须在模型级别将 DateTime 标记为空。只要把它作为日期时间。当表单级别不提供日期时,它会自动转换为您可以在后端完美处理的等效内容。

【讨论】:

  • 这不是我想做的事情,因为没有可空标记,dateTime 会获得一个默认值,它会显示在我的视图上(我需要一个硬编码的 if 语句来阻止它)但是我试过这个无论如何建议,它没有工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
  • 2016-07-06
  • 1970-01-01
相关资源
最近更新 更多