The Viewdata item that has the key 'Fabricanteid' is of type 'System.Int64' but must be of type 'Ienumerable<Selectlistitem>

Asked

Viewed 149 times

1

I am trying to develop an application in ASP.NET MCV 5. This excerpt is returning this error message.

@Html.DropDownList("FabricanteId", null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.FabricanteId, "", new { @class = "text-danger" })

This is the model:

namespace Projeto01.Models
{
    public class Fabricante
    {
        public long FabricanteId { get; set; }
        public string Nome { get; set; }

        public virtual ICollection<Produto> Produtos { get; set; }
    }
}

This is the editing method:

// GET: Produtos/Edit/5
    public ActionResult Edit(long? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Produto produto = context.Produtos.Find(id);
        if (produto == null)
        {
            return HttpNotFound();
        }
        ViewBag.CategoriaId = new SelectList(context.Categorias.OrderBy(b => b.Nome), "CategoriaId", "Nome", produto.CategoriaId);
        ViewBag.CategoriaId = new SelectList(context.Fabricantes.OrderBy(b => b.Nome), "FabricanteId", "Nome", produto.FabricanteId);
        return View(produto);
    }

// POST: Produtos/Edit/5
    [HttpPost]
    public ActionResult Edit(Produto produto)
    {
        try
        {
            if (ModelState.IsValid)
            {
                context.Entry(produto).State = EntityState.Modified;
                context.SaveChanges();
                return RedirectToAction("Index");
            }
            return View(produto);

        }
        catch
        {
            return View(produto);
        }
    }

    // GET: Produtos/Delete/5
    public ActionResult Delete(int id)
    {
        return View();
    }
  • Can you put in your question to Action Edit as GET?

  • I added the GET.

1 answer

1


Your problem is a typo, here:

    ViewBag.CategoriaId = new SelectList(context.Categorias.OrderBy(b => b.Nome), "CategoriaId", "Nome", produto.CategoriaId);
    ViewBag.CategoriaId = new SelectList(context.Fabricantes.OrderBy(b => b.Nome), "FabricanteId", "Nome", produto.FabricanteId)

Should be:

    ViewBag.CategoriaId = new SelectList(context.Categorias.OrderBy(b => b.Nome), "CategoriaId", "Nome", produto.CategoriaId);
    ViewBag.FabricanteId = new SelectList(context.Fabricantes.OrderBy(b => b.Nome), "FabricanteId", "Nome", produto.FabricanteId)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.