ASP .NET MVC 3 - Analisando alguns recursos da View - Inline Code e Helpers HTML
Neste artigo vamos falar um pouco sobre a View, a camada de apresentação, e alguns de seus recursos e propriedades.
Na arquitetura MVC a view tem como objetivo gerar o conteúdo através do modelo para apresentação ao usuário.
Quando falamos em camada de apresentação já supõe-se que devemos ter conhecimentos de HTML, CSS e JavaScript para podermos desenvolvê-la. Neste artigo apresentarei como podemos gerar conteúdo dinâmico usando algumas das funcionalidades do ASP .NET MVC 3 como Inline Code, os Helpers HTML.
Os exemplos mostrados neste artigos foram feitos usando a ferramenta gratuita Visual Web Developer 2010 Express Edition.
Usando Inline Code
A maneira mais simples de gerar conteúdo dinâmico e usar inline code.
O inline code são blocos de código inseridos entre as tags <% e %>. Estas tags são herança da ASP e estão presentes no JSP, PHP, Rails, etc.
No ASP .NET MVC 3 podemos incluir código C# ou VB .NET na view usando o Razor ao invés do ASPX.
O Razor é uma nova alternativa ao ASPX sendo mais simples e enxuto do que este.
Para você poder comparar segue abaixo alguns exemplos de código usando ASPX e Razor:
1- Bloco de código
//Razor @{ int idade = 43; string nome = "Macoratti"; } |
//ASPX <% int idade = 43; string nome = "Macoratti."; %> |
ASP .NET Razor | ASP .NET ASPX |
2- Expressão
<!--
Razor --> 2 <span>@model.Nome</span> |
<!-- ASPX --> 2 <span><%= model.Nome %></span> |
ASP .NET Razor | ASP .NET ASPX |
3- Texto e HTML
<!--
Razor --> @foreach(var item in nomes) { <span>@item.Nome</span> } |
<!-- ASPX --> <% foreach(var item in editoras) { %> <span><%= item.Nome %></span> <% } %> |
ASP .NET Razor | ASP .NET ASPX |
4- Código e Texto
!<!--
Razor --> @if (foo) { @:Plain Text e @editora.Nome } |
<!-- ASPX --> <% if (foo) { %> Texto <%= editora.Nome %> <% } %> |
ASP .NET Razor | ASP .NET ASPX |
5- Comentários
<!--
Razor --> @* Comentário *@ |
<!-- ASPX --> <%-- Comentário --%> |
ASP .NET Razor | ASP .NET ASPX |
6- Usando Textos e expressões
<!--
Razor --> Livro: @livro.Titulo - R$@livro.Preco. |
<!-- ASPX --> Livro: <%= livro.Titulo %> - R$<%= livro.Preco %>> |
ASP .NET Razor | ASP .NET ASPX |
Na arquitetura MVC, os pedidos recebidos são tratados pelos controladores (Controllers). No ASP.NET MVC, os controladores são apenas simples classes C# (geralmente herdando de System.Web.Mvc.Controller).
Cada método público em um controlador é conhecido como um método de ação (Action) , o que significa que podemos invocá-lo a partir da Web através de alguma URL para executar uma ação. A convenção MVC é colocar controladores em uma pasta chamada Controllers, que o Visual Studio criou para nós quando ele criou o projeto.
Para visualizar os dados o controlador fornece os dados para a View e isso pode ser feito da seguinte forma:
Ex: ViewData["Produtos"] = contexto.GetCategoriaPorId(id);
ViewData["mensagem"] = " Data do pedido : " + DateTime.Now();
Ex: ViewData.Model = produtos;
HTML Helpers
A função das páginas .cshtml ou .vbhtml é gerar hipertexto XHTML para os navegadores como Internet Explorer, FireFox, etc. Os arquivos .cshtml e .vbhtml misturam tags XHTML com scripts de servidor escritos em C#, VB .NET e isso pode prejudicar a legibilidade do código.
Para aumentar a legibilidade e a facilitar a manutenção do código a ASP .NET MVC oferece os recurso dos HTML Helpers cujo objetivo é encapsular um código XHTML.
Os HTML Helpers são métodos de extensão da classe HtmlHelper; são métodos estáticos que retornam o tipo MvcHtmlString e o primeiro parâmetro do tipo HtmlHelper.
A ASP.NET MVC já inclui alguns HTML Helpers padrão, abaixo temos alguns deles:
Helper ActionLink
O helper ActionLink é utilizado para gerar os links das páginas web. Esse helper aceita vários parâmetros e a maneira mais simples de usá-lo é passar dois parâmetros: o texto do link e a ação(action) que será chamada.
@Html.ActionLink("Texto", "Action") Ex: => <%:Html.ActionLink("Volta para página principal","Index") %>
Podemos também incluir um terceiro parâmetro para acrescentar um link para direcionar para outro controlador:
@Html.ActionLink("Home", "Index", "Home")
HTML Form Helpers
Os HTML Helpers para formulário renderizam os controles de formulário HTML. Abaixo vemos um exemplo de uma view usando alguns HTML Helpers:
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication1.Models.Cliente>" %> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <%= Html.ValidationSummary("Corrija os erros e tente novamente.") %> <% using (Html.BeginForm()) {%> <fieldset> <legend>Registro</legend> <p> <label for="Nome">Nome:</label> <%= Html.TextBox("Nome") %> <%= Html.ValidationMessage("Nome", "*") %> </p> <p> <label for="Senha">Senha:</label> <%= Html.Password("Senha") %> <%= Html.ValidationMessage("Senha", "*") %> </p> <p> <%= Html.CheckBox("ReceberNewsletter") %> <label for="ReceberNewsletter" style="display:inline">Receber Newsletter?</label> </p> <p> <input type="submit" value="Registrar" /> </p> </fieldset> <% } %> |
<%@ Page Title="" Language="VB" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage(Of MvcApplication1.MvcApplication1.Models.Cliente)" %> <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <%= Html.ValidationSummary("Corrija os erros e tente novamente.") %> <% Using Html.BeginForm() %> <fieldset> <legend>Registro</legend> <p> <label for="Nome">Nome:</label> <%= Html.TextBox("Nome") %> <%= Html.ValidationMessage("Nome", "*") %> </p> <p> <p> <label for="Senha">Senha:</label> <%= Html.Password("Senha") %> <%= Html.ValidationMessage("Senha", "*") %> </p> <p> <%= Html.CheckBox("ReceberNewsletter") %> <label for="ReceberNewsletter" style="display:inline">Receber Newsletter?</label> </p> <p> <input type="submit" value="Registro" /> </p> </fieldset> <% End Using %> |
C# | VB .NET |
- Html.BeginForm - Pode ser usado de duas formas:
<% Html.BeginForm(); %> <!-- Conteúdo do formulário --> <% Html.EndForm(); %> <% Html.BeginForm() %> <!-- Conteúdo do formulário --> <% Html.EndForm() %>C# VB .NET
<% using(Html.BeginForm("HandleForm", "Home")) %> <% { %> <!-- Conteúdo do formulário --> <% } %> <% Using Html.BeginForm("HandleForm", "Home") %> <!-- Conteúdo do formulário --> <% End Using %>C# VB .NET
O auxiliar BeginForm marca o início de um formulário HTML e é processado como um elemento form HTML. O método auxiliar BeginForm tem várias sobrecargas. A versão do auxiliar BeginForm mostrado abaixo usa dois parâmetros, os nomes de método Action e d controlador para enviar o formulário. O auxiliar BeginForm implementa o a interface IDisposable que permite usar a palavra-chave igual ao uso no ASP.NET AJAX:
- HTML Helper Check Box:
@Html.CheckBox("meuCheckBox", false) |
<!-- Sáida: --> <input id="meuCheckBox" name="meuCheckbox" type="checkbox" value="true" /> <input name="meuCheckBox" type="hidden" value="false" /> |
- HTML Helper Text Box:
@Html.TextBox("meuTextbox", "valor") |
<!-- Sáida: --> <input id="meuTextbox" name="meuTextbox" type="text" value="valor" /> |
- HTML Helper Text Area:
@Html.TextArea("meuTextarea", "valor") |
<!-- Sáida: --> <textarea cols="20" id="meuTextarea" name="meuTextarea" rows="2">valor</textarea> |
- HTML Helper Radio Button:
@Html.RadioButton("meuRadiobutton", "valor", true) |
<!-- Sáida: --> <input checked="checked" id="meuRadiobutton" name="meuRadiobutton" type="radio" value=" |
- HTML Helper Password Field:
@Html.Password("meuPassword", "valor") |
<!-- Sáida: --> <input id="meuPassword" name="meuPassword" type="password" value="valor" /> |
- Html Helper DropDownList
O auxiliar DropDownList processa uma lista drop-down. Em sua forma mais simples, DropDownList aceita um parâmetro, o nome da ViewData chave cujo valor é do tipo SelectList e que contém os valores de opção na lista drop-down. O framework MVC usa a propriedade ModelState da ViewData para determinar o valor selecionado. Se a propriedade ModelState estiver vazia, a estrutura procura um item para o qual a propriedade Selected esteja definido.
Obs: ModelState-Encapsula o estado do modelo de ligação para uma propriedade de um argumento de um método Action, ou para o próprio argumento.
Obs:Tanto o auxiliar DropDownList como o ListBox aceitam tanto um objeto SelectList ou MultiSelectList.
List<string> Times = new List<string>(); petList.Add("Palmeiras"); petList.Add("Santos"); petList.Add("São Paulo"); petList.Add("Flamento"); petList.Add("Vasco"); petList.Add("Fluminense"); petList.Add("Cruzeiro"); ViewData["times"] = new SelectList(Times); |
Dim Times As List(Of String) = New List(Of String) petList.Add("Palmeiras"); petList.Add("Santos"); petList.Add("São Paulo"); petList.Add("Flamento"); petList.Add("Vasco"); petList.Add("Fluminense"); petList.Add("Cruzeiro"); ViewData("_times") = New SelectList(Times) |
C# | VB .NET |
- Html Helper RadioButton
O método auxiliar RadioButton processa um botão de rádio. Em sua forma mais simples, o método usa três parâmetros: o nome do grupo de controle, o valor de opção e um valor Booleano que determina se o botão de opção está selecionado inicialmente.
Selecione sua cor favorita:<br /> <%= Html.RadioButton("favColor", "Azul", true) %> Azul <br /> <%= Html.RadioButton("favColor", "Bege", false)%> Bege <br /> <%= Html.RadioButton("favColor", "Preta", false)%> Preta <br /> <%= Html.RadioButton("favColor", "Branca", false)%> Branca <br /> <%= Html.RadioButton("favColor", "Verde", false)%> Verde <br /> <%= Html.RadioButton("favColor", "Cinza", false)%> Cinza |
HTML Form Helpers fortemente tipados
Html Helpers fortemente tipados são ajudantes HTML, que usam expressões lambda para fazer referência a modelos ou a view models passados para um modelo de visão.
A vantagem de criar uma view fortemente tipada é que podemos obter as propriedades da classe no modo de exibição, digitando o modelo e ".". (Ex: Model.Nome)
A seguir temos os principais HTML form fortemente tipados:
Check Box:
@Html.CheckBoxFor(x => x.IsAtivo) | <!-- Sáida: --> <input id="IsAtivo" name="IsAtivo" type="checkbox" value="true" /> <input name="IsAtivo" type="hidden" value="false" /> |
Text Box:
@Html.TextBoxFor(x => x.Nome) | <!-- Sáida: --> <input id="Nome" name="Nome" type="text" value="Valor do Nome" /> |
Text Area:
@Html.TextAreaFor(x => x.Descricao) | <!-- Sáida: --> <textarea cols="20" id="Descricao" name="Descricao" rows="2">Valor da Descricao</ - textarea> |
Radio Button:
@Html.RadioButtonFor(x
=> x.IsAtivo, "valor") |
<!-- Sáida: --> 4 <input checked="checked" id="IsAtivo" name="IsAtivo" type="radio" value="valor" /> |
Hidden Field:
@Html.HiddenFor(model => model.Id) | <!-- Sáida: --> <input id="Id" name="Id" type="hidden" value="Valor do Id" /> |
Password Field:
@Html.PasswordFor(x => x.Password) | <!-- Sáida: --> <input id="Password" name="Password" type="password"/> |
O ASP .NET MVC não é difícil, é apenas diferente do ASP .NET Web Forms e o objetivo do artigo e que você se familiarize com os seus recursos.
Vimos assim um pequeno resumo de como gerar conteúdo dinâmico usando as funcionalidades do ASP .NET MVC 3 como Inline Code, os Helpers HTML.
Em outro artigo irei tratar das visões parciais ou partial views.
João 3:13
Ora, ninguém subiu ao céu, senão o que desceu do céu, o Filho do homem.Referências: