假设我们有这样的模型:
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),但认为这不是一个好习惯。
谢谢,圣诞快乐。
答案 0 :(得分:0)
您应该在模型属性上添加DisplayAttribute
属性,如下所示:
public MyViewModel
{
[Display(Name = "Some Items")]
IEnumerable<MyItem> MyItems;
int Count;
}
之后,您可以在视图中使用DisplayFor
扩展名方法,然后输出Some Items
。