Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Obter valor do objeto selecionado no DropDownList

Estou criando uma aplicação baseado nos conhecimentos adquiridos nas aulas, porem tentei realizar uma modificação e não estou obtendo sucesso.

Durante a aula 3, foi ensinado como obter o CategoriaId através do valor selecionado do DropDownList. No entanto a model Produto(original do curso), possui uma propriedade CategoriaId do tipo int.

 public class Produto
    {
        public int Id { get; set; }

        [StringLength(20)]
        public String Nome { get; set; }

        public float Preco { get; set; }

        public int? CategoriaId { get; set; }

Substitui a propriedade CategoriaId do tipo int para Categoria do tipo CategoriaDoProduto.

 public class Produto
    {
        public int Id { get; set; }

        [StringLength(20)]
        public String Nome { get; set; }

        public float Preco { get; set; }
        public CategoriaDoProduto Categoria { get; set; }

Porem não consigo obter o valor dessa propriedade na Action.

Fiz uma mudança no codigo da View.Form, porém o resultado vem Null

<select id="categoria" name="produto.Categoria">
    @foreach(var categoria in ViewBag.Categorias) 
    {
      <option value="@categoria">@categoria.Nome</option>
    }
  </select>

Inclui esse alert na Controller somente para facilitar no entendimento do que pretendo fazer.

public ActionResult Adiciona(Produto produto)
{
    Alert(produto.Categoria.Nome);
//Quero que apresente o nome da categoria selecionada
    return View();
}

Observação: Não estou usando EntityFramework para persistir os dados, estou setando os valores manualmente apenas para efeito didático

1 resposta
solução!

Diego, quem cria a navegação de Produto para Categoria automaticamente é o Entity Framework sobrescrevendo o modelo Produto e usando o padrão de nome CategoriaId, que não poderia ser removido se fosse entity framework. Como vc disse que não está usando entity, estiver usando ADO, vc teria que criar um método de acesso manualmente quando chamar sua propriedade Categoria e pesquisar pelo nome.

Acho que foi isso q entendi. Se não é essa a dúvida desculpe.

Caso pude te ajudar, marque a resposta como solucionada. Obrigado.