Calling IEnumerable Überladung von DisplayNameFor [duplicate]
Diese Frage hat hier bereits eine Antwort:
DisplayNameFor () From List <Objekt> in Model 3 AntwortenDies 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)