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

Asp.Net MVC - Problemas com a gravação do registro

Estou fazendo o Asp.Net e logo nas primeiras aulas já estou tendo problemas de conexão com a gravação do registro no banco de dados. o servidor.

Apesar de já trabalhar com desenvolvimento a um bom tempo (IDE) eu estou realmente começando na web e não tenho a menor idéia do essa mensagem está dizendo, também não encontro uma forma de conversação com um dos instrutores então recorro a ajuda de vocês.

A mensagem que aparece no meu browser quando clico no botão para gravar os dados é:

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: /Produto/Adicona

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

4 respostas

Olá Arildo

Veja que a sua mensagem de erro está dizendo que a URL que o seu navegador tentou acessar foi a /Produto/Adicona, que não foi encontrada no servidor.

Para resolver o problema, primeiro abra a classe ProdutoController e dentro dela certifique-se que existe um método com a seguinte assinatura:

public ActionResult Adiciona(Produto produto)
{
    // Implementação do método
}

Para conseguirmos acessar esse método, precisamos acessar uma url da forma <controller>/<método>, /Produto/Adiciona no caso.

Depois de fazer essa verificação, abra o código do formulário de cadastro de novo produto, o arquivo Views/Produto/Form.cshtml. Dentro desse arquivo, procure a declaração da tag form e dentro dessa tag, procure o atributo action.

O action indica para o navegador qual é o endereço para onde os dados do formulário devem ser enviados. Para o exemplo do curso, action deve ser igual a /Produto/Adiciona:

<form action="/Produto/Adiciona" method="post">
    <!-- declaração dos campos do formulário -->
</form>

Se essas dicas não resolverem o seu problema, poste o código do ProdutoController e da view da action Form para que possamos ajudá-lo melhor. Não se esqueça de colocar o código entre ```.

Bom dia Victor, obrigado pelo retorno!

Fiz a verificação e notei que, daquilo que me passou, somente o método post é que não constava, então fiz a inserção dele no código porém o problema persiste.

Imagino que deva mesmo ser algo simples que não estou vendo por aqui e por isso peço-lhe desculpas por tanta interação, mas não conseguirei ir para os próximos passos da trilha se não resolver essa questão.

Segue abaixo os códigos solicitados para sua análise.

ProdutoController ''' using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; using CaelumEstoque.DAO; //aqui nós instanciamos a classe do DAO que irá importar os dados do banco using CaelumEstoque.Models;

namespace CaelumEstoque.Controllers { public class ProdutoController : Controller { // GET: Produto public ActionResult Index() { ProdutosDAO dao = new ProdutosDAO(); IList produtos = dao.Lista(); //Esse método irá devolver uma IList de models por produto, por isso precisaremos tambem instancia-la no inicio "using CaelumEstoque.Models" ViewBag.Produtos = produtos; //após receber os dados da IList clicar com o botão direito sobre o Index() para criar uma view return View(); }

public ActionResult form() { return View(); }

// Essa é uma forma "rústica" de executar um formulário, porém o método que está logo abaixo essas linhas é muito mais inteligente e eficiente // //public ActionResult Adiciona(String nome, float preco, String descricao, int quantidade, int categoriaId) //{ //Produto produto = new Produto() //{ //Nome = nome, //Preco = preco, //Descricao = descricao, //Quantidade = quantidade, //CategoriaId = categoriaId //};

//ProdutosDAO dao = new ProdutosDAO(); //dao.Adiciona(produto);

//return View(); //}

public ActionResult Adiciona(Produto produto) {

ProdutosDAO dao = new ProdutosDAO(); dao.Adiciona(produto);

return View(); } } } '''

View '''

@{ Layout = null; }

<!DOCTYPE html>

Nome:

Preço:

Quantidade:

Descrição:

Categoria:

'''

Fico então no aguardo e desde já agradeço o empenho.

Obrigado!

Desculpe, fiz a inserção usando aspas e não backticks e por isso ficou confuso.

Segue abaixo da forma correta.

ProdutoController

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CaelumEstoque.DAO; //aqui nós instanciamos a classe do DAO que irá importar os dados do banco
using CaelumEstoque.Models;

namespace CaelumEstoque.Controllers
{
    public class ProdutoController : Controller
    {
        // GET: Produto
        public ActionResult Index()
        {
            ProdutosDAO dao = new ProdutosDAO();
            IList<Produto> produtos = dao.Lista(); //Esse método irá devolver uma IList de models por produto, por isso precisaremos tambem instancia-la no inicio "using CaelumEstoque.Models"
            ViewBag.Produtos = produtos;  //após receber os dados da IList clicar com o botão direito sobre o Index() para criar uma view
            return View();
        }

        public ActionResult form()
        {
            return View();
        }

        // Essa é uma forma "rústica" de executar um formulário, porém o método que está logo abaixo essas linhas é muito mais inteligente e eficiente
        //
        //public ActionResult Adiciona(String nome, float preco, String descricao, int quantidade, int categoriaId)
        //{
        //Produto produto = new Produto()
        //{
             //Nome = nome,
             //Preco = preco,
             //Descricao = descricao,
             //Quantidade = quantidade,
             //CategoriaId = categoriaId
        //};

        //ProdutosDAO dao = new ProdutosDAO();
        //dao.Adiciona(produto);

        //return View();
        //}

        public ActionResult Adiciona(Produto produto)
        {

            ProdutosDAO dao = new ProdutosDAO();
            dao.Adiciona(produto);

            return View();
        }
    }
}

View


@{
    Layout = null;
}

<!DOCTYPE html>

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

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

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

            <label for="descricao">Descrição:</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>
solução!

Problema resolvido!!

Eu havia escrito errado na view (faltava um "i" no adiciona).

Realmente não me atentei a isso antes.

Obrigado pelo apoio.