ASP.NET MVC Modell Binder für Generic Type
-
18-09-2019 - |
Frage
Ist es möglich, ein Modell Bindemittel für eine generische Art zu schaffen? Zum Beispiel, wenn ich einen Typen habe
public class MyType<T>
Gibt es eine Möglichkeit ein eigenes Modell Bindemittel zu schaffen, die für jede Art von MyType funktioniert?
Danke, Nathan
Lösung
Erstellen
einen Modelbinder, außer Kraft setzen BindModel, überprüfen Sie die Art und das tun, was Sie tun müssen,
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);
}
}
Stellen Sie Ihr Modell Bindemittel auf die Standardeinstellung in der global.asax
protected void Application_Start() {
// Model Binder for My Type
ModelBinders.Binders.DefaultBinder = new MyModelBinder();
}
prüft zur Anpassung generische Basis
private bool HasGenericTypeBase(Type type, Type genericType)
{
while (type != typeof(object))
{
if (type.IsGenericType && type.GetGenericTypeDefinition() == genericType) return true;
type = type.BaseType;
}
return false;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow