这适用于获取标题(NOT VALUES):
@model IEnumerable<SomeModel>
...
<th>@Html.DisplayNameFor(m => m.SomeModelProperty)</th>
如果 SomeModelProperty 是:
[Display(Name = "An Excellent Header")]
SomeModelProperty { get; set; }
th
然后它会在标题元素中显示“一个优秀的标题” 。
你会认为这不起作用,因为模型是 IEnumerable,它没有 m.SomeModelProperty,但它起作用是因为 HtmlHelper 有一个HtmlHelper<IEnumerable<TModel>>
这样的 lambda 的参数是TModel
,而不是IEnumerable<TModel>
。由于这仅使用元数据,因此不需要集合中的项目。(虽然intellisense onm.
会欺骗你,让你认为它是一个集合)。我不确定何时添加了这个很酷的重载,但对于 Index.cshtml 来说非常方便,并且消除了@Html.DisplayNameFor(m => @Model.FirstOrDefault().SomeModelProperty)
我想要避免的时髦的东西。
http://msdn.microsoft.com/en-us/library/hh833697(v=vs.108).aspx
但是,当我的模型不是 IEnumerable 而是包含 IEnumerable 作为属性时,我无法弄清楚如何让它工作,例如:
public class SomeList
{
public List<SomeModel> SomeModels { get; set; }
public int Page { get; set; }
public DateTime CurrentAsOf { get; set; }
}
我希望对泛型类型参数进行明确说明,但我认为类型参数是由引擎指定的,该引擎从使用页面创建的 HtmlHelper 中向下渗透。我可以在页面中声明一个新的 HtmlHelper,或者以某种方式明确指定类型参数吗?
索引.cshtml:
@model SomeList
//No idea how to do this:
@Html.DisplayNameFor<IEnumerable<SomeModel>>(m => m.SomeModelProperty)