1) Для начала следует понять, зачем вообще нужен биндер.
Когда пользователь сабмитит форму, браузер формирует POST запрос.
Этот запрос можно посмотреть например через
Fidler или
Firebug (Firefox). Рекомендую поставить — очень полезный тул для разработки ModelBinder'ов и не толька
Так вот, если посмотреть, что же там браузер шлет, то можно увидеть строку из имен/значений полей.
Т.е. если во View это было HiddenFor(model=>model.Id), TextBoxFor(model=>model.Description), то в POST это будет id=1&Description=ТекстПользователя&.
И стандартный биндинг MVC легко справляется с такими простыми вещами.
А вот для списков не все сложнее. Почитайте
вот тут пример.
Там же, кстати, написано, как обойтись без биндера (сам я это не проверял). Основная идея в том, что поля должны отличаться по именам, т.е.
в POST это должно быть что-то вроде id1=1&Description1=ТекстПользователя&id2=1&Description2=ТекстПользователя& и т.д. Тогда значения
легко достанутся в биндере.
Просто на то чтобы написать полноценный пример биндера у меня сейчас нет времени.
2) Сами биндеры регистрируются в файле global.asax (метод Application_Start )
ModelBinders.Binders[typeof( FundModelBinder )] = new FundModelBinder();