1
resposta

Cadastro MVC + EF

Senhores, boa noite !

Estou desenvolvendo um projetinho a fim de estudo, simples.

Em resumo, realizei um form onde preciso cadastrar um Produto e nele preciso colocar a informação da Categoria, buscando do banco.

Porém, quando envio estas informações para minha Controler e DAO , realizei o Debbug para acompanhar quais informações estavam chegando, onde vi que no momento do cadastro do produto na propriedade Categoria o atributo ID está sendo passado, porém as outras informações não, seguindo de um exception quando continuo com a execução impossibilitando que eu faça o Insert na minha tabela:

//Form
<label for="Categoria">Categoria do Produto: </label>
        <select id="Categoria" name="produto.Categoria.ID">
            @foreach ( var c in ViewBag.Categoria)
            {
                <option id="@c.ID">@c.CategoriaNome</option>
            }
        </select><br />

//Entidade Produto
public class Produto
    {
        public int ID { get; set; }

        public string ProdutoNome { get; set; }

        public float Preco { get; set; }

        public string EAN { get; set; }

        public string Descricao { get; set; }

        public Categoria Categoria { get; set; }

    }
}
//Entidade Categoria
public class Categoria
    {
        public int ID { get; set; }

        public string CategoriaNome { get; set; }

        public IList<Produto> Produto { get; set; }
    }
}

Desde já, muito obrigado pela força !

1 resposta

Olá, Vinícius!

Não temos o seu código todo, mas o ideal é usar model binding, para que o modelo todo seja enviado no submit do form. Veja alguns trechos de código para cada um dos componentes:

No Modelo:

public class Produto
{
    public int ID { get; set; }
    public string ProdutoNome { get; set; }
    public float Preco { get; set; }
    public string EAN { get; set; }
    public string Descricao { get; set; }
    public Categoria Categoria { get; set; }
}

Na página Razor:

@using(Html.BeginForm())
{
    @Html.HiddenFor(m => m.ID);
    @Html.EditorFor(m => m.ProdutoNome)
    @Html.EditorFor(m => m.Preco)
    @Html.EditorFor(m => m.EAN)
    @Html.EditorFor(m => m.Descricao)    
    @Html.DropDownList(m => m.Categoria, ViewBag.Categoria, 
                "Selecione a Categoria")        
}

E no controller:

[HttpPost]
public ActionResult Index(Produto model)
{
    // coloque aqui o código para tratar o recebimendo do modelo (Produto) após o submit do formulário.
}

Veja se esse código te ajuda!

Boa sorte e bons estudos!