これは、ヘッダー ( NOT VALUES ) を取得するために機能します。
@model IEnumerable<SomeModel>
...
<th>@Html.DisplayNameFor(m => m.SomeModelProperty)</th>
SomeModelProperty が次の場合:
[Display(Name = "An Excellent Header")]
SomeModelProperty { get; set; }
次に、ヘッダーth
要素に「AnExcellentHeader」を表示します。
モデルが m.SomeModelProperty を持たない IEnumerable であるため、これは機能しないと思われるかもしれませんが、HtmlHelper にHtmlHelper<IEnumerable<TModel>>
はラムダのパラメーターがTModel
ではなくであるようなものがあるため、機能しますIEnumerable<TModel>
。これはメタデータを使用するだけなので、コレクションからのアイテムは必要ありません。(ただし、インテリセンスはm.
あなたに嘘をつき、それがコレクションだと思わせるでしょう)。このクールなオーバーロードがいつ追加されたのかはわかりませんが、Index.cshtml にとって非常に便利で、@Html.DisplayNameFor(m => @Model.FirstOrDefault().SomeModelProperty)
私が避けたいファンキーなものを排除します。
http://msdn.microsoft.com/en-us/library/hh833697(v=vs.108).aspx
ただし、モデルが IEnumerable ではなく、次のようにプロパティとして IEnumerable が含まれている場合、これを機能させる方法がわかりません。
public class SomeList
{
public List<SomeModel> SomeModels { get; set; }
public int Page { get; set; }
public DateTime CurrentAsOf { get; set; }
}
ジェネリック型パラメーターを明示することを望んでいましたが、型パラメーターは、ページで作成された HtmlHelper から細流化するエンジンによって指定されていると思います。ページで新しい HtmlHelper を宣言したり、型パラメーターを明示的に指定したりできますか?
インデックス.cshtml:
@model SomeList
//No idea how to do this:
@Html.DisplayNameFor<IEnumerable<SomeModel>>(m => m.SomeModelProperty)