Você está na página 1de 42

Vincius de Melo Rocha MCP | MCTS | MCPD Microsoft Student Partner vinicius.rocha@studentpartners.com.

br

ASP.NET MVC

Agenda
Viso Geral Principais conceitos
Razor Model Binding Validao Filtros Autenticao

Criar uma aplicao

Desenvolvimento <WEB />


Linguagens
HTML Javascript CSS AJAX Isso uma linguagem?

Servidor
HTTP Verbs: POST, GET, PUT Sem estado

Desenvolvimento com ASP.NET


Framework para web do .NET Web Forms
Desktop para WEB Produtividade Curva de aprendizagem

ASP.NET MVC
Implementao do modelo MVC Testvel (TDD) Mais controle sobre o cdigo gerado

Viso geral WebForms


Toolbox e Designer Postbacks Event driven HTML Forms e Viewstate Controles pela WEB Entre outras coisas

Porqu ASP.NET MVC


Testvel (TDD) Maior controle sobre o <cdigo /> SEO | .com/url/amiga Separar responsabilidades

Open source

ASP.NET MVC

o que isso?

Implementao do padro MVC Alternativa ao Web Forms (ASPX) Desenvolvido usando ASP.NET

Pblico diferente?

ASP.NET [ASPX | MVC]

O que existe em comum?


Routing (System.Web.Routing) Caching Sessions Profiles e Membership Localization

Padro MVC
Velho padro de projeto
Acrnimo para: Model View Controller Descrito originalmente em 1979

Applications Programming in Smalltalk-80: How to use ModelViewController

Como funciona... na web


Requisio

Controller

Passo 1
Requisio mapeada para o Controller

Como funciona... na web


Requisio

Controller

Passo 2
O Controller processa a informao e cria o modelo (Model)

Como funciona... na web


Requisio

Controller

View

Passo 3
O modelo (Model) encaminhado para a View

Como funciona... na web


Requisio

Controller

View

Passo 4
A View apresenta o (Model) em algo legvel para o usurio

Como funciona... na web


Requisio

Controller

View

Response

Passo 5
A View envia os modelo formatado para o usurio via Response

O que usaremos?

Ferramentas
IDE Visual Studio 2010
Linguagem C# View engine Razor

Banco de Dados (?)

Comeando...
File > New > Project Estrutura do projeto Funcionamento dos controllers Onde ficam as views e coisas assim...

Exerccio 1
Criao de um projeto Estrutura de pastas Criao de Controllers Criao de Actions ActionResult Uso de convenes

Exerccio 2
Adicionar parmetros
nome na action Index

id na action Detalhes

URL Routing
Adicionar novas rotas

Razor
No substitui o ASPX (alternativa) View engine mais simples Menos cdigo Mais natural ao se misturar com HTML Vrios Helpers Funciona com Visual Studio e WebMatrix

Razor - Exemplo
ASPX
<ul> <% for (int i = 0; i < 10; i++) { %> <li><% =i %></li> <% } %> </ul> <ul> <?php for ($i = 0; $i < 10; $i++) { echo("<li>$i</li>"); } ?> </ul>

PHP

Razor

<ul> @for (int i = 0; i < 10; i++) { <li>@i</li> } </ul>

Razor - Comentrios
@* <div> Hello World </div> *@

@{ //var name = Vinicius Rocha; //@name }

@* @{ var name = Vinicius Rocha"; @name } *@

Razor - Layout
Similar ao uso de Master Pages Defina um layout e reuse em outras pginas

Page 1 Page 2

Layout.cshtml Page 3

Razor - Layout
RenderBody
RenderSection RenderPage

Helpers
RenderPartial RenderAction

RenderBody
Corpo da pgina
/Shared/_Layout.cshtml
<html> <head> MyPage.cshtml <title>Simple Layout</title> </head> @{ <body> Layout = ~/Shared/_Layout.cshtml"; @RenderBody() } </body> </html> <p> My content goes here </p>

Razor - Layout
Usar RenderSection para definir outras partes Obrigatrio por padro
/Shared/_Layout.cshtml
<html> <head> @{ <title>Simple Layout</title> Layout = ~/Shared/_Layout.cshtml"; </head> } <body> @RenderSection("Menu") @section Menu { @RenderBody() <ul id="pageMenu"> </body> <li>Option 1</li> </html> <li>Option 2</li> </ul> } <p>My content goes here</p>

MyPage.cshtml

Razor - Layout
RenderPage adicionar o contedo de outra

pgina
/Shared/_Layout.cshtml /Shared/_Footer.cshtml

<html> <div class="footer"> <head> 2011 MIC <title>Simple Layout</title> </div> </head> <body> @RenderSection("Menu") @RenderBody() @RenderPage(~/Shared/_Footer.cshtml") </body> </html>

Razor Exerccio 3
Criar uma pgina de Layout Criar uma View que use o Layout Definir uma regio - Section
No session!

Criar e chamar uma Page

Passando dados para a View


ViewData
Dictionary

ViewBag
Tipo dynamic Novidade no MVC 3

Atravs de modelos View podem ser fortemente tipadas

MVVM
Model View ViewModel Dados que sero enviados para a View
http://en.wikipedia.org/wiki/Model_View_ViewModel

Exerccio 4
Passar dados usando ViewBag Criar um ViewModel
Quantidade Categorias

Definir uma View fortemente tipada


@model Cadastro.ViewModel.HomeViewModel

Passar os dados usando ViewModel

Helpers
ActionLink TextBox Password DropdownList Action

Helpers
Duas formas para usar helpers:
<%= Html.TextBox("ActivityType") %> <%: Html.TextBoxFor(m => m.ActivityType) %> <input type="text" name="ActivityType" value="Restaurant" />

Exerccio 5
Criar um Controller para Categoria Criar as Actions
Index Detalhes Apagar

Exibir os produtos da categoria

Forumulrios
HTTP Methods
[HttpPost] [HttpGet] [HttpDelete]

@Html.BeginForm() Model Binding


UpdateModel

Aplicaes RESTful

Exerccio 6
Criar Controller de Produto Actions
Index Cadastrar Apagar Editar

Validao
Validao no servidor e no cliente Atravs de DataAnnotations
[Required] [Range] [RegularExpression] [StringLength]

Localizao Fcil extenso

Filtros
IAuthorizationFilter
OnAuthorization

IActionFilter
OnActionExecuted OnActionExecuting

IResultFilter
OnResultExecuted OnResultExecuting (Roda antes de executar o ActionResult)

IExceptionFilter
OnException

Filtros
Implementaes ASP.NET MVC
AuthorizeAttribute HandleErrorAttribute OutputCacheAttribute RequireHttpsAttribute

Sobrescrever os mtodos do Controller


Classe que herdar de ActionFilterAttribute

Filtros
A classe Controller implementa todas as

interfaces de filtro
OnAuthorization
OnException OnActionExecuting

OnActionExecuted
OnResultExecuting OnResultExecuted

Autenticao
[Authorize] Membership provider Classe FormsAuthentication
RedirectFromLoginPage() RedirectToLoginPage() SignOut()

Web.config

Exerccio 7
Criar a tela de Login Configurar o Web.config Adicionar Filtros de validao

Cool Links
http://www.asp.net/mvc http://www.codeplex.com/aspnet http://www.sharpshooters.com.br/blog/ http://haacked.com/ http://weblogs.asp.net/scottgu/ http://www.hanselman.com/ http://trainingkit.webcamps.ms/

Você também pode gostar