Stack Overflow em Português Asked by Leo on November 26, 2020
Estou realizando um projeto, nele estava fazendo um DropDownList que pega os dados do banco e mostra ao usuário. Até certo ponto deu tudo certo, mas falta uma parte de tratamento, ou uma validação, pois toda vez que alguma caixa de texto está em branco, ele para a aplicação e da este erro
System.InvalidOperationException: 'O item ViewData que possui a chave 'idCategoria' é do tipo 'System.String', mas precisa ser do tipo 'IEnumerable<SelectListItem>'.'
Esse erro sempre ocorre quando quando eu passo uma SelectList
usando uma ViewBag
Tenho os seguintes códigos:
Model Produto
public class Produto
{
private ConexaoDB db;
[Display(Name = "Código")]
[StringLength(5, ErrorMessage = "Máximo 5 caracteres")]
[Key]
public string idProduto { get; set; }
[Display(Name = "Nome")]
[Required(ErrorMessage = "O campo é obrigatório")]
[StringLength(50, ErrorMessage = "Máximo 50 caracteres")]
public string nome { get; set; }
[Display(Name = "Preço Unitário")]
[Required(ErrorMessage = "O campo é obrigatório")]
public decimal precoUnitario { get; set; }
[Display(Name = "Categoria")]
[Required(ErrorMessage = "O campo é obrigatório")]
public string idCategoria { get; set; }
public IEnumerable<SelectListItem> CategoryList { get; set; }
...
public List<Categoria> ListarCategoria()
{
var strQuery = "select idCategoria, nome from categoria";
using (db = new ConexaoDB())
{
var retorno = db.RetornaRegistro(strQuery);
return ListaDeCategoria(retorno);
}
}
public List<Categoria> ListaDeCategoria(MySqlDataReader retorno)
{
var categorias = new List<Categoria>();
while (retorno.Read())
{
var TempCategoria = new Categoria()
{
idCategoria = retorno["idCategoria"].ToString(),
nome = retorno["nome"].ToString()
};
categorias.Add(TempCategoria);
}
return categorias;
}
...
}
ProdutoController
public ActionResult Create()
{
var objproduto = new Produto();
var leitor = objproduto.ListarCategoria();
ViewBag.List = new SelectList(leitor, "idCategoria", "nome");
return View();
}
// POST: Produto/Create
[HttpPost]
public ActionResult Create(Produto produto)
{
if (ModelState.IsValid)
{
var objproduto = new Produto();
objproduto.InsertProduto(produto);
return RedirectToAction("Details");
}
return View(produto);
}
View
<div class="form-group">
@Html.LabelFor(model => model.idCategoria, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownListFor(model => model.idCategoria, ViewBag.List as SelectList, "-- Selecione a categoria --", new { @required = "required", @class = "form-control" })
@Html.ValidationMessageFor(model => model.idCategoria, "", new { @class = "text-danger" })
</div>
</div>
Como posso resolver este problema?
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP