No Design Pattern MVC assim com outros padrões semelhantes trabalham utilizando rotas para executar URLs, mapeando o controlador e sua ação a sua visão. As rotas são muito similares em varias outras linguagens de programação, em ASP.NET MVC as classes que são usadas com o roteamento de URL, permitem que você use URLs que não são mapeadas para um arquivo físico.
O conceito de rota é muito simples, no entanto também proporciona uma manipulação mais complexa e avançada das rotas de sua aplicação. No básico as rotas são compostas de três itens, eles são, o controlador, a visão e um identificador da rota.
Rotas: https://msdn.microsoft.com/en-us/library/system.web.routing.route(v=vs.110).aspx
Usando Rotas – ASP.NET MVC
1 – Usando o Template padrão para um projeto ASP.NET MVC vamos alterar seu arquivo compartilhado de layout para inserir um novo link no menu para nossa visão. Este arquivo se encontra na pasta View/Shared e se chama _layout.cshtml. O altere de acordo com o código abaixo:
2 – Para você ver as configurações de rotas abra o arquivo chamado RouteConfig.cs na pasta App_Start. Você pode ver que a rota é composta de três elementos, o controlador, a ação e um id. Você pode mapear quantas rotas você desejar. Neste primeiro momento não vamos utilizar este arquivo, mas vale a pena conhece-lo:
3 – Crie um novo modelo com três propriedades, você pode utilizar o código abaixo:
4 – Crie uma nova visão para exibir os dados do modelo, use o código abaixo:
5 – Abra o seu controlador e crie um novo método de ação para sua visão:
6 – Compile sua aplicação e clique no novo botão do menu:
7 – Ao clicar no botão a rota é executa, capturada e exibida na visão que também exibe os dados do modelo:
Exemplo:
Neste exemplo criamos um novo botão no menu da visão compartilhada e criamos um novo modelo e uma nova visão, capturamos a rota executada e a exibimos.
C#
_Layout.cshtml
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>@ViewBag.Title - My ASP.NET Application</title> @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") </head> <body> <div class="navbar navbar-inverse navbar-fixed-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> @Html.ActionLink("Application name", "Index", "Home", null, new { @class = "navbar-brand" }) </div> <div class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <li>@Html.ActionLink("Home", "Index", "Home")</li> <li>@Html.ActionLink("Desenvolvimento Aberto", "DevAberto", "Home")</li> <li>@Html.ActionLink("About", "About", "Home")</li> <li>@Html.ActionLink("Contact", "Contact", "Home")</li> </ul> @Html.Partial("_LoginPartial") </div> </div> </div> <div class="container body-content"> @RenderBody() <hr /> <footer> <p>© @DateTime.Now.Year - My ASP.NET Application</p> </footer> </div> @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/bootstrap") @RenderSection("scripts", required: false) </body> </html>
Modelo
DevAbertoModel.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace MeuMVC.Models { public class DevAbertoModel { // Cria propriedades public string Nome { get; set; } public string Apresenta { get; set; } public string Mensagem { get; set; } } }
Visão
@model MeuMVC.Models.DevAbertoModel @{ ViewBag.Title = "Sobre"; } <h1>Rota: @ViewBag.rota</h1> <h2>@Model.Nome</h2> <h3>@Model.Apresenta</h3> <p>@Model.Mensagem</p>
Controlador
using MeuMVC.Models; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace MeuMVC.Controllers { public class HomeController : Controller { public ActionResult Index() { return View(); } public ActionResult About() { // **** IMPORTANTE **** // Caso use este código sem seguir os exemplos anteriores // Igonore os codigos deste método. // Cria instancia do modelo AboutModel modelo = new AboutModel(); // Alimenta dados ao modelo modelo.Site = "Desenvolvimento Aberto"; modelo.Linguagem = "ASP.NET MVC- C#"; modelo.Mensagem = "Rê, Você é a página mais linda que o destino escreveu na minha vida."; // adiciona modelo a visão return View(modelo); } public ActionResult DevAberto() { // Lê rotas var controller = RouteData.Values["controller"]; var action = RouteData.Values["action"]; var id = RouteData.Values["id"]; // Cria propriedade dinamica ViewBag.rota = String.Format("{0}::{1} {2}", controller, action, id); // Cria instancia do modelo DevAbertoModel modelo = new DevAbertoModel(); // Alimenta modelo modelo.Nome = "Desenvolvimento Aberto"; modelo.Apresenta = "ABAP, Java, C#, C++, Python, Ruby e SQL"; modelo.Mensagem = "Rê, Eu sem você é como você sem mim."; // Retorna modelo return View(modelo); } public ActionResult Contact() { ViewBag.Message = "Your contact page."; return View(); } } }