2017-05-19 83 views
0

今天我注意到在腳手架剃鬚刀視圖中有奇怪的行爲,它有IEnumerable<Item>模型。Html.DisplayName背後的邏輯是什麼

即使模型是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> 
    } 
... 

它是如何的本身「解壓」收集到一個單一的項目,如果它是如此聰明,它可以做些什麼?

回答

2

它使用此重載:

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

(見MSDN

您可以使用一個IEnumerable<T>擴展方法,而拉姆達只使用了T獲得的財產。

+0

啊,謝謝,我明白了。所以,如果它將是ICollection而不是IEnumerable它將無法正常工作,對吧? –

+0

['ICollection'](https://msdn.microsoft.com/en-us/library/92t2ye13.aspx)擴展了「IEnumerable」和「IEnumerable 」接口,因此應該仍然有效。 –

相關問題