ASP.NET MVCVinícius de Melo RochaMCP | MCTS | MCPDMicrosoft Student Partnervinicius.rocha@studentpartners.com.br
AgendaVisão GeralPrincipais conceitosRazorModel BindingValidaçãoFiltrosAutenticaçãoCriar uma aplicação
Desenvolvimento <WEB />LinguagensHTMLJavascriptCSSAJAX – Isso é uma linguagem?ServidorHTTP Verbs: POST, GET, PUTSem estado
Desenvolvimento com ASP.NETFramework para web do .NETWeb FormsDesktop para WEBProdutividadeCurva de aprendizagemASP.NET MVCImplementação do modelo MVCTestável (TDD)Mais controle sobre o código gerado
Visão geral WebFormsToolbox e DesignerPostbacksEvent drivenHTML Forms e ViewstateControles pela WEBEntre outras coisas
Porquê ASP.NET MVCTestável (TDD)Maior controle sobre o <código />SEO | .com/url/amigaSeparar responsabilidadesOpen source
ASP.NET MVCo que é isso?Implementação do padrão MVCAlternativa ao Web Forms (ASPX)Desenvolvido usando ASP.NETPúblico diferente?
ASP.NET [ASPX | MVC]O que existe em comum?Routing (System.Web.Routing)CachingSessionsProfiles e MembershipLocalization
Padrão MVCVelho padrão de projetoAcrônimo para: ModelViewControllerDescrito originalmente em 1979Applications Programming in Smalltalk-80: How to use Model–View–Controller
Como funciona... na webControllerRequisiçãoPasso 1Requisição é mapeada para o Controller
Como funciona... na webControllerRequisiçãoPasso 2O Controller processa a informação e cria o modelo (Model)
Como funciona... na webControllerRequisiçãoViewPasso 3O modelo (Model) é encaminhado para a View
Como funciona... na webControllerRequisiçãoViewPasso 4A View apresenta o (Model) em algo legível para o usuário
Como funciona... na webControllerRequisiçãoViewResponsePasso 5A View envia os modelo formatado para o usuário via Response
O que usaremos?FerramentasIDE Visual Studio 2010LinguagemC#View engine RazorBanco de Dados(?)
Começando...File > New > ProjectEstrutura do projetoFuncionamento dos controllersOnde ficam as views e coisas assim...
Exercício 1Criação de um projetoEstrutura de pastasCriação de ControllersCriação de ActionsActionResultUso de convenções
Exercício 2Adicionar parâmetros“nome” na actionIndex‘id’ na action DetalhesURL RoutingAdicionar novas rotas
RazorNão substitui o ASPX (alternativa)View engine mais simplesMenos códigoMais natural ao se misturar com HTMLVários HelpersFunciona com Visual Studio e WebMatrix
Razor - Exemplo<ul><% for (int i = 0; i < 10; i++) { %>    <li><% =i %></li><% } %></ul>ASPXPHPRazor<ul><?php     for ($i = 0; $i < 10; $i++) {echo("<li>$i</li>");     }    ?></ul><ul>@for (inti = 0; i < 10; i++) {    <li>@i</li>}</ul>
Razor - Comentários@* <div>    Hello World  </div>*@@{ //var name = “Vinicius Rocha”;//@name}@* @{ var name = “Vinicius Rocha";   @name  }*@
Razor - LayoutSimilar ao uso de MasterPagesDefina um layout e reuse em outras páginasPage 1Layout.cshtmlPage 2Page 3
Razor - LayoutRenderBodyRenderSectionRenderPageHelpersRenderPartialRenderAction
RenderBodyCorpo da página/Shared/_Layout.cshtml<html>    <head>      <title>Simple Layout</title>    </head>    <body>         @RenderBody()    </body></html>MyPage.cshtml@{     Layout = “~/Shared/_Layout.cshtml";}<p>   My content goes here</p>
Razor - LayoutUsar RenderSectionpara definir outras partesObrigatório por padrão/Shared/_Layout.cshtmlMyPage.cshtml<html>    <head>      <title>Simple Layout</title>    </head>    <body> @RenderSection("Menu")        @RenderBody()    </body></html>@{       Layout = “~/Shared/_Layout.cshtml";}@section Menu {  <ulid="pageMenu"><li>Option 1</li><li>Option 2</li>   </ul>}<p>My content goes here</p>
Razor - LayoutRenderPage – adicionar o conteúdo de outra página/Shared/_Layout.cshtml/Shared/_Footer.cshtml<html>    <head>      <title>Simple Layout</title>    </head>    <body>         @RenderSection("Menu")        @RenderBody()@RenderPage(“~/Shared/_Footer.cshtml")    </body></html><div class="footer">   © 2011 MIC</div>
Razor – Exercício 3Criar uma página de LayoutCriar uma View que use o LayoutDefinir uma região - SectionNão é session!Criar e chamar uma Page
Passando dados para a ViewViewDataDictionaryViewBagTipo dynamicNovidade no MVC 3Através de modelosView podem ser fortemente tipadas
MVVMModel – View – ViewModelDados que serão enviados para a Viewhttp://en.wikipedia.org/wiki/Model_View_ViewModel
Exercício 4Passar dados usando ViewBagCriar um ViewModelQuantidadeCategoriasDefinir uma View fortemente tipada@model Cadastro.ViewModel.HomeViewModelPassar os dados usando ViewModel
HelpersActionLinkTextBoxPasswordDropdownListAction
HelpersDuas formas para usar helpers:<%= Html.TextBox("ActivityType") %><%: Html.TextBoxFor(m => m.ActivityType) %><input type="text"       name="ActivityType"       value="Restaurant" />
Exercício 5Criar um Controller para CategoriaCriar as ActionsIndexDetalhesApagarExibir os produtos da categoria
ForumuláriosHTTP Methods[HttpPost][HttpGet][HttpDelete]@Html.BeginForm()Model BindingUpdateModelAplicações RESTful
Exercício 6Criar Controller de ProdutoActionsIndexCadastrarApagarEditar
ValidaçãoValidação no servidor e no clienteAtravés de DataAnnotations[Required][Range][RegularExpression][StringLength]LocalizaçãoFácil extensão
FiltrosIAuthorizationFilterOnAuthorizationIActionFilterOnActionExecutedOnActionExecutingIResultFilterOnResultExecutedOnResultExecuting(Roda antes de executar o ActionResult)IExceptionFilterOnException
FiltrosImplementações ASP.NET MVCAuthorizeAttributeHandleErrorAttributeOutputCacheAttributeRequireHttpsAttributeSobrescrever os métodos do ControllerClasse que herdar de ActionFilterAttribute
FiltrosA classe Controller implementa todas as interfaces de filtroOnAuthorizationOnExceptionOnActionExecutingOnActionExecutedOnResultExecutingOnResultExecuted
Autenticação[Authorize]Membership providerClasse FormsAuthenticationRedirectFromLoginPage()RedirectToLoginPage()SignOut()Web.config
Exercício 7Criar a tela de LoginConfigurar o Web.configAdicionar Filtros de validação
Cool Linkshttp://www.asp.net/mvchttp://www.codeplex.com/aspnethttp://www.sharpshooters.com.br/blog/http://haacked.com/http://weblogs.asp.net/scottgu/http://www.hanselman.com/http://trainingkit.webcamps.ms/

ASP.NET MVC Mini Curso