У меня есть следующий вид модели:
public class FormViewModel {
[Required, StringLength(100)]
public string Name { get; set; }
private object _parameters = null;
public object Parameters {
get {
if (_parameters == null)
_parameters = Activator.CreateInstance(Type.GetType("CustomParameters"));
return _parameters;
}
set {
_parameters = value;
}
}
}
Где CustomParameters выглядит так:
public class CustomParameters {
[Required]
public string Text { get; set; }
}
Теперь, если я отправлю следующие данные формы:
"Name" => "Foo"
"Parameters.Text" => "Bar"
Свойство «Имя» установлено правильно, однако свойство «Параметры.Текст» имеет значение null.
Обратите внимание, что приведенный выше сценарий был упрощен, и параметры должны поддерживать привязку к нескольким настраиваемым типам.
Edit - я добавил следующий код, который использовал в ASP.NET MVC, но привязка модели ASP.NET Core выглядит переписанной, и я не вижу, что мне нужно сделать:
public class IRuntimeBindableModelBinder : DefaultModelBinder {
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
var newBindingContext = new ModelBindingContext() {
// In the original method you have:
// ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => bindingContext.Model, typeof(TModel)),
ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => bindingContext.Model, bindingContext.Model.GetType()),
ModelName = bindingContext.ModelName,
ModelState = bindingContext.ModelState,
PropertyFilter = bindingContext.PropertyFilter,
ValueProvider = bindingContext.ValueProvider
};
return base.BindModel(controllerContext, newBindingContext);
}
}
Буду признателен, если кто-нибудь сможет помочь.
Спасибо