🔥 Apps, books, system as a service, podcast and more



Html.DropDownList

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.

Sign up to our newsletter

Receive our latest updates about programming languages, software, database, books, ebooks, classes, jobs and more.

Top