I found this [Related Topic](https://stackoverflow.com/questions/10227870/basic-mvc-what-does-modelitem-do), but it failed to answer my question.

When automatically creating a strongly typed view, lets say with a `List` scaffolding template, I will get something roughly like this:

```
@model IEnumerable<Test.Models.abc>
<table>
    <tr>
    <th>
        @Html.DisplayNameFor(model => model.ID)
    </th>
</tr>

@foreach (var item in Model) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.ID)
    </td>
</tr>
}
</table>

```

I understand `@Html.DisplayNameFor(model => model.ID)` completely, but not `@Html.DisplayFor(modelItem => item.ID)`. 

What is the purpose of `modelItem`? Replacing it with any arbitrary text will result in a functional web page. It seems that modelItem is just a throwaway word. I guess my real question is why doesn't this work?

```
@Html.DisplayFor(item => item.ID)

```

**Edit**

A good point was brought up in the comments. It seems you are also able to change `model` to anything so long as you change it on both sides of the lambda expression:

```
@Html.DisplayNameFor(abc => abc.ID)

```

A side question would be: How does the `@model` statement at the top affect the functions below? I had previously thought `model` referenced the `@model` expression in order to figure out the display name via the class, but the page still works after the mentioned changes.