Inquiridor
Valor de DropDownList

Pergunta
-
Boa noite.
Tenho as seguintes classes:
public class Marca { public int Id { get; set; } public string Nome { get; set; } } public class Produto { public int Id { get; set; } public string Nome { get; set; } public Marca Marca { get; set; } }
A propriedade 'Marca' da classe Produto está sendo renderizada como um DropDown ..
Minha dúvida é como montar um obj Produto para gravação tendo a propriedade Marca preenchida.
Por enquanto estou renderizando todas as marcas em um DropDown com name="IdMarca":
@Html.DropDownList("IdMarca",(SelectList)ViewBag.Marcas)
e na action pegando o valor assim:
[HttpPost] public ActionResult Create(Produto produto,FormCollection form) { if (ModelState.IsValid) { produto.Marca = db.Marca.Find(int.Parse(form["IdMarca"])); db.Produto.Add(produto); db.SaveChanges(); return RedirectToAction("Index"); } return View(produto); }
http://www.linkedin.com/pub/murilo-kunze/44/191/455
Todas as Respostas
-
Sobre já carregar a Marca no produto troque "IdMarca" por "Marca.Id", com isso não é necessário o parâmetro FormCollection
Ele já cria o objeto Marca com Id.
@Html.DropDownList("Marca.Id",(SelectList) ViewBag.Marcas)
Sobre
produto.Marca = db.Marca.Find(int.Parse(form["IdMarca"]));
Acho que o EF assim como o NH reconhece o objeto (Marca) com apenas o Id preenchido.
Não esqueça de marcar o post como útil caso tenha te ajudado.
- Editado Marco Souza quinta-feira, 5 de abril de 2012 03:30
-
Blz Marco, fiz isso.. mas debugando na action Create percebi que o parâmetro produto.Marca aparece assim (id=1 e nome=null)..
Fiz assim:
if (ModelState.IsValid) { produto.Marca = db.Marcas.Find(produto.Marca.Id); db.Produtoes.Add(produto); db.SaveChanges(); return RedirectToAction("Index"); }
e assim:
if (ModelState.IsValid) { db.Produtoes.Add(produto); db.SaveChanges(); return RedirectToAction("Index"); }
das duas maneiras a marca não está sendo salva junto com o produto.. a marca sempre vem null.
http://www.linkedin.com/pub/murilo-kunze/44/191/455
-
Descobri o problema de cima.. estava faltando o Include("Marca")..
Agora estou fazendo assim:
@Html.DropDownListFor(model => model.Marca.Id,(SelectList)ViewBag.Marcas)
e na action Create:
[HttpPost] public ActionResult Create(Produto produto) { if (ModelState.IsValid) { produto.Marca = db.Marcas.Find(produto.Marca.Id); db.Produtoes.Add(produto); db.SaveChanges(); return RedirectToAction("Index"); } return View(produto); }
Se eu não fizer o db.Marcas.Find() então não funciona.. é assim mesmo??
http://www.linkedin.com/pub/murilo-kunze/44/191/455