如何在视图模型中使用DisplayNameFor?

时间:2014-12-25 09:35:35

标签: asp.net-mvc html-helper

假设我们有这样的模型:

public class MyItem
{
    [DisplayName("TheTitle")]
    public string Title {get; set;}
}

如果编辑/详细信息/删除视图中包含简单模型,我们可以像这样使用@ Html.DisplayNameFor:

@model MyItem; 

@Html.DisplayNameFor(model => model.Title) //Result "TheTitle"
@Html.EditorFor(model => model.Title)

或在列表视图中:

@model IEnumerable<MyItem>;

foreach (var myItem in Model)
{
    @Html.DisplayNameFor(model => model.Title) //Result "TheTitle". Seems the model is still MyItem, rather than Inemerable<MyItem>.
    @Html.EditorFor(model => model.Title)
}

这样可以更容易地在许多视图上更改属性的标题。

但复杂的视图模型如:

public MyViewModel
{
    [DipslayName("Count")]
    int Count;
    IEnumerable<MyItem> MyItems;
}

在这种情况下,如何显示“TheTitle”?

@model IEnumerable<MyViewModel>;

@Html.DisplayNameFor(model => model.Count) //Result "TheCount".
@Html.EditorFor(model => model.Count)

@foreach (var myItem in Model.MyItems)
{
     @Html.DisplayNameFor(model => ???) //How to display "TheTitle" here?
     @Html.EditorFor(model => ???) //Same question, I think.
}

我在这里尝试了一些硬编码(字符串“@:TheTitle”而不是DisplayNameFor),但认为这不是一个好习惯。

谢谢,圣诞快乐。

1 个答案:

答案 0 :(得分:0)

您应该在模型属性上添加DisplayAttribute属性,如下所示:

public MyViewModel
{
    [Display(Name = "Some Items")]
    IEnumerable<MyItem> MyItems;
    int Count;
}

之后,您可以在视图中使用DisplayFor扩展名方法,然后输出Some Items