您可以使用DisplayTemplates和EditorTemplates来定义如何显示特定类型的属性。
在视图>共享文件夹中创建名为DisplayTemplates的文件夹,然后创建另一个名为EditorTemplates的文件夹,然后可以为要显示的每种不同类型的属性添加自定义模板。模板以类似于部分的方式工作。
我有一个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>
这里是一个时间跨度的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查看具有最高票数而非接受答案的答案。
当您使用[DataType(DataType.Date)] ASP.NET MVC生成一个输入字段type =“date”。支持HTML5的浏览器(Chrome)在这些字段上使用日期选择器。该字段的值必须格式化为YYYY-MM-DD才能正确显示。你在IE,Chrome,FF中获得不同的结果吗? – Erwin
@Erwin,除Chrome之外,我没有检查浏览器,但我只试过yy/mm/dd和yy-mm-dd,而不是yyyy。自那时起我就解决了这个问题,但稍后会再看一次。 – ProfK
我希望[这] [1]可以帮助你。 P.S.我有同样的,并帮助我 [1]:http://stackoverflow.com/questions/12633471/mvc4-datatype-date-editorfor-wont-display-date-value-in-chrome-fine-in- interne – alikhil