首先,我们没有遇到任何问题的代码。这是一个模型:
[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; }
然后我们有一个看起来像这样的观点:
@Html.DisplayFor(m=>m.Hotshot)
@Html.DisplayFor(m=>m.Developer)
@Html.DisplayFor(m=>m.RandomGuy)
Person
的DisplayTemplate有一行使用模型的DisplayName
:
@Html.DisplayNameForModel()
一切都很好,但是当您向模型添加list属性并尝试使用DisplayFor
显示它时,会出现问题。这是模型部分:
[DisplayName("Funny guys")]
public IEnumerable<Person> FunnyGuys { get; set; }
并且,由于DisplayFor
能够显示IEnumerable<T>
迭代T
模板,我就像其他属性一样调用它:
@Html.DisplayFor(m=>m.FunnyGuys)
除了从包含集合中获取DisplayName
之外,它的效果很好。它被设置为null,因为该属性位于IEnumerable
属性上,并且模板从中获取单个元素。
我不得不使用解决方法:
@Html.DisplayFor(m=>m.FunnyGuys, new {CollectionDisplayName = "Funny guys"})
然后在DisplayName
模板中Person
为空时使用该属性。
有更清洁的方式吗?
答案 0 :(得分:1)
我想DisplayNameFor
帮助你正在寻找什么:
@Html.DisplayNameFor(m => m.FunnyGuys)
最好使用Display
属性优于DisplayName
,因为它来自System.ComponentModel.DataAnnotations
命名空间,您不仅可以使用其中的文字,还可以使用<{1}} <在您的项目中强>重新。如果您要本地化您的申请。
[Display(Name = "Funny guys")]