TransWikia.com

Validação para DropDownList em ASP.NET MVC

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?

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP