Pessoal,
Como definir um elemento <select> <option></option> </select> do HTML conhecido em ASP.NET como DropDownlist tendo como selecionado o item desejado?
Por exemplo, temos duas entidades relacionadas entre si, Produto e Categoria. Cada produto tem então um relacionamento com categoria.
Vamos então imaginar uma View onde vamos editar um Produto. Precisamos oferecer a opção de trocar também a categoria do produto, para isso precisamos informar quais categoria temos cadastradas e o mais importante para usabilidade, pré-selecionar a categoria (dentre as listadas) o qual o produto se relaciona.
Vamos imaginar um produto (Xbox 360) relacionado com uma categoria (Consoles), ao editar esse produto a DropDownList precisa ter todas as categorias e deve estar selecionada a categoria (Consoles), mesmo que não seja ela a primeira da lista.
Se fosse em ASP.NET no code behind iriamos definir o SelectedIndex de acordo com o Id da categoria, o controle DropDownlist iria salvar o dia.
E em ASP.NET MVC?
Temos um extension method definido nos Html Helpers conhecido como Html.DropDownList
O mesmo tem uma implementação que espera um SelectList (veja mais sobre SelectList em: MSDN Library http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlist.aspx ).
Ficou simples agora, precisamos então criar uma SelectList e retornar para a View a mesma, para que o Helper crie o elemento <select> e possa selecionar a opção desejada.
Mas como?
Esse mesmo helper espera um item presente na ViewData do MVC com um identificador contendo a lista de itens e o qual deles é o selecionado. Então vamos aos exemplos:
No controller você vai selecionar todos os registros existentes de categorias e informar quais são as propriedades que possuem o valor e o texto a ser apresentado no <select> e também qual o item a ser selecionado. E ao mesmo tempo retornar isso para ViewData, nesse caso utilizando o dinâmico ViewBag.
Exemplo:
ViewBag.Categoria = new SelectList(negocioCategoria.Listar(), "CategoriaId", "Nome", entidade.Categoria.CategoriaId);
- O primeiro parâmetro desse construtor recebe um IEnumerable com todos elementos, ou seja, são todas as minhas categorias.
- O segundo parâmetro recebe qual propriedade vai conter o Valor do <select>
- O terceiro recebe qual propriedade vai conter o texto desse valor
- O quarto e último recebe qual código é o selecionado, ou seja, aquele que esta relacionado com o produto no caso. Nesse exemplo o objeto entidade já foi preenchido e já tem o objeto relacionado também preenchido.
Depois disso na View precisamos apenas chamar o nosso Helper e passar para ele o campo dinâmico que criamos na ViewBag, aqui no exemplo ViewBag.Categoria. Exemplo:
@Html.DropDownList("Categoria", string.Empty)
Espero que ajudem os desenvolvedores leitores desse blog.
Aguardo feedback.
[]´s
Lino
Começar logo meu primeiro projeto ASP.NET MVC3 pra testar essas dicas.
Aritlces like this make life so much simpler.
Simples e direto! legal!
Você é o Deus da salvação máxima divina cara! Estou há 2 dias procurando uma solução pra isso… e só o que se encontra sobre MVC são conceitos da estrutura! NADA DE PRÁTICAS DA VIDA REAL!!!!! Valeu!
o que mais tem hoje são exemplos de palestras e gurus falsos heróis. Valeu pelo comentário.
Amigo, muito obrigado, ótimo post.É isso mesmo que precisamos no dia a dia…
Abração
Valew