DisplayNameFor()从模型中的List <Object>
我相信这是非常简单的,我似乎无法find正确的方式来显示我的模型内列表中的项目的显示名称。
我的简化模型:
public class PersonViewModel { public long ID { get; set; } private List<PersonNameViewModel> names = new List<PersonNameViewModel>(); [Display(Name = "Names")] public List<PersonNameViewModel> Names { get { return names; } set { names = value; } } }
和名称:
public class PersonNameViewModel { public long ID { get; set; } [Display(Name = "Set Primary")] public bool IsPrimary { get; set; } [Display(Name = "Full Name")] public string FullName { get; set; } }
现在我想创build一个表来显示一个人的所有名字,并获取DisplayNameFor FullName。 明显,
@Html.DisplayNameFor(model => model.Names.FullName);
将无法正常工作
@Html.DisplayNameFor(model => model.Names[0].FullName);
如果没有名字就会中断 在这里获得显示名称是否有“最好的方法”?
这实际上工作,即使没有在列表中的项目:
@Html.DisplayNameFor(model => model.Names[0].FullName)
它的工作原理是MVCparsingexpression式而不是实际执行它。 这可以让它find正确的属性和属性,而不需要在列表中有一个元素。
值得注意的是,参数(上面的model
)甚至不需要使用。 这也适用于:
@Html.DisplayNameFor(dummy => Model.Names[0].FullName)
如下所示:
@{ Namespace.Of.PersonNameViewModel dummyModel = null; } @Html.DisplayNameFor(dummyParam => dummyModel.FullName)
还有另外一种方法可以做到这一点,我想这更清楚了:
public class Model { [Display(Name = "Some Name for A")] public int PropA { get; set; } [Display(Name = "Some Name for B")] public string PropB { get; set; } } public class ModelCollection { public List<Model> Models { get; set; } public Model Default { get { return new Model(); } } }
然后,在视图中:
@model ModelCollection <div class="list"> @foreach (var m in Model.Models) { <div class="item"> @Html.DisplayNameFor(model => model.Default.PropA): @m.PropA <br /> @Html.DisplayNameFor(model => model.Default.PropB): @m.PropB </div> } </div>