当ViewModel设置为日期的数据类型时,将TextBoxfor的时间排除在外



我正在尝试正确显示(无效)仅日期型字段。对于此字段,我的模型和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" })

...但这产生了错误。

有更好的方法可以实现这一目标?

好吧,首先,您不是使用数据注释。诸如DataType.Date之类的事情自己没有做任何事情。使用编辑模板(Html.EditorFor),可以使用date类型输入,但是如果您使用Html.TextBoxFor,则基本上被忽略了。

您可以通过1)使用Html.EditorFor而不是修复该方法或2)明确设置类型:@Html.TextBoxFor(m => m.PeriodEnd, new { type = "date", @class = "datepicker" })

这是解决方案:

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

感谢您的反馈!

最新更新