我在编辑中声明了一个DateTime属性,并创建了视图模型,如:
[DataType(DataType.Date)]
[Display(Name = "Start")]
public DateTime DateTimeStart { get; set; }
我使用EditorForModel
为整个视图模型渲染编辑器,但是当我获取要编辑的记录时,视图模型属性会获得正确的值,正如我通过{{1}显示它们所证明的那样但是MVC呈现的DateTime选择器是空的,当下拉时,显示今天的日期。为什么这些没有显示预期的日期值?
答案 0 :(得分:0)
您可以使用DisplayTemplates和EditorTemplates来定义特定类型的属性的显示方式。
在视图中>共享文件夹创建一个名为DisplayTemplates的文件夹,另一个名为EditorTemplates,然后您可以为要显示的每种不同类型的属性添加自定义模板。模板的工作方式与部分模式类似。
我有一个用于DateTime的DisplayTemplate
@model DateTime
@if (Model.Value.Year == 1) {
@Html.TextBox("", "")
} else {
@Html.TextBox("", (Model.Value.ToString("dd/MM/yyyy")))
}
<span class="help-text">dd/mm/yyyy</span>
这是TimeSpan的EditorTemplate
@model TimeSpan
@Html.DropDownList("", Enumerable.Range(0, 30)
.Select(i => new SelectListItem { Value = i.ToString(),
Text = i.ToString(), Selected = Model.Days == i })) days
@Html.DropDownList("", Enumerable.Range(0, 24)
.Select(i => new SelectListItem { Value = i.ToString(),
Text = i.ToString(), Selected = Model.Hours == i })) hours :
@Html.DropDownList("", Enumerable.Range(0, 60)
.Select(i => new SelectListItem { Value = i.ToString(),
Text = i.ToString(), Selected = Model.Minutes == i })) minutes :
@Html.DropDownList("", Enumerable.Range(0, 60)
.Select(i => new SelectListItem { Value = i.ToString(),
Text = i.ToString(), Selected = Model.Seconds == i })) seconds
我会提醒您,您可以花费大量时间尝试让EditorForModel完全按照您的需要工作,但总会出现无法正常工作的情况,您必须采用手动编码。
我们现在使用HTML帮助程序将自定义HTML包装在每个属性周围,这可以与所描述的自定义模板一起很好地工作,但也允许更多的灵活性。我们使用此页面作为自定义HTML包装器的灵感。 ASP.NET MVC 3 Custom HTML Helpers- Best Practices/Uses查看最高票数而非接受答案的答案。
答案 1 :(得分:0)
它取决于浏览器。截至目前,只有Opera为HTML5日期输入类型提供了一个日期选择器。
答案 2 :(得分:0)
我必须在我的模型属性上设置一个额外的数据注释来解决这个问题。
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
我遇到了和你一样的问题。用户仍将在输入字段中看到mm / dd / yyyy格式。这只是使用内置的HTML EditorFor帮助程序格式化数据。