Calling IEnumerable Überladung von DisplayNameFor [duplicate]

Diese Frage hat hier bereits eine Antwort:

DisplayNameFor () From List <Objekt> in Model 3 Antworten

Dies funktioniert, um die Header zu greifen NOT VALUES):

@model IEnumerable<SomeModel>
...
<th>@Html.DisplayNameFor(m => m.SomeModelProperty)</th>

Welche wäre SomeModelProperty:

[Display(Name = "An Excellent Header")]
SomeModelProperty { get; set; }

Dann würde es "An Excellent Header" in der Kopfzeile anzeigenth Element

Sie würden denken, dass dies nicht funktionieren würde, da das Modell IEnumerable ist, was nicht m.SomeModelProperty hätte, aber es funktioniert, weil HtmlHelper ein @ haHtmlHelper<IEnumerable<TModel>> so, dass der Parameter des Lambda @ iTModel, nichtIEnumerable<TModel>. Da hierbei nur Metadaten verwendet werden, ist kein Element aus der Sammlung erforderlich. (Obwohl Intellisense aufm. wird dich anlügen und dich denken lassen, dass es eine Sammlung ist). Ich bin mir nicht sicher, wann diese coole Überladung hinzugefügt wurde, aber es ist ziemlich praktisch für Index.cshtml und beseitigt funky Dinge wie@Html.DisplayNameFor(m => @Model.FirstOrDefault().SomeModelProperty) was ich vermeiden möchte.

http: //msdn.microsoft.com/en-us/library/hh833697 (v = vs.108) .aspx

Ich kann jedoch nicht herausfinden, wie dies funktioniert, wenn mein Modell nicht IEnumerable ist, sondern IEnumerable als Eigenschaft enthält, z. B .:

public class SomeList
{
   public List<SomeModel> SomeModels { get; set; }
   public int Page { get; set; }
   public DateTime CurrentAsOf { get; set; }
}

Ich hatte gehofft, mit den generischen Typparametern explizit zu sein, aber ich denke, die Typparameter werden von der Engine angegeben, die von dem mit der Seite erstellten HtmlHelper herunterrinnt. Kann ich einen neuen HtmlHelper auf der Seite deklarieren oder die Typparameter irgendwie explizit angeben?

Index.cshtml:

@model SomeList
//No idea how to do this:
@Html.DisplayNameFor<IEnumerable<SomeModel>>(m => m.SomeModelProperty)

Antworten auf die Frage(2)

Ihre Antwort auf die Frage