Как обрабатывать множество производных моделей только с одним контроллером

Я использую ASP.NET MVC, и у меня есть несколько классов моделей, полученных из родительского объекта. Я хочу обрабатывать все эти модели в одном действии контроллера, поскольку они почти идентичны, за исключением некоторых полей данных. Я хочу сохранить их в базу данных. Как я могу добиться такого поведения?

Пример:

    class ParentModel {...}
    class ChildModel1 : ParentModel {...}
    class ChildModel2 : ParentModel {...}
    class ChildModel3 : ParentModel {...}
    class ChildModel4 : ParentModel {...}

    public class ModelController : Controller
    {
        //But with this I want to handle all the child objects as well
        //And add them automatically to the database.
        public ActionResult Add(ParentModel model)
        {
            db.ParentModel.Add(model);
        }
    }

person DalekSupreme    schedule 14.04.2015    source источник
comment
это может помочь или не помочь stackoverflow.com/questions/9417888/   -  person DLeh    schedule 14.04.2015
comment
Это мне очень помогло. Это было больше похоже на отправную точку, но с помощью отражения мне удалось справиться с этими моделями.   -  person DalekSupreme    schedule 16.04.2015
comment
Вы также можете создать интерфейс и наследовать от него родительскую модель, а также установить для действия добавления универсальное значение, которое наследуется от этого интерфейса.   -  person Steven Ackley    schedule 22.04.2015
comment
Можете ли вы объединить дочерние и родительские элементы в одну ViewModel, содержащую обе, и использовать ее вместо этого? Незначительные различия между дочерними объектами могут даже квалифицироваться как бизнес-логика, которую вы можете упаковать в модель представления, чтобы ваш контроллер был красивым и чистым, и вам не приходилось использовать настраиваемое связывание модели или другие хакерские действия.   -  person Brad C    schedule 24.04.2015


Ответы (1)


вы должны создать класс ViewModel, например:

public class viewmodel 
    {
        public ChildModel1 childModel1 { get; set; }
        public ChildModel2 childModel2 { get; set; }
        public ChildModel3 childModel3 { get; set; }
        public ChildModel4 childModel4 { get; set; }
    }

затем создайте объект модели представления:

viewmodel v = new viewmodel();

теперь вы можете добавить свою дочернюю модель в модель представления:

v.childModel1 = yourchildmodel1;
v.childModel2 = yourchildmodel2;
v.childModel3 = yourchildmodel3;
v.childModel4 = yourchildmodel4;

теперь вы можете передать эту модель.

person Mostafa Azarirad    schedule 28.04.2015