1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Pegar item selecionado no Dropdownlist

Olá boa tarde, gostaria de saber como faço para pegar o item selecionado no Dropdownlist e enviar ao controller junto com o objeto, estou inserindo os dados no dropdownlist desta forma:

Controller

       [HttpGet]
        public ActionResult Cadastra()
        {
            using(Context db = new Context())
            {
                ViewBag.ListaFonercedores = new SelectList(db.Fornecedores.ToList(), "cd_fornecedor", "nm_fornecedor");
                return View();
            }


        }

        [HttpPost]
        public ActionResult Cadastra(Produto _produto)
        {

            using (Context db = new Context())
            {

                db.Produtos.Add(_produto);
                db.SaveChanges();
            }
            return RedirectToAction("Lista");
        }

No controller acima tenho o método tipo GET que preenche o DropDownList e o metodo tipo POST que faz o insert e redireciona, coloquei um breakpoint no using do método POST e o valor do cd_fornecedor é NULL.

Na View está assim:


@using (@Html.BeginForm())
{
    @Html.EditorFor(m => m.cd_produto)
    <div>@Html.LabelFor(m => m.nm_produto)</div>
    @Html.EditorFor(m => m.nm_produto)
    <div>@Html.LabelFor(m => m.ds_produto)</div>
    @Html.EditorFor(m => m.ds_produto)
    <div>@Html.LabelFor(m => m.vl_produto)</div>
    @Html.EditorFor(m => m.vl_produto)

    <div>@Html.LabelFor(m=>m.cd_fornecedor)</div>
   @Html.DropDownList("ListaFonercedores", string.Empty)

    <div><input type="submit" value="Cadastra" /></div>
}

Só pra ajudar ListaFonercedores é a ViewBag que eu pego os dados

Modelo Classe Produto

namespace CamadaDeControle.Models
{
    [Table("Produto")]
    public class Produto
    {
        [Key]
        [HiddenInput(DisplayValue = false)]       
        public int cd_produto { get; set; }

        [Display(Name = "Nome")]
        public string nm_produto { get; set; }

        [DataType(DataType.MultilineText)]
        [Display(Name = "Descrição")]
        [MaxLength(100)]
        public string ds_produto { get; set; }

        [Display(Name="Preço")]
        public double vl_produto { get; set; }



        [Display(Name = "Fornecedor")]
        [Column("cd_fornecedor")]
        public int cd_fornecedor { get; set; }

        [ForeignKey("cd_fornecedor")]
        public Fornecedor Fornecedor { get; set; }
    }
}

Classe Fornecedor

namespace CamadaDeControle.Models
{


    [Table("Fornecedor")]
    public class Fornecedor
    {

        [Key]   
[HiddenInput(DisplayValue=false)]
        public int cd_fornecedor {get; set; }
        [Display(Name="Nome do Fornecedor")]
        public string nm_fornecedor { get; set; }
        public IList<Produto> Produtos { get; set; }

    }
}

Metodo Lista

   public ActionResult Lista()
        {
            using (K19Context db = new K19Context())
            {

                var query = db.Produtos.Include(f => f.Fornecedor).ToList();
                List<Produto> lista = new List<Produto>();

                foreach (var item in query)
                {

                    Produto p = new Produto();
                    p.nm_produto = item.nm_produto;
                    p.ds_produto = item.ds_produto;
                    p.vl_produto = item.vl_produto;
                    p.Fornecedor = item.Fornecedor;
                    lista.Add(p);

                }
                return View(lista);
            }

        }
  • Alguém por favor !!!

    Marlyson   20 de mar de 2015
  • faz um teste assim ao invés de colocar string.empty passa ListaFornecedores como segundo parâmetro dentro do @html.DropDownList

    Sergio Durval   21 de mar de 2015
  • Esse segundo parâmetro é apenas para que o valor pré selecionado seja vazio

    Marlyson   22 de mar de 2015
  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags asp.net-mvc c# .net entity-framework ou faça a sua própria pergunta.