Adicionando um controlador

por Rick Anderson

Note

Uma versão atualizada deste tutorial está disponível aqui que usa o ASP.NET MVC 5 e o Visual Studio 2013. É mais seguro, muito mais simples de seguir e demonstra mais recursos.

O MVC significa Model-View-Controller. O MVC é um padrão para o desenvolvimento de aplicativos que são bem arquitetados, testados e fáceis de manter. Os aplicativos baseados em MVC contêm:

  • M Odels: classes que representam os dados do aplicativo e que usam a lógica de validação para impor regras de negócio para esses dados.
  • V iews: Arquivos de modelo que seu aplicativo usa para gerar DINAMICAMENTE respostas HTML.
  • C Ontrollers: classes que manipulam solicitações de navegador recebidas, recuperam dados de modelo e, em seguida, especificam modelos de exibição que retornam uma resposta ao navegador.

Abordaremos todos esses conceitos nesta série de tutoriais e mostraremos como usá-los para criar um aplicativo.

Vamos começar criando uma classe de controlador. Em Gerenciador de soluções, clique com o botão direito do mouse na pasta controladores e selecione Adicionar controlador.

Nomeie seu novo controlador "HelloWorldController". Deixe o modelo padrão como controlador MVC vazio e clique em Adicionar.

Adicionar controlador

Observe no Gerenciador de soluções que um novo arquivo foi criado chamado HelloWorldController.cs. O arquivo está aberto no IDE.

Substitua o conteúdo do arquivo pelo código a seguir.

using System.Web;
using System.Web.Mvc; 
 
namespace MvcMovie.Controllers 
{ 
    public class HelloWorldController : Controller 
    { 
        // 
        // GET: /HelloWorld/ 
 
        public string Index() 
        { 
            return "This is my <b>default</b> action..."; 
        } 
 
        // 
        // GET: /HelloWorld/Welcome/ 
 
        public string Welcome() 
        { 
            return "This is the Welcome action method..."; 
        } 
    } 
}

Os métodos do controlador retornarão uma cadeia de caracteres de HTML como um exemplo. O controlador é nomeado HelloWorldController e o primeiro método acima é nomeado Index. Vamos chamá-lo de um navegador. Execute o aplicativo (pressione F5 ou CTRL + F5). No navegador, acrescente "HelloWorld" ao caminho na barra de endereços. (Por exemplo, na ilustração abaixo, é http://localhost:1234/HelloWorld.) A página no navegador se parecerá com a captura de tela a seguir. No método acima, o código retornou uma cadeia de caracteres diretamente. Você disse ao sistema para retornar apenas um HTML e ele fazia!

O ASP.NET MVC invoca classes de controlador diferentes (e métodos de ação diferentes dentro delas) dependendo da URL de entrada. A lógica de roteamento de URL padrão usada pelo ASP.NET MVC usa um formato como este para determinar qual código invocar:

/[Controller]/[ActionName]/[Parameters]

A primeira parte da URL determina a classe do controlador a ser executada. Portanto, /HelloWorld é mapeado para a classe HelloWorldController. A segunda parte da URL determina o método de ação na classe a ser executada. Portanto, /HelloWorld/index faria com que o método de Index da classe HelloWorldController fosse executado. Observe que precisamos apenas navegar até /HelloWorld e o método Index foi usado por padrão. Isso ocorre porque um método chamado Index é o método padrão que será chamado em um controlador se um não for especificado explicitamente.

Navegue até http://localhost:xxxx/HelloWorld/Welcome. O método Welcome é executado e retorna a cadeia de caracteres "este é o método de ação de boas-vindas...". O mapeamento do MVC padrão é /[Controller]/[ActionName]/[Parameters]. Para essa URL, o controlador é HelloWorld e Welcome é o método de ação. Você ainda não usou a parte [Parameters] da URL.

Vamos modificar o exemplo ligeiramente para que você possa passar algumas informações de parâmetro da URL para o controlador (por exemplo, /HelloWorld/Welcome? Name = Scott&numtimes = 4). Altere o método Welcome para incluir dois parâmetros, conforme mostrado abaixo. Observe que o código usa o C# recurso opcional-Parameter para indicar que o parâmetro numTimes deve usar como padrão 1 se nenhum valor for passado para esse parâmetro.

public string Welcome(string name, int numTimes = 1) {
     return HttpUtility.HtmlEncode("Hello " + name + ", NumTimes is: " + numTimes);
}

Execute o aplicativo e navegue até a URL de exemplo (http://localhost:xxxx/HelloWorld/Welcome?name=Scott&numtimes=4). Você pode tentar valores diferentes para name e numtimes na URL. O sistema de associação de modelo MVC do ASP.net mapeia automaticamente os parâmetros nomeados da cadeia de caracteres de consulta na barra de endereços para parâmetros em seu método.

Em ambos os exemplos, o controlador está fazendo o "VC" parte do MVC, ou seja, o modo de exibição e o controlador funcionam. O controlador retorna o HTML diretamente. Normalmente, você não quer que os controladores retornem HTML diretamente, já que isso se torna muito complicado para o código. Em vez disso, normalmente usaremos um arquivo de modelo de exibição separado para ajudar a gerar a resposta HTML. Vejamos em seguida como podemos fazer isso.