DisplayTemplates と EditorTemplates を使用して、特定のタイプのプロパティを表示する方法を定義できます。
Views > Shared フォルダーで、DisplayTemplates と呼ばれるフォルダーと EditorTemplates と呼ばれる別のフォルダーを作成し、表示するさまざまな種類のプロパティごとにカスタム テンプレートをこれらに追加できます。テンプレートはパーシャルと同様に機能します。
DateTime の DisplayTemplate 用に 1 つ持っています
@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 ヘルパー - ベスト プラクティス/使用法承認された回答ではなく、賛成票が最も多い回答を参照してください。