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

War es hilfreich?

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
scroll top