Преобразование элемента модели в производный класс - PullRequest
0 голосов
/ 06 августа 2020

У меня два класса и метод. Я пытаюсь преобразовать в методе List<Timelineinfo> в List<Edit>.

public class Timelineinfo
    {
        public int Name { get; set; }
        public int Age { get; set; }
    }
 public class Edit : Timelineinfo
    {
        public int Confirmed { get; set; }
    }

Метод:

public ActionResult Edit(SubmitModel model)
        {
            model.Timelineinfos = (Edit)model.Timelineinfos; //Convert the Timelineinfo data into the Edit class,
                                                             // which has an additional Confirmed property.
            model.Confirmed = 0;
            return null;
        }

Однако в строке model.Confirmed = 0; Я получаю сообщение об ошибке:

SubmitModel 'не содержит определения для' Confirmed 'и не может быть найден доступный метод расширения' Confirmed ', принимающий первый аргумент типа' SubmitModel '(вы отсутствует директива using или ссылка на сборку?)

Модель отправки выглядит следующим образом:

 public class SubmitModel
    { 
        [BindProperty]
        public Timelineinfo Timelineinfos { get; set; }       
    }

1 Ответ

0 голосов
/ 06 августа 2020

Насколько мне известно, это невозможно сделать с помощью простого встроенного преобразования.

У вас есть 2 хороших варианта:

  1. Используйте AutoMapper, который вы можете настроить это, и библиотека сделает однострочный для этого случая, см. здесь: https://docs.automapper.org/en/stable/Getting-started.html

  2. Напишите метод, например, конструктор в ваше редактирование:

     public class Edit : Timelineinfo
     {
          public Edit(Timelineinfo info)
          {
             Name = info.Name;
             Age = info.Age;
          }
    
          public int Confirmed { get; set; }
     }
    

Со списком:

public ActionResult Edit(List<SubmitModel> model)
{
            model.Timelineinfos = model.Select(x => new Edit(x.TimelineInfo)).ToList();
            model.Confirmed = 0;
            return null;
}

Без списка:

public ActionResult Edit(SubmitModel model)
{
            model.Timelineinfos = new Edit(model.TimelineInfo);
            model.Confirmed = 0;
            return null;
}
...