当使用`[DataType(DataType.Text)]`时,如何在模型中声明日期格式样式

时间:2016-07-01 17:30:06

标签: c# jquery asp.net-mvc-5 bootstrap-datepicker

通常,当我在模型中使用[DisplayFormat(DataFormatString="{0:d}")]属性和DateTime属性时,DateTime值只能正确显示日期部分。

但是,因为Edge(并且只有Edge)会覆盖Bootstrap Datepicker以显示自己的Datepicker,所以我必须将我的属性更改为以下内容(以模型中的一个属性为例):

[Required]
[Display(Name="Start Date")]
[DataType(DataType.Text)]  // this is required to make Bootstrap 
                           // datepicker work with Edge
[DisplayFormat(DataFormatString="{0:d}")] // this attribute is now ignored
public DateTime? SelectedStartDate { get; set; }

换句话说,我必须将DateTime字段声明为文本,因此当我的页面呈现时,它看起来像这样。

Value is rendered as DateTime instead of time

当用户选择日期时,会显示正确的格式,以便将该部分固定下来。

<script>
  $(function () {
      var formatparam = {format:"mm/dd/yyyy", setDate: new Date(), autoclose: true };
      $("#SelectedStartDate").datepicker(formatparam);
      $("#SelectedEndDate").datepicker(formatparam);
  });
</script>

我可以在模型或脚本块中声明某些内容,以便默认值仅显示为Date而不是DateTime吗?

2 个答案:

答案 0 :(得分:0)

鉴于SelectedStartDate将是字符串

@string.Format("{0:d}", Model.SelectedStartDate)

答案 1 :(得分:0)

我经历了几次范式转换和重构。感谢@Steven Muecke的建议。

在早期的迭代中,我尝试过@Html.TextBoxFor(m => m.SelectedStartDate)但没有成功。我不知道的是我还需要添加格式化字符串,所以它看起来像这样:

  

@ Html.TextBoxFor(m =&gt; m.SelectedStartDate,&#34; {0:d}&#34;)

所以我的模型更清洁:

[Required]
[Display(Name="Start Date")] 
[DisplayFormat(DataFormatString="{0:d}")]
public DateTime? SelectedStartDate { get; set; }

现在的行为是我需要的:默认视图被格式化为仅日期而不是日期时间。