Eliminando a dependência dos índices em coleções no ASP.NET MVC

Como poste inicial do blog vou trazer um assunto relativamente avançado, que a questão do Bind de coleções no ASP.NET MVC. Há duas forma de se recuperar coleções aninhadas da view no controller, a primeira é utilizado um índice sequencial:

Campos na view:



Recuperação no controller:

A segunda forma permite utilizar um índice não-sequencial alfanumérico:


Neste segundo exemplo é necessário incluir um campo do tipo "hidden", para cada campo de entrada de valor, com o value sendo o índice. Apesar dessa segunda opção ser mais versátil é limitada pois o índice ainda precisar ser único.  

Depois de estudar e pesquisar muito vi que era possível criar um bind customizado, então porque não criar um para eliminar os índices e recuperar as coleções?
No bind é possível ter acesso ao form que foi submetido, isso possibilitou ter acesso a todas as propriedades do formulário e seus valores:


Não vou me aprofundar no código do bind, o mesmo está disponível para estudo e melhorias no projeto: https://github.com/rafaelguinho/collectionbinder. Para utilizar copie a classe da pasta Binders para seu projeto e no Global.asax.cs adicione uma linha para cada coleção:

Na sua view as coleções agora podem ter todas o mesmo nome, que deve ser "NomeDaColeção.Atributo" conforme exemplo:

No próximo post eu vou mostrar como "automatizar" o processo de adicionar e remover utilizando um Helper. Até mais!

0 comentários:

Postar um comentário