Tutorial ASP.NET MVC 4 - Parte 3 - Forms e Views
Na Parte 2 vimos as Views, são com elas que criamos a interface gráfica com HTML. Além disso, é através das Views que criamos os formulários onde os usuários enviam os dados para aplicação Web.
Antes de criamos nosso formulário, um detalhe importante. Toda solicitação (Request) que fazemos a aplicação web seguem uma forma de envio (Request Methods). Os métodos mais comumente utilizados são GET e POST, basicamente quando acessamos alguma página (solicitamos recursos) digitando a URL dela na barra de endereços, fazemos um Request via GET, quando enviamos um formulário (enviamos recursos) fazemos um Request via POST.
Então quando submetemos um formulário estamos enviando dados para aplicação web processar. Para demonstrarmos esse fluxo, vamos criar novo Controller. Para ver como criar um novo Controller veja a primeira parte desse tutorial aqui.
Crie um Controller Empty com o nome de Cliente, assim que você criar o novo Controller ele terá essa estrutura:
Apague a Action padrão e cria uma Action chamada Cadastrar, seu Controller ficará assim:
Lembra da relação Controller/Pasta, Action/View? Você pode criar uma pasta com o mesmo nome do Controller e uma View com o mesmo nome da Action na mão, ou seguir essa dica aqui:
Agora sim, vamos escrever nosso formulário. Nesse formulário de cadastro do cliente, vamos ter apenas dois campos Nome e CPF. Não vamos nos preocupar com validação nesse momento, apenar obter o valor digitado no formulário no Controller. Nosso formulário deve ficar assim:
Repare nas propriedade que definimos no formulário. A propriedade action indica para onde vamos enviar os dados do formulário e a propriedade method como vamos enviar. Só tem um detalhe, todas Actions de qualquer Controller é por padrão uma Action que atende solicitações (Request) do tipo GET. Para conseguirmos capturar uma solicitação enviada via POST, precisamos criar uma nova Action para isso.
Ah! IMPORTANTE, eu não marquei a propriedade name dos inputs de azul por acaso, depois de modificarmos o Controller eu explico isso. Seu Controller depois alterado ficará assim.
Criamos a Action Cadastrar e veja que ela está configurada (decorada/ anotada) para atender Requests do tipo POST. Além disso ela tem dois parâmetros, que não por acaso tem os mesmos nomes que as propriedades name lá do formulário da View Cadastrar. Quando submetermos o formulário o ASP.NET MVC fará o favor de relacionar os dois pontos (input/parâmetro) justamente por terem o mesmo nome. Vamos fazer o seguinte, coloque um Breakpoint como indicado na imagem abaixo:
Após fazer isso execute sua aplicação, por padrão ela abrirá a Home/Index, então você deve digitar: http://localhost:4537/Cliente/Cadastrar.
Ele não parou no Breakpoint porque ele passou pela Action Cadastrar do GET. Agora preencha os campos do formulário e clique em Enviar.
Quando você submeteu o formulário o Breakpoint foi ativado, pois você fez o um Request via POST, para você ver os valores dos parâmetros coloque o cursor do mouse sobre eles e observe que é o mesmo valor que você digitou no formulário. Se isso não aconteceu reveja a propriedade name dos inputs do formulário e o nome dos parâmetros da Action Cadastrar, eles TEM que ser iguais. Depois que você verificou os valores é só apertar F5 para liberar o Breakpoint. Legal, né? Existem outras formas de se obter os valores do formulário.
Por exemplo, altere a Action Cadastrar como está abaixo, coloque o Breakpoint no "return View();" e execute a aplicação novamente.
Porém vou te dizer uma coisa, nenhuma dessa duas formas é a melhor maneira de se obter dados dos formulários. Pô Achilles, está fazendo eu perder meu tempo aqui? Não, de forma nenhuma. Essa parte do tutorial foi essencial para você entender a relação entre as Actions e os tipos de Request (GET e POST) e a relação dos names dos inputs com os parâmetros da Action.
Então o que vimos até aqui?
Antes de criamos nosso formulário, um detalhe importante. Toda solicitação (Request) que fazemos a aplicação web seguem uma forma de envio (Request Methods). Os métodos mais comumente utilizados são GET e POST, basicamente quando acessamos alguma página (solicitamos recursos) digitando a URL dela na barra de endereços, fazemos um Request via GET, quando enviamos um formulário (enviamos recursos) fazemos um Request via POST.
Então quando submetemos um formulário estamos enviando dados para aplicação web processar. Para demonstrarmos esse fluxo, vamos criar novo Controller. Para ver como criar um novo Controller veja a primeira parte desse tutorial aqui.
Crie um Controller Empty com o nome de Cliente, assim que você criar o novo Controller ele terá essa estrutura:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace TutorialMVC.Controllers { public class ClienteController : Controller { // // GET: /Cliente/ public ActionResult Index() { return View(); } } }
Apague a Action padrão e cria uma Action chamada Cadastrar, seu Controller ficará assim:
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace TutorialMVC.Controllers { public class ClienteController : Controller { public ActionResult Cadastrar() { return View(); } } }
Lembra da relação Controller/Pasta, Action/View? Você pode criar uma pasta com o mesmo nome do Controller e uma View com o mesmo nome da Action na mão, ou seguir essa dica aqui:
- Botão direito no nome da Action, vai abrir esse menu:
- Clique em Add View, esse wizard aqui será aberto. Simplesmente clique em Add.
Agora sim, vamos escrever nosso formulário. Nesse formulário de cadastro do cliente, vamos ter apenas dois campos Nome e CPF. Não vamos nos preocupar com validação nesse momento, apenar obter o valor digitado no formulário no Controller. Nosso formulário deve ficar assim:
@{ ViewBag.Title = "Cadastrar"; } <h2>@ViewBag.Title</h2> <form action="/Cliente/Cadastrar" method="post"> <label>Nome:</label> <input name="Nome" type="text" /> <label>CPF:</label> <input name="CPF" type="text" /> <button>Enviar</button> </form>
Repare nas propriedade que definimos no formulário. A propriedade action indica para onde vamos enviar os dados do formulário e a propriedade method como vamos enviar. Só tem um detalhe, todas Actions de qualquer Controller é por padrão uma Action que atende solicitações (Request) do tipo GET. Para conseguirmos capturar uma solicitação enviada via POST, precisamos criar uma nova Action para isso.
Ah! IMPORTANTE, eu não marquei a propriedade name dos inputs de azul por acaso, depois de modificarmos o Controller eu explico isso. Seu Controller depois alterado ficará assim.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace TutorialMVC.Controllers { public class ClienteController : Controller { public ActionResult Cadastrar() { return View(); } [HttpPost] public ActionResult Cadastrar(String Nome, String CPF) { return View(); } } }
Criamos a Action Cadastrar e veja que ela está configurada (decorada/ anotada) para atender Requests do tipo POST. Além disso ela tem dois parâmetros, que não por acaso tem os mesmos nomes que as propriedades name lá do formulário da View Cadastrar. Quando submetermos o formulário o ASP.NET MVC fará o favor de relacionar os dois pontos (input/parâmetro) justamente por terem o mesmo nome. Vamos fazer o seguinte, coloque um Breakpoint como indicado na imagem abaixo:
Para colocar um Breakpoint, clique na barra cinza. :D |
Tá feio, mas tá valendo. |
Há! |
Por exemplo, altere a Action Cadastrar como está abaixo, coloque o Breakpoint no "return View();" e execute a aplicação novamente.
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace TutorialMVC.Controllers { public class ClienteController : Controller { public ActionResult Cadastrar() { return View(); } [HttpPost] public ActionResult Cadastrar(FormCollection form) { String nome = form["Nome"]; String CPF = form["CPF"]; return View(); } } }
Porém vou te dizer uma coisa, nenhuma dessa duas formas é a melhor maneira de se obter dados dos formulários. Pô Achilles, está fazendo eu perder meu tempo aqui? Não, de forma nenhuma. Essa parte do tutorial foi essencial para você entender a relação entre as Actions e os tipos de Request (GET e POST) e a relação dos names dos inputs com os parâmetros da Action.
Então o que vimos até aqui?
- Podemos escrever formulários nas Views para obter dados dos usuários
- Existem Requests do tipo GET e POST
- Requests GET solicitam recursos (no nosso caso, telas)
- Resquest POST enviam recursos (dados)
- Devemos ter uma Action para tratar cada um dos Requests
- Para obtermos os dados dos formulários, devemos nomear os parâmetros da Action e a propriedade name do input com mesmo nome.
Comentários
Postar um comentário