ASP.NET Связующее для моделей MVC для универсального типа

StackOverflow https://stackoverflow.com/questions/1487005

Вопрос

Возможно ли создать model binder для универсального типа?Например, если у меня есть тип

public class MyType<T>

Есть ли какой-нибудь способ создать пользовательскую модель binder, которая будет работать для любого типа MyType?

Спасибо, Нейтан

Это было полезно?

Решение

Создайте modelbinder, переопределите bindModel, проверьте тип и сделайте то, что вам нужно сделать

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);
    }
}

Установите для вашей модели binder значение по умолчанию в global.asax

protected void Application_Start() {

        // Model Binder for My Type
        ModelBinders.Binders.DefaultBinder = new MyModelBinder();
    }

проверяет соответствие общей базе

    private bool HasGenericTypeBase(Type type, Type genericType)
    {
        while (type != typeof(object))
        {
            if (type.IsGenericType && type.GetGenericTypeDefinition() == genericType) return true;
            type = type.BaseType;
        }

        return false;
    }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top