To begin with, the code we have no problems with. It's a model:
[DisplayName("A very hot hotshot")]
public Person Hotshot { get; set; }
[DisplayName("Just a developer")]
public Person Developer { get; set; }
[DisplayName("Some random guy")]
public Person RandomGuy { get; set; }
And then we have a view which looks like this:
@Html.DisplayFor(m=>m.Hotshot)
@Html.DisplayFor(m=>m.Developer)
@Html.DisplayFor(m=>m.RandomGuy)
DisplayTemplate for Person
has a line which uses model's DisplayName
:
@Html.DisplayNameForModel()
It's all nice, but the problem appears when you add a list property to the model and try to display it with DisplayFor
. Here's the model part:
[DisplayName("Funny guys")]
public IEnumerable<Person> FunnyGuys { get; set; }
And, as DisplayFor
is capable of displaying IEnumerable<T>
iterating the T
template, I'm calling it just like for other properties:
@Html.DisplayFor(m=>m.FunnyGuys)
It works great, except for fetching that DisplayName
from the containing collection. It's set to null, since the attribute is on IEnumerable
property, and the template gets a single element from it.
I had to use the workaround:
@Html.DisplayFor(m=>m.FunnyGuys, new {CollectionDisplayName = "Funny guys"})
And then using that property if DisplayName
is null in Person
template.
Is there a cleaner way?
Aucun commentaire:
Enregistrer un commentaire