ASP .NET Core - Criando uma aplicação ASP .NET Core MVC com o VS 2017 - III

 Neste artigo eu vou mostrar como criar uma aplicação ASP .NET Core MVC usando o VS 2017.

Continuando a segunda parte do artigo vou mostrar como podemos passar dados do controlador para as views.

NotaSe você não conheçe o Razor e sua sintaxe sugiro que leia este artigo : ASP .NET - Apresentando a sintaxe Razor - Macoratti

Passando dados do Controller para a View

Um Controller ou controlador é responsável por controlar a maneira como um usuário interage com uma aplicação MVC e possui o fluxo de controle lógico para uma aplicação ASP .NET MVC.

É o controlador que determina que resposta será enviada de volta ao usuário quando ele faz uma requisição via navegador. Um controlador é uma classe que contém métodos de ação ou Action.

As Actions (ações) do controlador são chamadas em resposta a uma solicitação de URL de entrada. Uma classe de controlador é onde você escreve o código que manipula as solicitações do navegador de entrada. O controlador recupera dados de uma fonte de dados e decide que tipo de resposta enviar para o navegador. Os templates views (modelos de visualização) podem ser usados ​​a partir de um controlador para gerar e formatar uma resposta HTML para o navegador.

Os controladores são responsáveis ​​por fornecer os dados necessários para que uma view produza uma resposta.

Recomenda-se que as views não devem executar lógica de negócios ou interagir diretamente com um banco de dados. Em vez disso, uma view deve funcionar apenas com os dados fornecidos a ela pelo controlador. Manter esta "separação de responsabilidades" ajuda a manter o seu código limpo, testável e sustentável.

As ações do controlador são chamadas em resposta a uma solicitação de URL de entrada. Uma classe de controlador é onde você escreve o código que manipula as solicitações do navegador de entrada. O controlador recupera dados de uma fonte de dados e decide que tipo de resposta enviar para o navegador. Os templates views (modelos de visualização) podem ser usados ​​a partir de um controlador para gerar e formatar uma resposta HTML para o navegador.

Os controladores são responsáveis ​​por fornecer os dados necessários para que uma view produza uma resposta. Uma prática recomendada: As views não devem executar lógica de negócios ou interagir diretamente com um banco de dados. Em vez disso, uma view deve funcionar apenas com os dados fornecidos a ela pelo controlador. Manter esta "separação de responsabilidades" ajuda a manter o seu código limpo, testável e sustentável.

Atualmente, o método BemVindo na classe OlaMundoController toma um nome e um parâmetro ID e, em seguida, exibe diretamente os valores de saída para o navegador.

Em vez do controlador processar essa resposta como uma seqüência de caracteres, vamos alterar o controlador para usar uma view para fazer isso como recomendado. A view irá gerar uma resposta dinâmica, o que significa que você precisa passar os bits de dados apropriados do controlador para a view, a fim de gerar a resposta.

Você pode fazer isso fazendo com que o controlador coloque os dados dinâmicos (parâmetros) que a view precisa em um dicionário ViewData que a view pode acessar.

Abra o arquivo OlaMundoController.cs e altere o método BemVindo para adicionar um valor Mensagem e NumVezes ao dicionário ViewData.

O dicionário ViewData é um objeto dinâmico, o que significa que você pode colocar o que quiser dentro dele; O objeto ViewData não tem propriedades definidas até que você coloque algo dentro dele. O sistema de vinculação do modelo MVC mapeia automaticamente os parâmetros nomeados (nome e numVezes) da string de consulta na barra de endereços para os parâmetros no seu método.

Nota: Para saber mais sobre ViewData leia o artigo:  ASP .NET MVC - ViewBag, ViewData e TempData - Macoratti

Abaixo temos o código do arquivo OlaMundoController.cs alterado:

using Microsoft.AspNetCore.Mvc;
namespace MvcFilme.Controllers
{
    public class OlaMundoController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
        public IActionResult BemVindo(string nome, int NumVezes)
        {
            ViewData["Mensagem"] = "Olá " + nome;
            ViewData["NumVezes"] = NumVezes;

            return View();
        }
    }
}

Agora nosso controlador possui objetos dictionary ViewData que contém dados que serão passados para a view. Qual view ?

Bem, ainda não criamos a view. Mas sabemos que temos que criar uma view na pasta Views/OlaMundo com o nome BemVindo.cshtml porque esta é a convenção padrão que o Framework MVC adota :

De forma geral, se você deseja retornar uma view para uma ação do controlador, então você vai precisar criar uma subpasta na pasta Views com o mesmo nome do controlador, e, no interior da subpasta você deverá criar uma View com o mesmo nome da ação do controlador.

Clique com o botão direito do mouse sobre a pasta Views/OlaMundo e a seguir em Add-> New Item;

Selecione o template MVC View Page, informe o nome BemVindo.cshtml e clique no botão Add;

A seguir inclua o código abaixo neste arquivo:

@{
    ViewData["Title"] = "Bem-Vindo";
}
<h2>Macoratti .net - Seja Bem-Vindo</h2>
<ul>
    @for (int i = 0; i < (int)ViewData["NumVezes"]; i++)
    {
        <li>@ViewData["Mensagem"]</li>
    }
</ul>

Neste código estamos utilizando os dados, que serão passados via URL via objeto ViewData, do controlador para a View e usando um laço for iremos exibir a mensagem no número de vezes informado.

Salve as alterações e altere a URL do navegador para : http://localhost:XXXXX/Olamundo/BemVindo?nome=Macoratti&numvezes=5 e veja o resultado :

Os dados são extraídos da URL e passados para o controlador usando o MVC model binder. O controlador então empacota os dados em um dicionário ViewData e passa esse objeto para a view. A view então processa os dados como HTML para o navegador. Foi o que aconteceu no exemplo acima: Exibimos a mensagem 'Olá Macoratti' cinco vezes.

Nota: O Model Binding funciona assim : Quando MVC recebe uma solicitação HTTP, ele roteia a requisição para um método de Action específico de um controlador. Ele determina qual método Action deve ser executado com base no que está nos dados da rota, e então vincula valores da solicitação HTTP aos parâmetros desse método Action.

Considere a seguinte URL:    Http://macoratti.com/filmes/edit/2

Como o modelo de rota esta definido assim, {controller = Home}/{action = Index}/{id?},  a url Filmes/edit/2 roteia para o controlador de Filmes e seu método Action Edit. Ele também aceita um parâmetro opcional chamado id.

No exemplo acima, usamos o dicionário ViewData para passar dados do controlador para uma view. Mais adiante usaremos uma view model ou modelo de visão para passar dados de um controlador para uma view. A abordagem em usar a view model para passar dados é, em muitos casos, mais indicada em relação à abordagem do dicionário ViewData.

Na próxima parte do artigo vamos tratar dos dados da aplicação criando um banco de dados chamado Filmes.

(Disse Jesus) Na verdade, na verdade vos digo que quem ouve a minha palavra, e crê naquele que me enviou, tem a vida eterna, e não entrará em condenação, mas passou da morte para a vida.
João 5:24

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti