对于相同的DateTime值,不能使用不同的EditorTemplates吗?

时间:2011-07-05 18:28:24

标签: asp.net-mvc-3 datetime mvc-editor-templates

让我们说在我的模型中我有public DateTime Date {get;set;}属性。在视图上,它应该用几个文本框表示 - 一个用于Date,另一个用于Time。

我创建了两个不同的编辑器模板

DateTime.cshtml:

@model DateTime?
@Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "datePicker", style = "width:90px"  })

和TimeOnly.cshtml

@model DateTime?
@Html.TextBox("", (Model.HasValue ? Model.Value.ToShortTimeString() : string.Empty), new { @class = "timePicker", style = "width:90px" })

视图上的EditorFor字段

@Html.EditorFor(x => x.Date)
@Html.EditorFor(x => x.Date,"TimeOnly")

现在,问题是传递给控制器​​的Date属性的实际值是默认时间12:00。 如果我们更改EditorFor字段的顺序,Date会发生同样的事情 - 在TimeOnly模板应用后,Date会立即回滚到默认Date值,尽管Time的部分时间保持正确。

再次在视图本身上,值是可以的,但是在提交时,它会将默认值传递给控制器​​,使用正确的日期和默认时间,反之亦然(它取决于首先使用的模板)

当然,我总是可以通过向模型添加另一个属性来分隔日期和时间,但是有更好的解决方案吗?

1 个答案:

答案 0 :(得分:1)

Scott Hanselman在博客中谈到了custom model binder如何在这种情况下使用。