Показать все поля dto-list, c # - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужно отобразить все поля dto-list в razorpage. У меня есть около 70 полей каждого объекта dto.

Теперь у меня есть такой код:

    @foreach (var ft in Model.DtoForeignClients)
    {
        <tr>

            <td>@ft.Name</td>
            <td>@ft.Head</td>
            <td>@ft.Customer</td>
            <td>@ft.Item</td>
            //~66 another fields
         </tr>

это работает, но я ищу, чтобы улучшить свой код. я хочу что-то:

   @foreach (var ft in Model.DtoForeignClients)
    {
    <tr>
       @for (int i = 0; i<ft.CountOfFields;i++)
        <td>@ft[i]</td>
    </tr>

потому что я не хочу повторяться около 70 раз.

Как я могу это сделать? Должен ли я смотреть в IEnumerable реализации для моего DTO? или любые другие идеи, спасибо

1 Ответ

1 голос
/ 11 апреля 2019

Используйте отражение в вашем представлении, чтобы получить FieldInfo [] объекта. Замените DtoForeignClient вашим реальным типом ft.

@using System.Reflection;

@{
   var fields = typeof(DtoForeignClient).GetFields(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance);
 }

@foreach (var ft in Model.DtoForeignClients)
{
    <tr>        
      @foreach(FieldInfo f in fields)
      {
         <td>@f.GetValue(ft)</td>
      }
    <tr>
}
...