在DisplayTemplate中使用集合的DisplayName作为单个元素

时间:2015-05-06 06:51:23

标签: c# asp.net-mvc razor

首先,我们没有遇到任何问题的代码。这是一个模型:

    [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为空时使用该属性。

有更清洁的方式吗?

1 个答案:

答案 0 :(得分:1)

我想DisplayNameFor帮助你正在寻找什么:

@Html.DisplayNameFor(m => m.FunnyGuys)

最好使用Display属性优于DisplayName,因为它来自System.ComponentModel.DataAnnotations命名空间,您不仅可以使用其中的文字,还可以使用<{1}} <在您的项目中强>重新。如果您要本地化您的申请。

[Display(Name = "Funny guys")]