2011-12-16 10 views
14

Ho un sito MVC3 con un modello che non funziona con l'associazione modello predefinita. Ho esaminato gli esempi di codice in linea e sembra che potrei creare un raccoglitore modello personalizzato che implementa IModelBinder o eredita da DefaultModelBinder. Qualcuno può spiegare i pro/contro di ciascun approccio, ed eventualmente un esempio di quando un approccio sarebbe usato piuttosto che l'altro.Quando utilizzare IModelBinder rispetto a DefaultModelBinder

Grazie in anticipo.

+0

Probabilmente l'hai già visto, ma ci sono molti buoni riferimenti qui: http://stackoverflow.com/questions/1550520/best-practices-when-implementing-imodelbinder – Shawn

risposta

9

I due approcci sono in effetti gli stessi: DefaultModelbinder implementa IModelBinder, quindi ereditare da esso è un modo buono come un altro per implementare IModelBinder.

Pro per l'ereditazione da DefaultModelBinder: è possibile riutilizzare molti comportamenti da DefaultModelBinder e ignorare solo quelli desiderati. Non devi implementare da zero.

Pro per realizzare la propria implementazione di IModelBinder: si ha solo un metodo per implementare (IModelBinder.BindModel) e si ha il pieno controllo su ciò che sta facendo l'implementazione.

Il modo corretto dipende in gran parte quello che ti serve dal vostro raccoglitore personalizzato, ma il comportamento del DefaultModelBinder è di solito quello che vi serve (e nella maggior parte dei casi, pianura vecchio DefaultModelBinder è infatti il ​​legante che si desidera).

+0

Quindi, in base a ciò che hai detto, se ho 3 proprietà che l'associazione di default MVC non funziona, dovrei ereditare da DefaultModelBinder, permetterle di legare la maggior parte del mio modello e quindi gestire l'associazione delle mie 3 proprietà uniche? –

+1

Questa è l'idea. Non posso essere più preciso senza ulteriori precisioni sul tuo modello. Il DefaultModelBindel fa un sacco di cose, quindi sarebbe un peccato non approfittarne. – Falanwe

+0

Sono vincolante una proprietà di tipo Dictionary . Mentre il default funziona, non funziona nel modo in cui ne ho bisogno. Sto usando gli helper personalizzati per costruire la vista da queste proprietà e il binding ha bisogno di lavorare con quello che ho fatto da quella parte. –

Problemi correlati