【问题标题】:Date displays options in Asp.Net MVC日期在 Asp.Net MVC 中显示选项
【发布时间】:2013-02-17 14:13:38
【问题描述】:

我在 .Net MVC4 应用程序的模型中有一个 DateTime 字段。我希望编辑视图显示日期值,同时向用户提供使用日历控件的选项。

添加属性[DisplayFormat(DataFormatString = "{0:d}",ApplyFormatInEditMode = true)] 向用户显示当前值作为文本字段:

添加[DataType(DataType.Date)] 显示“mm/dd/yyyy”并隐藏当前值:

并在选择向下箭头时提供漂亮的日历小部件:

有没有办法结合这个功能,让用户可以看到当前选定的日期和日历小部件?

更新

这是浏览器行为。控件生成的标记包含当前日期值:

 <input class="text-box single-line" data-val="true" data-val-date="The field Dining Date must be a date." data-val-required="The Dining Date field is required." id="DiningDate" name="DiningDate" type="date" value="2/15/2013">

IE9 通过显示不带小部件的日期来呈现此标记,而 Chrome 隐藏日期。

【问题讨论】:

  • 实际的 HTML &lt;input 元素上是否有 type="date" 属性?如果是这样,我认为这就是日历小部件的来源,它可能不会在较旧的非 HTML5 浏览器中显示。
  • @danludwig 感谢您将我指向生成的标记,这就是问题所在。

标签: asp.net-mvc


【解决方案1】:

IE9 通过显示没有小部件的日期来呈现此标记

IE9 根本不支持日期输入,因此您可以忘记此 Web 浏览器中的任何小部件。甚至 IE10 都不支持 :-) 请查看 following article 以查看支持 HTML5 日期输入的 Web 浏览器。所有其他不支持它的浏览器只会显示一个没有任何日期时间选择器小部件的标准文本框。

而 Chrome 隐藏了日期。

HTML specification 声明日期输入字段的value 属性必须使用RFC 3339 format 才能显示此默认值:

<input id="Date" name="Date" type="date" value="2013-02-17" />

如果value 使用不同的格式,则不会显示此默认值。

因此,如果您不想获得未定义的行为,请确保遵守规范:

[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]

然后你会得到预期的结果:

【讨论】:

  • +1 做到了,感谢您的解释和快速响应。
猜你喜欢
  • 2019-01-06
  • 2021-10-10
  • 1970-01-01
  • 2015-11-20
  • 1970-01-01
  • 1970-01-01
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多