Цикл по свойству модели с помощью Razor в представлении MVC

У меня есть эта модель с большим количеством свойств

public class Task {
    public string Key { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    ....
}

Мне нужно создать таблицу в представлении, чтобы перечислить все свойства задачи.

Тот же вопрос уже задавался, но я не хочу использовать ViewData: Перебор свойств модели представления в представлении

Любая идея?


person Sergio    schedule 05.05.2016    source источник
comment
верните список объектов Task из вашего метода действия, чтобы просмотреть и просто просмотреть его. Что вас останавливает?   -  person Shyju    schedule 05.05.2016
comment
Вы хотите перечислить свойства или значения или свойства?   -  person Chakrava    schedule 05.05.2016
comment
Я возвращаю список задач, но как я могу просмотреть каждое свойство?   -  person Sergio    schedule 05.05.2016
comment
вы хотите просмотреть все свойства каждого элемента задачи или элементов в списке задач?   -  person Shyju    schedule 05.05.2016
comment
@Chakrava ценности   -  person Sergio    schedule 05.05.2016
comment
Двойной цикл @Shyju: задача foreach Я хочу просмотреть свойства и отобразить значение   -  person Sergio    schedule 05.05.2016
comment
Взгляните на этот сообщение. Я думаю, это то, что вам нужно.   -  person yoliva    schedule 05.05.2016


Ответы (4)


Это работает для вас?

@foreach(var task in Model) {
    <tr>
    @foreach(var property in typeof(Task).GetProperties()) {
        <th>@(property.GetValue(task, null))</th>
    }
    </tr>
}
person Steve Cooper    schedule 06.05.2016

Вероятно, вам нужно использовать отражение, чтобы получить свойства.

Что-то вроде этого

@model List<Task>
@if(Model.Any())
{
   var propArr = Model.Events[0].GetType().GetProperties();
   foreach (var ev in Model)
   {
      var p = ev.GetType().GetProperties();
      foreach (var propertyInfo in propArr)
      {
         <h4>@propertyInfo.Name</h4>     
         var val = propertyInfo.GetValue(ev, null);
         if (val != null)
         {
             <p>@val</p>
         }
      }        
    }
}
person Shyju    schedule 05.05.2016
comment
Я не знаком с отражением, но этот метод не работает для меня - person Sergio; 05.05.2016

пожалуйста, используйте это

@foreach (var task in Model)
{    
    <tr>

        <td>
          @task.Title 
        </td>

    </tr>
}

и так далее для других свойств. Затем в вашем контроллере вы возвращаете список задач, например

`return View(your taskList);`
person suulisin    schedule 05.05.2016
comment
Я хотел бы, чтобы вы использовали цикл for для просмотра свойств, а не список по одному - person Sergio; 05.05.2016

Расширенный пример Стива Купера:


    <table class="table table-bordered table-responsive table-hover">
                        @foreach (var item in Model.a)
                        {
                            <tr>
                               @foreach (var prop in typeof(a).GetProperties())
                               {
                                   <th>@(prop.Name)</th>
                               }
                            </tr>
                            <tr>
                                @foreach (var prop in typeof(a).GetProperties())
                                {
                                    <td>@(prop.GetValue(item, null))</td>
                                }
                            </tr>
                        }
                    </table>

person agohil    schedule 04.02.2019