Создать 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);
}
}
Установите модель связующего до значения по умолчанию в 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;
}
Поскольку этот вопрос по-прежнему очень высок в результатах Google, я хотел бы упомянуть, что, возможно, лучшим решением, которое вышло с MVC3, является использование [Поставщики привязки модели] (http://bradwilson.typepad.com/ блог/2010/10/сервис определения местоположения pt9-модель-binders.html). Это означает, что вам не нужно заменять связующее по умолчанию, если все, что вы делаете, пытается добавить специальные правила для привязки типа _particular_, что делает привязку пользовательской модели гораздо более масштабируемой. –
Я пытался найти, как установить пользовательское связующее устройство для всех типов в приложении mvc 2. И вот решение! Большое спасибо! – blazkovicz