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

Rotas

Na aula 7, aprendemos a alterar as rotas das páginas, no entanto, mesmo fazendo o código sugerido, ao acessar a página, surge erro 404.

Código:

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 ProdutoController : Controller
    {
        [Route("produtos", Name="ListaProdutos")]
        public ActionResult Index()
        {
            ProdutosDAO dao = new ProdutosDAO();
            IList<Produto> produtos = dao.Lista();

            return View(produtos);
        }

        public ActionResult Form()
        {
            CategoriasDAO categoriasDao = new CategoriasDAO();
            IList<CategoriaDoProduto> categorias = categoriasDao.Lista();
            ViewBag.Categorias = categorias;
            ViewBag.Produto = new Produto();
            return View();
        }

        [HttpPost]
        public ActionResult Adiciona(Produto produto)
        {
            int idDaInformatica = 1;
            if (produto.CategoriaId.Equals(idDaInformatica) && produto.Preco < 100)
            {
                ModelState.AddModelError("produto.Invalido", "Informática com preço abaixo de 100 reais");
            }
            if (ModelState.IsValid)
            {
                ProdutosDAO dao = new ProdutosDAO();
                dao.Adiciona(produto);

                return RedirectToAction("Index", "Produto");
            }
            else
            {
                ViewBag.Produto = produto;
                CategoriasDAO categoriasDAO = new CategoriasDAO();
                ViewBag.Categorias = categoriasDAO.Lista();
                return View("Form");
            }

        }

        [Route("produtos/{id}", Name="VisualizaProduto")]
        public ActionResult Visualiza(int id)
        {
            ProdutosDAO dao = new ProdutosDAO();
            Produto produto = dao.BuscaPorId(id);
            ViewBag.Produto = produto;

            return View();
        }
    }
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace CaelumEstoque
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.MapMvcAttributeRoutes();
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
            );
        }
    }
}
@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Visualiza</title>
</head>
<body>
    <div> 
        Id: @ViewBag.Produto.Id<br />
        Nome: @ViewBag.Produto.Nome <br />
        Quantidade: @ViewBag.Produto.Quantidade <br />
        Preco: @ViewBag.Produto.Preco <br />
        Descricao: @ViewBag.Produto.Descricao <br />
        Categoria: @ViewBag.Produto.Categoria.Nome <br />

        @Html.RouteLink("Voltar para a lista", "ListaProdutos")
    </div>
</body>
</html>
@model IList<CaelumEstoque.Models.Produto>

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>
    <div> 
        <table>
            <thead>
                <tr>
                    <th>Id</th>
                    <th>Nome</th>
                    <th>Quantidade</th>
                </tr>
            </thead>
            <tbody>
                @foreach(var produto in Model)
                {
                    <tr>
                        <td>@produto.Id</td>
                        <td>
                            @Html.RouteLink(produto.Nome, "VisualizaProduto", new { id = produto.Id })
                        </td>
                        <td>@produto.Quantidade</td>
                    </tr>
                }
            </tbody>
        </table>
    </div>
</body>
</html>
3 respostas
solução!

Olá Inaiana,

qual o endereço completo que você está passando no navegador para tentar acessar a página?

O erro 404 é o famoso not found, ou seja ele não achou a página. 1 - Oque vc deve fazer é colocar um breakpoint no início de cada action (na "{"), para você poder saber se ele consegue chegar na action . Caso ele não chegue na action , significa que a url que vc utilizou não existe(você pode ter escrito errado a url ou pode ter errado na hora de configurar a rota).

Esse caso acima é o mais provável.

2- Se ele conseguir entrar na action (vc vai andando com F10) e na hora de retornar a view ele da o not found, significa que ele não está achando a view . Isso pode ser poque o nome da action está diferenta da view.

Agradeço o auxílio, mas se resolveu assim que reabri o projeto, não alterei nada do código, não sei o que ocorreu. De qualquer forma, obrigada. Abraço.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software