Как использовать LabelFor для строго типизированного представления списка - PullRequest
8 голосов
/ 15 июля 2011

Когда я использовал asp.net mvc 3 леса, чтобы составить список.Я получил представление, содержащее таблицу.С заголовками этой таблицы жестко закодированы в представлении.Я хочу использовать LabelFor, поэтому я получаю l10n, который мне нужен.

То, что я пытался сделать (но не получилось), было:

@model IEnumerable<User>
<table>
 <tr>
   <th>
      @(Html.LabelFor<User, string>(model => model.Name)) <!--This line errors-->
   </th>
 </tr>

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

Ошибка с "IEnumerable не содержит определениядля имени ".. и т.д ...

Как мне сделать эту работу?

Ответы [ 3 ]

19 голосов
/ 15 июля 2011

Попробуйте, например,

@(Html.LabelFor<User, string>(model => model.FirstOrDefault().Name))
5 голосов
/ 15 июля 2011

Ваша модель представления не приспособлена к тому, чего вы пытаетесь достичь.Вот как будет выглядеть модель лучшего вида:

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; }
}

, а затем:

@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>

, а с шаблоном отображения вам даже не нужно писать цикл foreach:

@model MyViewModel
<table>
    <tr>
        <th>
            @Html.LabelFor(x => x.NameHeader)
        </th>
    </tr>
    @Html.DisplayFor(x => x.Users)
</table>

и внутри пользовательского шаблона отображения (~/Views/Shared/DisplayTemplates/User.cshtml):

@model User
<tr>
    <td>@Html.DisplayFor(x => x.Name)</td>
</tr>
0 голосов
/ 15 июля 2011

Вы визуализируете Метку до (или вне) итерации foreach, поэтому вы пытаетесь получить доступ к свойству Name в коллекции IEnumerable, которая не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...