Я следую по адресу Связыватель модели для абстрактного класса в asp. net core mvc 2 , но моя модель не связывает HostedControls в ConcreteControlHost (см. Ниже). Если я изменю тип HostedControls на ConcreteControlText [], он будет привязан. Я хотел бы сохранить его как AbstractControl [], чтобы я мог размещать несколько типов управления.
Я знаю, что абстрактное связыватель работает, потому что связывает MainModel.Controls.
При отладке привязки из ConcreteControlHost, в binder._propertyBinders есть запись для HostedControls, как показано ниже: {[ModelMetadata (Property: 'ConcreteControlHost.HostedControls' Type: 'AbstractControl[]'), {Microsoft.AspNetCore.Mvc.ModelBinding.Binders.ArrayModelBinder<MyProject.AbstractControl>}]}
После этого свойства (Value.ElementBinder.Inner) в конечном итоге приводит к AbstractModelBinder.
Точки останова в AbstractModelBinder не достигаются при привязке свойств ConcreteControlHost, но возникают при привязке свойств MainModel (как в I получить совпадения для ConcreteControlHost, но не для ConcreteControlText).
Это не связано с В шаблоне редактора вызовите другой шаблон редактора с той же моделью , потому что это не та же модель , и поскольку все отображается правильно, привязка не выполняется. MainModel.Controls не ссылается ни на один из ConcreteControlTexts, на который ссылается HostedControls.
public class MainModel {
public AbstractControl[] Controls;
}
public abstract class AbstractControl {
public string TypeName { get; set;}
}
public class ConcreteControlText: AbstractControl {
public string Text { get; set; }
}
public class ConcreteControlHost: AbstractControl {
public AbstractControl[] HostedControls { get; set; }
}
Кто-нибудь видит, что мне нужно изменить, чтобы привязка модели работала в ConcreteControlHost.HostedControls?