ASP NET – Rotas – MVC – C#

Publicado: 14 de maio de 2015 em C#

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:

MVC - View de Layout

MVC – View de Layout

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:

MVC - RouteConfig

MVC – RouteConfig

3 – Crie um novo modelo com três propriedades, você pode utilizar o código abaixo:

MVC - Modelo

MVC – Modelo

4 – Crie uma nova visão para exibir os dados do modelo, use o código abaixo:

MVC - Visão

MVC – Visão

5 – Abra o seu controlador e crie um novo método de ação para sua visão:

MVC - Controlador

MVC – Controlador

6 – Compile sua aplicação e clique no novo botão do menu:

MVC - Aplicação - Home

MVC – Aplicação – Home

7 – Ao clicar no botão a rota é executa, capturada e exibida na visão que também exibe os dados do modelo:

MVC - Rota - Visão

MVC – Rota – Visão

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>&copy; @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();
        }
    }
}
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s