SelectList ASP.NET MVC


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

About these ads

6 comentários em “SelectList ASP.NET MVC

  1. 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!

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

WordPress.com Logo

Você está comentando usando sua conta WordPress.com. Sair / Mudar )

Imagem do Twitter

Você está comentando usando sua conta Twitter. Sair / Mudar )

Foto do Facebook

Você está comentando usando sua conta Facebook. Sair / Mudar )

Conectando a %s