当ViewModel设置为DateType的DataType时,从TextBoxFor中排除时间

时间:2017-03-06 20:08:13

标签: c# asp.net-mvc razor

我正在尝试正确显示(可为空)Date-type-only字段。对于此字段,我的Model和ViewModel类定义为....

[DisplayFormat(DataFormatString = "{0:M/dd/yyyy}")]
[DataType(DataType.Date)]       
public DateTime? PeriodEnd { get; set; }

在我的详细信息视图中(基于模型),它正确显示日期(不包括时间元素):

 @Html.DisplayNameFor(model => model.PeriodEnd)

问题:在我的编辑视图中(基于ViewModel),它也显示了我正在尝试排除的时间。这是它的定义方式。

@Html.TextBoxFor(model => model.PeriodEnd, new { @class = "datepicker" })

我也试过......

@Html.TextBoxFor(model => model.PeriodEnd.Value().ToShortDateString(), 
    new { @class = "datepicker" })

...但这产生了错误。

有没有更好的方法来实现这一目标?

2 个答案:

答案 0 :(得分:2)

嗯,首先,您没有使用数据注释。像... % 310 inferences, 0.001 CPU in 0.001 seconds (99% CPU, 591031 Lips) N = 14, M = 113634 ; % 331 inferences, 0.001 CPU in 0.001 seconds (100% CPU, 457731 Lips) N = 15, M = 310572 ; % 352 inferences, 0.001 CPU in 0.001 seconds (100% CPU, 310880 Lips) N = 16, M = 853467 ; % 373 inferences, 0.001 CPU in 0.001 seconds (100% CPU, 703349 Lips) N = 17, M = 2356779 ; ... 之类的东西本身没有做任何事情。使用编辑器模板(DataType.Date),它可用于提供Html.EditorFor类型输入,但如果您使用date,则基本上会忽略它。

您可以通过1)使用Html.TextBoxFor代替或2)明确设置类型来解决此问题:Html.EditorFor

答案 1 :(得分:0)

这是解决方案:

 @Html.TextBoxFor(m => m.PeriodEnd, "{0:M/d/yyyy}", new { @class = "datepicker" })

感谢大家的反馈!