Html.DisplayNameFor背后的逻辑是什么

时间:2017-05-19 13:29:13

标签: c# razor asp.net-core asp.net-core-mvc

今天我注意到脚手架剃刀视图中的奇怪行为,其中IEnumerable<Item>模型。

即使模型是IEnumerable,它也会对表格标题使用单项表示法

@model IEnumerable<Item>

<table class="table">
    <tr>
        <th>
            @Html.DisplayNameFor(model => model.Genre)
        </th>
        ... 
        <th>
            @Html.DisplayNameFor(model => model.Price)
        </th>
        <th></th>
    </tr>

    @foreach (var item in Model)
    {
        <tr> ... </tr>
    }
...

它本身&#39;打开包装&#39;收集到单个项目,如果它如此聪明,它还能做什么?

1 个答案:

答案 0 :(得分:2)

正在使用此重载:

public static MvcHtmlString DisplayNameFor<TModel, TValue>(
    this HtmlHelper<IEnumerable<TModel>> html,
    Expression<Func<TModel, TValue>> expression
)

(见MSDN

您可以在IEnumerable<T>上使用扩展方法,而lambda只使用T来获取属性。