Не дубликат см прилагается пояснениеMVC модель привязки - абстрактные свойства коллекции
Я хотел бы связать установку модели вроде следующего
public class Shop{
public string Name {get;set;}
public ICollection<Product> Products {get;set;} //Product is abstract
}
public abstract class Product{
public string Name {get;set;}
}
public class ProductA : Product{
public string foo {get;set;}
}
public class ProductB :Product{
public string bar {get;set;}
}
и контроллер, как так
public ActionResult(){
Shop model = ShopFactory.GetShop();
return View(model);
}
[HttpPost]
public ActionResult(Shop model){
//....
}
Я использую BeginCollectionItem, чтобы связать коллекцию, однако проблема возникает при отправке формы, поскольку она не может создать абстрактный класс, а именно - объекты внутри Shop.Products
Я посмотрел на подклассы DefaultModelBinder
переопределить CreateModel
однако CreateModel никогда не вызывается с аргументом modeltype = Product
, только modeltype = Shop
Как создать ModelBinder, который будет связывать объект, который имеет абстрактную коллекцию как свойство?
Разъяснение
Этот вопрос не является дубликатом, потому что мы имеем дело не с абстрактной модели, мы имеем дело с моделью, которая имеет коллекцию абстрактных объектов, это проходит отдельный процесс в системе обязательного модели.
Возможный дубликат [MVC 3 Model Binding a Sub Type (абстрактный класс или интерфейс)] (http://stackoverflow.com/questions/9417888/mvc-3-model-binding-a-sub-type-abstract- class-or-interface) –
Не дубликат. Этот вопрос имеет набор абстрактных объектов. Решение в этом вопросе не работает. – MrJD