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>