Solucionado (ver solução)
Solucionado
(ver solução)
6
respostas

Lidando com Formulários e o Cadastro de Produtos

quando clico em cadastrar aparece o seguinte erro;

Erro de Servidor no Aplicativo '/'.

Não é possível encontrar o recurso.

Descrição: HTTP 404. O recurso que você está procurando (ou uma de suas dependências) não pôde ser removido, seu nome foi alterado ou está temporariamente indisponível. Examine o URL e certifique-se de que está digitado corretamente. 

URL solicitada: /Produtos/Produtos/Adiciona

Informações sobre a Versão: Microsoft .NET Framework Versão:4.0.30319; Versão do ASP.NET:4.0.30319.34237
6 respostas

Bom dia Marcos!

Por favor, poste o código do seu formulário de cadastro e do controller (:

Segue...

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CaelumEstoque.DAO;
using CaelumEstoque.Models;

namespace CaelumEstoque.Controllers
{
    public class ProdutosController : Controller
    {
        // GET: Produtos
        public ActionResult Index()
        {
            ProdutosDAO dao = new ProdutosDAO();
            IList<Produto> produtos = dao.Lista();
            ViewBag.Produtos = produtos;
            return View();
        }
        public ActionResult Form()
        {
            return View();
        }
        public ActionResult Adiciona(Produto produto)
        {           
            ProdutosDAO dao = new ProdutosDAO();
            dao.Adiciona(produto);
            return View();
        }
    }
}
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Form</title>
</head>
<body>
    <div> 
        <form action="Produtos/Adiciona">
            <label for="nome">Nome:</label>
            <input id="nome" name="produto.Nome" />

            <label for="preco">Preco:</label>
            <input id="preco" name="produto.Preco" />

            <label for="quantidade">Quantidade:</label>
            <input id="quantidade" name="produto.Quantidade" />

            <label for="descricao">Descricao:</label>
            <input id="descricao" name="produto.Descricao" />

            <label for="categoria">Categoria:</label>
            <input id="categoria" name="produto.CategoriaId" />

            <input type="submit" value="Cadastrar" />
        </form>
    </div>
</body>
</html>

Na view, troque a action do form de "action="Produtos/Adiciona" por "action=Adiciona" e veja se funciona.

Valeu Gabriel deu certo. Poderia me explicar o porque?

Como a sua view Form.cshtml "pertence" ao ProdutosController, quando você passa a action Adiciona ele já procura dentro desse controller. Quando você passsa o Produtos/Adiciona ele vai tentar acessar a url(como está na mensagem de erro que você colou na primeira mensagem) "/Produtos/Produtos/Adiciona" e essa rota não existe na sua aplicação, certo? (:

solução!

Beleza, obrigado Gabriel.