您可以使用 DisplayTemplates 和 EditorTemplates 来定义如何显示特定类型的属性。
在 Views > Shared 文件夹中,创建一个名为 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 自定义 HTML 帮助程序 - 最佳实践/使用查看投票数最高的答案,而不是接受的答案。