image

Hoje eu vou falar e mostrar como preencher uma DropDownList usando ASP MVC. Em meu caso, tinha um objeto preenchido mas não estava em formado SelectListItem, só tinha um List() que era possível devido a lista de objeto.

Ferramenta:

  • Visual Studio
  • Ambiente: ASP.NET MVC
  • Serviço Web API

Os dados vieram de um serviço Web API em formato Application/JSon. Os dados pegos precisavam ser trabalhados para colocar dentro do DropDownList. Existe uma classe com apenas Get e Set com os dados necessários para o preenchimento do Drop. Muitos exemplos na Internet mostram apenas a criação com dados fixos e não vindos de uma fonte de dados.

A classe DadosItemViewModel é a classe que se comunica com a View e a Model. Foi criado uma outra public class gerando uma lista da classe view model. Veja o código 1.

public class DadosViewModel
{
    public DadosViewModel()
    {
        Plans = new List<DadosItemViewModel>();
    }
    /// <summary>
    /// planos válidos
    /// </summary>
    public ICollection<DadosItemViewModel> Plans { get; set; }
}
public class DadosItemViewModel
{
    public DadosItemViewModel()
    {
        Services = new List<PlanServicesViewModel>();
    }
    public Guid Id { get; set; }
    public double Value { get; set; }
    public string Name { get; set; }
    public List<PlanServicesViewModel> Services { get; set; }
    }
}

Código 1 - Classe com atribuitos

Essas duas classes criadas serão responsáveis pela deserialização dos dados vindos do serviço. Depois dessa criação, vamos buscar os dados com GetAsync. Veja o código 2 dentro da Controller.

private DadosViewModel buscarDados()
    {
        using (HttpClient client = new HttpClient())
        {
            using (var message = client.GetAsync(string.Format("{0}/GetPlansWithServices/", uri)).Result)
            {
                return dados = Newtonsoft.Json.JsonConvert.DeserializeObject<Models.PlansViewModel>(message.Content.ReadAsStringAsync().Result);
            }
        }
    }

Código 2 - Buscando os dados

Lembro que o serviço JSon já estava pronto, criado em outro momento. Existem muitos artigos meus falando sobre Web API, procure no site www.ecode10.com e faça o passo a passo.

Continuando ainda dentro da Controller, criei uma variável com indicando a View Model e no começo da classe. Código 3.

DadosViewModel dados = new Models.DadosViewModel();

Código 3 - Criando variável na controller

Essa variável na controller serve para ser usada dentro da controller inteira, não importa qual o método.

Agora com os dados prontos, basta buscar, preencher a variável e trabalhar com ela para colocar os dados dentro da DropDownList.

Criei um método chamado preencherDropDownListDados() responsável pelo que escrevi acima. Código 4.

    private void preencherDropDownListDados()
    {
        //busca os dados
        dados = buscarDados();
        
        //seleciona os dados e coloca na ViewBag.
        ViewBag.DropDados = planos.Plans.Select(x => new SelectListItem() { Text = x.Name.ToString() });
    }

Código 4 - Preenche a DropDownList

Note que no código 4 para tornar ele um SelectListItem, precisei fazer um Select com o new SelectListItem passando o Text. Lembro que no nosso caso, não vamos precisar do valor, só do texto mesmo. O texto que vem está informado na propriedade Name.

Basta agora fazer a parte HTML da página CSHTML. Código 5.

@Html.DropDownList("dadosAdquirido", (IEnumerable<SelectListItem>)ViewBag.DropDados, new { @class = "form-control" })

Código 5 - Preenchendo o HTML

O ID da DropDownList é "dadosAdquirido". Colocamos um IEnumerable com SelectListItem como um cast e chamamos a ViewBag.DropDados já preenchida na controller. Adicionei um formato para ela também.

Com isso, os dados serão preenchidos e mostrados na tela para o usuário. Espero que tenha gostado e qualquer dúvida por favor entrar em contato pelo site www.mauriciojunior.org.