2013-10-11 2 views
2

У меня есть строго типизированный вид, это IEnumerable. Я пытаюсь использовать помощник DisplayFor для коллекции, которая является свойством моей модели. Помощник отлично работает при повторении моей модели, но когда я пытаюсь использовать ее для подкатегории, она падает.Как использовать html-помощник для общей коллекции?

Моя первая попытка написать что-то вроде этого:

@Html.DisplayFor(modelItem => 
item.Months.Where(x=>x.Equals(month)).Select(x=>x.Amount)) 

Но потом я получил это во время выполнения ошибки: «Шаблоны могут быть использованы только с доступом на местах, доступ к собственности, одномерный индекс массива, или однопараметрические выражения пользовательского индексатора ".

Это мой взгляд в коде:

@foreach (var item in Model) 
{ 
    <tr> 
     <td> 
      @Html.DisplayFor(modelItem => item.Name) @* It works perfectly here*@ 
     </td> 

     @foreach (var month in item.Months) 
     { 
      <td> 
       @month.Amount @* How can I use DisplayFor helper here ? *@ 
      </td> 
     } 

    </tr> 
} 

Вот код моей модели:

public class Department 
{ 
    public string Name { get; set; } 
    public List<Month> Months { get; set; } 
} 

public class Month 
{ 
    public int number { get; set; } 
    [DataType(DataType.Currency)] 
    public decimal Amount { get; set; } 
} 
+1

Я предполагаю, что я должен использовать частичный вид вместо второго Еогеаспа. –

ответ

4

Вы должны рассмотреть возможность использования Partial Views.

@Html.Partial("_months", Months) 

Тогда ваш частичный вид может быть что-то, как показано ниже:

@model IEnumerable<Months> 

<table> 
    <tr> 
     <th> 
      @Html.DisplayNameFor(model => model.number) 
     </th> 
     <th> 
      @Html.DisplayNameFor(model => model.Amount) 
     </th> 
    </tr> 

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

</table> 
+1

Я только что реализовал и работал отлично. Спасибо. –

+0

Рад быть полезным. Если это ответ, который вы хотите, подумайте о том, чтобы принять его. –

+1

+1 за хороший ответ! –

3

Попробуйте это:

@for(int i=0; i<item.Months.Count; i++) 
{ 
    <td> 
     @Html.DisplayFor(modelItem => item.Months[i].Amount) 
    </td> 
} 
+0

Он решил мою проблему, но я реализую Partial View. В любом случае, спасибо. –

Смежные вопросы