ASP.NET MVC modello Binder per tipo generico
-
18-09-2019 - |
Domanda
E 'possibile creare un modello di legante per un tipo generico? Per esempio, se ho un tipo
public class MyType<T>
C'è un modo per creare un modello personalizzato legante che funziona per qualsiasi tipo di MyType?
Grazie, Nathan
Soluzione
Crea un modelbinder, ignorare BindModel, verificare il tipo e fare quello che devi fare
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);
}
}
Impostare il legante modello predefinito nella Global.asax
protected void Application_Start() {
// Model Binder for My Type
ModelBinders.Binders.DefaultBinder = new MyModelBinder();
}
controlli per la corrispondenza di base generico
private bool HasGenericTypeBase(Type type, Type genericType)
{
while (type != typeof(object))
{
if (type.IsGenericType && type.GetGenericTypeDefinition() == genericType) return true;
type = type.BaseType;
}
return false;
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow