2011-12-16 25 views
14

Tengo un sitio MVC3 que tendrá un modelo que no funcionará con el enlace de modelo predeterminado. He estado buscando muestras de código en línea, y parece que podría crear una carpeta de modelo personalizada que implementa IModelBinder o hereda de DefaultModelBinder. ¿Puede alguien explicar los pros/contras de cada enfoque, y posiblemente ejemplo de cuándo se usaría un enfoque en lugar del otro?Cuándo utilizar IModelBinder versus DefaultModelBinder

Gracias de antemano.

+0

Probablemente ya lo haya visto, pero hay varias buenas referencias aquí: http://stackoverflow.com/questions/1550520/best-practices-when-implementing-imodelbinder – Shawn

Respuesta

9

Los dos enfoques son, de hecho, el mismo: DefaultModelbinder implementa IModelBinder, por lo que heredar de él es una manera tan buena como otra de implementar IModelBinder.

Pro para heredar de DefaultModelBinder: puede reutilizar muchos de los comportamientos de DefaultModelBinder y anular solo los que desee. No tiene que implementar desde cero.

Pro para realizar su propia implementación de IModelBinder: solo tiene un método para implementar (IModelBinder.BindModel) y tiene control total sobre lo que está haciendo su implementación.

La forma correcta depende en gran medida de lo que necesita de su carpeta personalizada, pero el comportamiento de DefaultModelBinder suele ser el que necesita (y en la mayoría de los casos, es normal que DefaultModelBinder sea la carpeta que desee).

+0

Por lo tanto, en base a lo que ha dicho, si tengo 3 propiedades que no funcionan con el enlace predeterminado MVC, debería heredar de DefaultModelBinder, permitir que se una a la mayoría de mi modelo, y luego manejar el enlace de mis 3 propiedades únicas? –

+1

Esa es la idea. Sin embargo, no puedo ser más preciso sin más precisiones sobre tu modelo. El DefaultModelBindel hace muchas cosas, por lo que sería una pena no aprovecharlo. – Falanwe

+0

Estoy vinculando una propiedad del tipo Dictionary . Mientras que el predeterminado funciona, no funciona de la manera que lo necesito. Estoy usando ayudantes personalizados para construir la vista desde estas propiedades y el enlace debe funcionar con lo que he hecho en ese lado. –