ASP.NET MVC Modèle Binder pour le type générique
-
18-09-2019 - |
Question
Est-il possible de créer un modèle de liaison pour un type générique? Par exemple, si j'ai un type
public class MyType<T>
Est-il possible de créer un modèle de liaison personnalisé qui fonctionne pour tout type de MyType?
Merci, Nathan
La solution
Créer un ModelBinder, passer outre bindModel, vérifier le type et faites ce que vous devez faire
public class MyModelBinder
: DefaultModelBinder {
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext) {
if (HasGenericTypeBase(bindingContext.ModelType, typeof(MyType<>)) {
// do your thing
}
return base.BindModel(controllerContext, bindingContext);
}
}
Définissez votre modèle de liaison à la valeur par défaut dans le global.asax
protected void Application_Start() {
// Model Binder for My Type
ModelBinders.Binders.DefaultBinder = new MyModelBinder();
}
vérifie correspondant à la base générique
private bool HasGenericTypeBase(Type type, Type genericType)
{
while (type != typeof(object))
{
if (type.IsGenericType && type.GetGenericTypeDefinition() == genericType) return true;
type = type.BaseType;
}
return false;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow