Model Binding com listas em ASP .NET MVC

Fala galera!

Tive alguns problemas em criar formulários que possuem sub-itens e pesquisando pela internet sobre como resolver o problema percebi que muitos tiveram o mesmo problema;

Não sei dizer se esta é a melhor maneira de fazer (best approach), mas funciona.

De um modo bem geral, precisamos entender um pouco como funciona os formulários em HTML. Para transitar sub-itens precisar enviar algo parecido com um array:

itens[x].propriedade = valor

Onde itens é o nome da lista e x é um identificador, pode ser um inteiro, uma chave, qualquer coisa.

Tendo essa definição em mente, poderíamos criar um for ou foreach e “printar” os sub-itens dentro do nosso FORM.


@for(int i = 0; i < 10; i++) {
<input type="text" name="Itens[@i].Nome" />
}

Mas ai teríamos que ficar gerenciando esses ids e isso não seria muito produtivo.

Existe uma biblioteca chamada BeginCollectionItem que faz esse gerenciamento, baseado em GUID, a implementação é bem simples, basicamente você faz algo desse tipo:


@using(Html.BeginCollectionItem("Itens"))
{
@Html.EditorFor(x => x.Nome)
}

Bem simples né?

Eu fiz um exemplo utilizando um cadastro de produtos com uma lista de comentários, utilizando o BeginCollectionItem e ajax.

Código fonte do exemplo:
https://github.com/leonardohof/PoC-NestedListsModelBinding

Link para a biblioteca:
https://www.nuget.org/packages/BeginCollectionItem/

Até a próxima =)


Curta também minha página no Facebook para ficar por dentro das novidades:
https://www.facebook.com/devleonardohofling