Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Cadastro de produtos

Boa tarde,

no exercício:

Crie uma nova action no ProdutoController que recebe o Produto que foi preenchido pelo usuário, grava o produto no banco de dados e por fim mostra uma nova página para o usuário com a mensagem, Produto adicionado com sucesso.

Eu criei a Action e coloquei a lista de "Categorias" em uma ViewBag, porém ao exibir esta lista em um DropDownList ocorre um erro:

Cannot convert type 'System.Collections.Generic.List' to 'System.Web.Mvc.SelectList'

Controller:

 public ActionResult Form()
        {
            CategoriasDAO categoriaDao = new CategoriasDAO();
            var categorias = categoriaDao.Lista().OrderBy(c => c.Nome).ToList();
            ViewBag.Categorias = categorias;
            return View();
        }

View:

@model CaelumEstoque.Models.Produto
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Form</title>
</head>
<body>
    <div>
        @using (Html.BeginForm("Form", "Produto"))
        {
            <div>
                @Html.LabelFor(p => p.Nome)
                @Html.TextBoxFor(p => p.Nome)
            </div>
            <div>
                @Html.LabelFor(p => p.Preco)
                @Html.TextBoxFor(p => p.Preco)
            </div>
            <div>
                @Html.LabelFor(p => p.Quantidade)
                @Html.TextBoxFor(p => p.Quantidade)
            </div>
            <div>
                @Html.LabelFor(p => p.Descricao)
                @Html.TextBoxFor(p => p.Descricao)
            </div>
            <div>
                @Html.DropDownList("Id",(SelectList)ViewBag.Categorias, "Selecione a categoria")
            </div>
        }
    </div>
</body>
</html>

Neste campo: @Html.DropDownList("Id",(SelectList)ViewBag.Categorias, "Selecione a categoria")

Eu gostaria de pegar a lista armazenada na ViewBag, como eu poderia fazer esta operação sem realizar a converção?

Att,

Naiade Lima

3 respostas

Creio que o erro está na instância da categoria, pois ela é do tipo Lista e você está passando um valor dinâmico:

IList<Categorias> categorias = categoriaDao.Lista().OrderBy(c => c.Nome).ToList();
ViewBag.Categorias = categorias;
solução!

Descobri, o problema era na View, o modo que usei o SelectList, estava com a sintaxe errada.

  @Html.DropDownList("Id", new SelectList(ViewBag.Categorias, "Id","Nome"), "Selecione a categoria")

Obrigada Raniel pela ajuda.

Por nada disponha.