Вид - динамическая модель - PullRequest
       9

Вид - динамическая модель

0 голосов
/ 26 сентября 2019

Я пытаюсь создать динамическую таблицу в моем представлении, которая будет генерироваться динамически в зависимости от типа модели, которую я отправляю в представление.Итак, в основном у меня есть два действия:

public IActionResult People()
{
        List<Person> lst = new List<Person>();
        // Add data...
        return View("Table", lst);
}

public IActionResult Teams()
{
        List<Team> lst = new List<Team>();
        // Add data...
        return View("Table", lst);
}

Теперь я хотел бы иметь такое же представление, которое будет отображать список людей / команд, чтобы мне не пришлось его дублировать.Мой Table.cshtml выглядит так:

@model List<dynamic>
<table>
    <tr>
        @foreach (var item in Model.ElementAt(0).GetType().GetProperties())
        {
            <td>
                @item.Name
            </td>
        }
    </tr>
    @foreach (var item in Model)
    {
        <tr>
            // foreach (var propValue in item.GetProperties())
            // Get value for each property in the `item`
        </tr>
    }
</table>

Моим основным выводом будет таблица HTML, соответствующая приведенной ниже:

Id, PersonName, Age
1, John, 24
2, Mike, 32
3, Rick, 27

У меня проблема с динамическим получениемзначение для каждого свойства в моем экземпляре класса модели.Я не знаю, как получить значение от предмета (нет такой вещи как item.Property(someName).GetValue()).Таким образом, я мог бы отправить список (T может быть Person, Team, Student, что угодно), и в результате я получил бы <table> со свойствами Person / Team / Student (например, Id, Name, Age) и значениями каждого изсвойства в другом <tr>.

Ответы [ 2 ]

0 голосов
/ 26 сентября 2019

Это приводит к ошибкам, когда я использую @model List<dynamic> в качестве модели представления. Когда я изменяю его на @model dynamic, он работает с кодом ниже

@model dynamic
@using System.Reflection
@{
    var properties = Model[0].GetType().GetProperties();
}
<table>
    <tr>
        @foreach (var item in properties)
        {
            <td>
                @item.Name
            </td>
        }
    </tr>
    @foreach (var item in Model)
    {
        <tr>
            @foreach (PropertyInfo p in properties)
            {
                <td>@p.GetValue(item)</td>
            }
        </tr>
    }

</table>
0 голосов
/ 26 сентября 2019
@model  List<dynamic>
<table>
    <tr>
        @foreach (var item in Model.ElementAt(0).GetType().GetProperties())
        {
            <td>
                @item.Name
            </td>
        }
    </tr>
    @foreach (var item in Model)
    {
        if (item.GetType() == typeof(Person))
        {
            var person = item as Person;

            <tr>
                @person.Name
            </tr>
        }
        if (item.GetType() == typeof(Team)) {

            var team = item as team;

                <tr>
                     @team.Name
               </tr>

        }

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