How to use LabelFor on a strongly typed view for a list
Try with some like
@(Html.LabelFor<User, string>(model => model.FirstOrDefault().Name))
Your view model is not adapted to what you are trying to achieve. Here's how a better view model would look like:
public class MyViewModel
{
// This property represents the header value
// you could use data annotations to localize it
[Display(.. some localization here ..)]
public string NameHeader { get; set; }
// This property represents the data source that
// will be used to build the table
public IEnumerable<User> Users { get; set; }
}
and then:
@model MyViewModel
<table>
<tr>
<th>
@Html.LabelFor(x => x.NameHeader)
</th>
</tr>
@foreach (var item in Model.Users) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
</tr>
</table>
and with a display template you don't even need to write a foreach
loop:
@model MyViewModel
<table>
<tr>
<th>
@Html.LabelFor(x => x.NameHeader)
</th>
</tr>
@Html.DisplayFor(x => x.Users)
</table>
and inside the custom display template (~/Views/Shared/DisplayTemplates/User.cshtml
):
@model User
<tr>
<td>@Html.DisplayFor(x => x.Name)</td>
</tr>