【问题标题】:DisplayFormat in MVC datetime [duplicate]MVC日期时间中的DisplayFormat [重复]
【发布时间】:2014-11-12 22:41:34
【问题描述】:

我正在尝试像这样在 MVC 4 类中格式化日期时间属性:

[Required]
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode = true,DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime DateOfBirth { get; set; }

但不工作 DateOfBirth 属性接受前一个月的日期格式(例如:接受 1/27/1990 并且不接受 27/1/1990)

我正在寻找答案并尝试了许多解决方案,但效果不佳

enter link description here

使用 html 助手:

@Html.TextBoxFor(Model => Model.DateOfBirth) 感谢您的帮助,谢谢

【问题讨论】:

  • 你使用什么 html 助手?
  • @Html.TextBoxFor(Model => Model.DateOfBirth) 感谢关注

标签: asp.net asp.net-mvc twitter-bootstrap asp.net-mvc-4 c#-4.0


【解决方案1】:

[[DisplayFormat] 属性仅用于如何在视图中显示值。它与将被接受的格式无关。您可以编写一些代码来接受字符串,并在服务器中将其解析回正确的 DateTime 属性。存储您的 DateTime,然后当您将其显示给用户时,您使用您的 [[DisplayFormat] 属性

您要做的是使用正则表达式来验证用户输入了一个数字,然后是“/”,然后是数字,然后是“/”,然后是数字。

显然你不是第一个遇到这种情况的人,这就是为什么日期选择器被如此普遍使用的原因,它们迫使用户选择一个日期并适当地格式化它

【讨论】:

  • 感谢这是一个不错的技巧,如果插入时没有机会更改数据格式,我将使用它非常感谢@Scott
  • 这并不完全正确。与ApplyFormatInEditMode = true 结合使用并与@Html.EditorFor() the use of [DisplayFormat]` 一起使用很好,只是格式需要为"yyyy-MM-dd" 才能在浏览器DatePicker 控件中正确显示
【解决方案2】:

如果您使用@Html.TextBoxFor() 来呈现控件,那么[DisplayFormat] 属性中的[DataType(DataType.Date)]ApplyFormatInEditMode = true 并不是真正需要的。这些仅在您使用 @Html.EditorFor() 呈现浏览器日期选择器时适用,在这种情况下,格式必须为 "yyyy-MM-dd" 才能在所有浏览器中正确显示。

如果要在文本框中显示格式化的日期,请使用

@Html.TextBoxFor(Model => Model.DateOfBirth, "{0:dd/MM/yyyy}")

请注意,如果您发回 "27/1/1990"(1990 年 1 月 27 日)并且服务器的当前文化具有日期格式 "MM/dd/yyyy",那么您将需要一个自定义模型绑定器来正确绑定日期。 Refer example here

【讨论】:

  • 我正在尝试插入数据,我只是将数据传递给 httppost 方法以插入这是一个业务类,用于验证属性 DateOfBirth 属性仅接受月/日/年格式的日期
  • 不确定我是否理解。如果您希望格式为"MM/dd/YYYY",为什么要在浏览器中将其呈现为"dd/MM/yyyy"
  • 不,我想以“dd/MM/yyyy”的形式格式化数据,但是当我尝试插入数据时(错误 '27/01/1991' 对 DateOfBirth 无效)
  • 好的,那是因为服务器的日期格式是“MM/dd/yyyy”(可能只是使用默认的InvariantCulture)。您需要创建一个自定义模型绑定器。请参阅上面我的答案中的链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多