title: Why do the ASP.NET MVC template views use Html.DisplayFor to display data that is not part of the model?
body: <p>I'm learning ASP.NET MVC 4. Some of the default template views contain something like this:</p>
  
  <pre><code>@model IEnumerable&lt;SomeModel&gt;
  ...
  @foreach (var item in Model) {
      &lt;tr&gt;
          &lt;td&gt;
              @Html.DisplayFor(modelItem =&gt; item.Property1)
  &lt;/td&gt;
          &lt;td&gt;
              @Html.DisplayFor(modelItem =&gt; item.Property2)
          &lt;/td&gt;
          &lt;td&gt;
              @Html.ActionLink("Edit", "Edit", new { id=item.Id }) |
              @Html.ActionLink("Details", "Details", new { id=item.Id }) |
              @Html.ActionLink("Delete", "Delete", new { id=item.Id })
          &lt;/td&gt;
      &lt;/tr&gt;
  }
  </code></pre>
  
  <p>My understanding is that the <code>DisplayFor</code> takes an expression where the input parameter is the view's Model and the return value is any object, and finds the appropriate DisplayTemplate for the returned object.</p>
  
  <p>Based on this, I can see why <code>DisplayFor(modelItem =&gt; item.Property1)</code> <em>works</em>, but it doesn't feel like the right choice. If I'm not using the <code>modelItem</code> parameter at all, why use <code>DisplayFor</code>? Is there no method like <code>GetDisplayTemplate(item.Property1)</code>?</p>