为啥日期时间选择器的行为?

Posted

技术标签:

【中文标题】为啥日期时间选择器的行为?【英文标题】:Why datetime picker behaves?为什么日期时间选择器的行为? 【发布时间】:2016-02-08 16:14:26 【问题描述】:

我有模特:

const string MyDateFormat = "yyyy-MM-dd";

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = MyDateFormat, ApplyFormatInEditMode = true)]
public DateTime Date  get; set; 

并查看:

@html.EditorFor(model => model.Date, new  htmlAttributes = new  @class = "form-control datepicker"  )

谁在表单加载时由于某种原因没有设置模型值,我想知道为什么? 我必须手动:

<script type="text/javascript">
    $(document).ready(function () 
        var elem = $("#Date").val('@Model.Date.ToString(MyDateFormat)');
    );
</script>

但是,在表格中我看到 dd.MM.yyyy(这是我的计算机区域设置)格式,为什么?

如果尝试设置 MyDateFormat = "dd.MM.yyyy",不起作用,请参阅 dd.MM.yyyy:

我明白,yyyy-MM-dd 是 .net 运行时本地格式,而 dd.MM.yyyy 是我的计算机本地格式。 如何做到不依赖计算机的语言环境和 .net 运行时语言环境?

【问题讨论】:

你用的是什么日期选择器? jQuery 用户界面? 引导日期选择器使用 Bootstrap 不附带日期选择器。 【参考方案1】:

我相信您缺少表达式周围的花括号。

尝试将表达式 yyyy-MM-dd 包裹在大括号中,例如 0:yyyy-MM-dd

const string MyDateFormat = "0:yyyy-MM-dd";

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = MyDateFormat, ApplyFormatInEditMode = true)]
public DateTime Date  get; set; 

您也可以在视图中使用以下内容,而不是使用 DisplayFormat 属性来装饰您的模型属性。

@Html.TextBoxFor(model => model.Date, "0:yyyy-MM-dd", new  @class="datePicker");

【讨论】:

谢谢,TextBoxFor 工作,但文本框样式未应用,添加类“form-control” - 显示没有样式【参考方案2】:

您指定DataFormatString 的问题是错误的,因为您应该使用"0:yyyy-MM-dd" 而不是"yyyy-MM-dd"。请尝试以下代码,它应该可以工作:

[DataType(DataType.Date)]
[DisplayFormat(DataFormatString = "0:yyyy-MM-dd", ApplyFormatInEditMode = true)]
public DateTime? Date get; set; 

【讨论】:

以上是关于为啥日期时间选择器的行为?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 datepicker 值没有改变?

如何更改 Chrome 原生日期时间选择器的蓝色?

日期选择器滚动到过去的日期,即使最小日期设置为当前日期

根据下拉值设置 2 个日期选择器的最小日期和最大日期

日期选择器和时间选择器的问题

如何更改日期范围选择器的日期格式?