<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-1104298155886631006</atom:id><lastBuildDate>Sun, 08 Sep 2024 10:33:39 +0000</lastBuildDate><category>ASP.NET</category><category>MVC</category><category>JQuery</category><category>Web API</category><category>Bootstrap</category><category>JQuery Mobile</category><category>JQuery UI</category><category>Visual Studio</category><category>ASP.NET WebForms</category><category>Angular JS</category><category>C#</category><category>JSON</category><category>Windows</category><category>Windows Phone 8</category><title>Coding First</title><description></description><link>http://codingfirst.blogspot.com/</link><managingEditor>noreply@blogger.com (Anonymous)</managingEditor><generator>Blogger</generator><openSearch:totalResults>16</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1104298155886631006.post-3057580027748127639</guid><pubDate>Tue, 08 Apr 2014 21:16:00 +0000</pubDate><atom:updated>2014-04-08T14:45:04.731-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">Windows</category><title>O que o fim do Windows XP significa para nós desenvolvedores?</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Hoje é o dia de despedida do notável Windows XP. Depois de 12 anos por aí a Microsoft finalmente encerrou as atualizações e explica em&amp;nbsp;&lt;a href=&quot;http://windows.microsoft.com/pt-br/windows/end-support-help&quot; target=&quot;_blank&quot;&gt;O que significa o fim do suporte ao Windows XP?&lt;/a&gt;&amp;nbsp;o que os usuários do sistema devem fazer neste momento.&lt;a href=&quot;https://draft.blogger.com/&quot;&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5ydJKp3H7-DiajbrCEDJt3oBjfGorW1Y7GX3ar6SK14xHBmsYODO8RwidkXlyMdwKu9yBfTyXerpjxFBDj5J0Sj7CSh28Y6abSD0lOChNEWAMzBcg-q4-x2YMUXBl1-FOdet2jo0Fpi1C/s1600/Windows_XP_SP3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5ydJKp3H7-DiajbrCEDJt3oBjfGorW1Y7GX3ar6SK14xHBmsYODO8RwidkXlyMdwKu9yBfTyXerpjxFBDj5J0Sj7CSh28Y6abSD0lOChNEWAMzBcg-q4-x2YMUXBl1-FOdet2jo0Fpi1C/s1600/Windows_XP_SP3.png&quot; height=&quot;250&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Windows XP&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Neste breve texto vou abordar o que acho interessante com o término do suporte ao XP. São coisas muito boas, pelo menos para nós desenvolvedores.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O que significa para os desenvolvedores de apps Windows?&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Com a manutenção do Windows XP a maioria das empresas deixaram de migrar seus setores de desenvolvimento. Eu mesmo, por exemplo, trabalhei em um grande projeto de software ERP que era usado em massa por empresas que possuíam a versão XP. De acordo com o gráfico da&amp;nbsp;&lt;a href=&quot;http://gs.statcounter.com/&quot; target=&quot;_blank&quot;&gt;StatCounter&lt;/a&gt;&amp;nbsp;é possível ver que há ainda uma parcela considerável de Windows XP no Brasil.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguoA6Ew6zo8LnLAywYYFJvoLo9zNFSAbHjym1nZlpwuCDwy1WBigpAc-APF9I3dimakiY_3hjCfE9Al0FaL-DHCXhJ3jP9osTOkODlOqlH8Yr5MVOJI5ejOFymMsOF9ZFE7Y7xQQgkJ37J/s1600/StatCounter-os-BR-monthly-201303-201403.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguoA6Ew6zo8LnLAywYYFJvoLo9zNFSAbHjym1nZlpwuCDwy1WBigpAc-APF9I3dimakiY_3hjCfE9Al0FaL-DHCXhJ3jP9osTOkODlOqlH8Yr5MVOJI5ejOFymMsOF9ZFE7Y7xQQgkJ37J/s1600/StatCounter-os-BR-monthly-201303-201403.jpg&quot; height=&quot;232&quot; width=&quot;400&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Uso de Sistemas Operacionais no Brasil&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Resultado: grande parte do desenvolvimento e dos desenvolvedores ficou parado no Framework .NET 4.0, devido a falta de suporte, como pode ser visto aqui:&amp;nbsp;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/vstudio/8z6watww%28v=vs.110%29.aspx&quot; target=&quot;_blank&quot;&gt;.NET Framework System Requirements&lt;/a&gt;.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;A maioria nem mesmo usa o WPF ou tira proveito dos avanços feitos com a implementação de MVVM. Estão no Windows Forms, executando queries em plain SQL com ADO.NET e fazendo bind de campos diretamente para DataSets.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Com a atualização para as versões mais novas do sistema operacional a empresa pode migrar seu toolbox de desenvolvimento também, colocando seus desenvolvedores de volta na década certa!&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3 style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O que significa para os desenvolvedores de apps Web?&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Para quem desenvolve para Web o fim do Windows XP é mais feliz ainda. Com ele morre a versão do Internet Explorer 8 e os&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;workarounds&amp;nbsp;de JavaScript para entregar um projeto. Até o ano passado&amp;nbsp;era possível encontrar várias empresas que necessitavam suportar o IE 8, devido ao legado do XP - &quot;pain, pain, pain&quot; =(!&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Da mesma forma que para os aplicativos Windows, a empresa agora pode ficar mais a vontade para migrar para novas tecnologias Microsoft que ofereçam o MVC, SignalR e felicidade para seus colaboradores que vão poder voltar aos trilhos da tecnologia.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Convençam seus gestores a migrarem seus softwares! Será um custo recuperado facilmente com a produtividade oferecida pelas novas tecnologias Microsoft presentes no&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.visualstudio.com/&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot; target=&quot;_blank&quot;&gt;Visual Studio&lt;/a&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Boa semana para todos!&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Nunca vou me esquecer daquele papel de parede com céu&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;azul&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Adeus Windows Xp!&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://codingfirst.blogspot.com/2014/04/o-que-o-fim-do-windows-xp-significa.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5ydJKp3H7-DiajbrCEDJt3oBjfGorW1Y7GX3ar6SK14xHBmsYODO8RwidkXlyMdwKu9yBfTyXerpjxFBDj5J0Sj7CSh28Y6abSD0lOChNEWAMzBcg-q4-x2YMUXBl1-FOdet2jo0Fpi1C/s72-c/Windows_XP_SP3.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1104298155886631006.post-300023246816926350</guid><pubDate>Mon, 24 Mar 2014 23:52:00 +0000</pubDate><atom:updated>2014-04-28T14:27:27.774-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Angular JS</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">MVC</category><title>ASP.NET MVC - Dicas para não falhar com ASP.NET MVC + Angular JS</title><description>&lt;div align=&quot;justify&quot;&gt;
O Angular JS é o pop dos Frameworks para desenvolvimento de aplicações SPA (Single Page Application), aparecendo na lista como uma das &lt;a href=&quot;http://blog.stackoverflow.com/2014/02/2013-stack-overflow-user-survey-results/&quot; target=&quot;_blank&quot;&gt;Most Excited Techology of 2013 na StackOverflow Survey 2013&lt;/a&gt;. Este foi criado e, é mantido por Engenheiros da Google e traz um toolbox completo para desenvolver aplicativos fantásticos, criando uma organização natural no projeto e possibilitando extensibilidade por meio de criação de componentes. Outro diferencial é o suporte oferecido pela comunidade, que é bem grande no GoogleDocs e StackOverflow.&lt;br /&gt;
&lt;br /&gt;
Abaixo estão algumas dicas que recolhi por experiência desenvolvendo uma Aplicação complexa a nível Enterprise com ASP.NET MVC e Angular JS.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Não abandone a sua ViewEngine&lt;/h3&gt;
&lt;div align=&quot;justify&quot;&gt;
&lt;br /&gt;
Passar a responsabilidade de tudo na sua View para o Angular JS é complicado. Você perderá toda flexibilidade e controle que a ViewEngine te proporciona. Deixando esta de lado seu código JavaScript crescerá de maneira assustadora, sendo difícil de rastrear problemas. Além disso, a segurança pode ficar comprometida se você retornar diretamente uma View em HTML estática.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div align=&quot;justify&quot;&gt;
Use os Controllers do MVC e seus filtros para ajudarem nessa parte de segurança e a ViewEngine para popular com alguma informação ou bloquear e sumir conteúdos que necessitam de perfis específicos. A reusabilidade de conteúdo também depende da sua &lt;strong&gt;ViewEngine&lt;/strong&gt;, use &lt;strong&gt;ViewBag&lt;/strong&gt;/&lt;strong&gt;ViewData&lt;/strong&gt; e &lt;strong&gt;PartialViews&lt;/strong&gt; sempre quando necessário. Faça o Angular JS atuar onde ele é bom e não comprometerá sua produtividade.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Não crie directives que herdem $scope&lt;/h3&gt;
&lt;br /&gt;
Como um bom iniciante, procure entender o comportamento do &lt;strong&gt;$scope&lt;/strong&gt; dentro de uma D&lt;strong&gt;irective&lt;/strong&gt;. Existem três tipos. &lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Parent scope&lt;/strong&gt; você pode fazer iteração entre diretivas.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Child scope &lt;/strong&gt;herda completamente o scope atual, no caso do controller mais acima, logo é possível setar valores de variáveis do Controller de dentro da diretiva.  &lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Isolated scope&lt;/strong&gt;, em que a diretiva tem seu próprio $scope e não interage com outro.&lt;/li&gt;
&lt;/ol&gt;
&lt;div align=&quot;justify&quot;&gt;
Entender esses conceitos é importante. Quando comecei a desenvolver directives não entendia direito e várias das quais criei tiveram que ser refeitas. Não sabia que criando diretivas de &lt;strong&gt;Child scope&lt;/strong&gt; causariam problemas em meus componentes, porque estavam todas ligadas ao mesmo Controller e várias dessas dentro da mesma View causariam concorrência e erros &quot;bizarros&quot; - &lt;em&gt;aprendi da pior forma, &quot;leson learned&quot; :D&lt;/em&gt;.&lt;br /&gt;
&lt;br /&gt;
O site do Angular JS não explica bem o conceito, como a maioria dos outros, mas esse post do SackOerflow te dará uma aula completa:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/14914213/when-writing-a-directive-how-do-i-decide-if-a-need-no-new-scope-a-new-child-sc/14914798#14914798&quot; target=&quot;_blank&quot;&gt;When writing a directive, how do I decide if a need no new scope, a new child scope, or a new isolate scope?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Não use JQuery&lt;/h3&gt;
&lt;div align=&quot;justify&quot;&gt;
&lt;br /&gt;
O Angular JS vem com uma versão do JQuery embutida, chamada JQLite que disponibiliza as funções básicas da versão full que são mais utilizadas. Existe uma variedade de diretivas que fazem o trabalho do JQuery de maneira muito mais elegante como ng-class, ng-hide, ng-show, ng-selected, ng-disabled, dentre outras.&lt;br /&gt;
&lt;br /&gt;
Mas na hora de construir as suas próprias diretivas será necessário acessar o DOM para interagir com o elementos da View. É aí que entra o JQLite:&lt;br /&gt;
&lt;br /&gt;
Então, nada de scripts JQuery soltos na View ou mesmo dentro do Controller.&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://docs.angularjs.org/api/ng/function/angular.element&quot; target=&quot;_blank&quot;&gt;Angular&#39;s jqLite&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Não lute contra o padrão, aprenda MVVM&lt;/h3&gt;
&lt;div align=&quot;justify&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div align=&quot;justify&quot;&gt;
O MVVM foi criado pelo prodígio do Design Patterns &lt;a href=&quot;http://en.wikipedia.org/wiki/Martin_Fowler&quot; target=&quot;_blank&quot;&gt;Martin Fowler&lt;/a&gt; e o Angular JS foi construído com base nele. De uma maneira geral Angular JS te obriga a seguir um certo padrão para desenvolver a sua aplicação.&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div align=&quot;justify&quot;&gt;
Dentro desse padrão está o Controller e $scope que representam sua ViewModel, seu HTML e directives que compõem a View. Não use lógicas absurdas dentro da View usando variáveis do $scope, pois a manutenção vai ficar muito mais difícil. Faça toda a lógica dentro do Controller, e reforçando mais uma vez, sem JQuery.&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://en.wikipedia.org/wiki/Model_View_ViewModel&quot; target=&quot;_blank&quot;&gt;Model View ViewModel&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Aprenda a usar $watch e os interceptadores $http&lt;/h3&gt;
&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;
O &lt;a href=&quot;http://code.angularjs.org/1.2.15/docs/api/ng/type/$rootScope.Scope&quot; target=&quot;_blank&quot;&gt;$watch&lt;/a&gt; possibilita que você observe uma variável qualquer do &lt;strong&gt;$scope&lt;/strong&gt; e execute algum evento caso o seu valor mude. Esse recurso é muito poderoso e pode te economizar centenas de linhas de código para, por exemplo, caso o valor da variável assistida mude esconda, apague ou crie campos dinamicamente na tela.&lt;br /&gt;
&lt;br /&gt;
Do mesmo modo que o &lt;a href=&quot;http://code.angularjs.org/1.2.15/docs/api/ng/type/$rootScope.Scope&quot; target=&quot;_blank&quot;&gt;$watch&lt;/a&gt;, os interceptadores &lt;a href=&quot;http://docs.angularjs.org/api/ng/service/$http&quot; target=&quot;_blank&quot;&gt;$http&lt;/a&gt; podem salvar tempo, possibilitam centralizar validações de erros, habilitar e desabilitar cache, alterar e ler cabeçalhos HTTP e muito mais. &lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div align=&quot;justify&quot;&gt;
Se você quer mostrar para o usuário uma mensagem de erro amigável toda vez que o seu servidor lançar uma exceção ou uma mensagem específica caso uma validação de campo falhe, os interceptadores são o melhor caminho e você fará uma vez só para ser usada por toda aplicação - &lt;a href=&quot;http://en.wikipedia.org/wiki/Don&#39;t_repeat_yourself&quot; target=&quot;_blank&quot;&gt;Don&#39;t repeat yourself&lt;/a&gt;. &lt;/div&gt;
&lt;div align=&quot;justify&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3 align=&quot;justify&quot;&gt;
Herança de controllers existe&lt;/h3&gt;
&lt;div align=&quot;justify&quot;&gt;
&lt;br /&gt;
Quando seu projeto apresenta muitos padrões, com telas parecidas que executam coisas iguais, a primeira coisa que se pensa é fazer algo reutilizável. Imagine uma tela de inserção que é utilizada em vários cenários, que possuem os mesmos campos e acessam os mesmo dados.&lt;br /&gt;
&lt;br /&gt;
Você pode fazer herança de controllers do Angular JS para facilitar a sua vida. A maneira mais fácil é colocar o controller pai declarado mais externo na View e o controller filho dentro deste. O &lt;strong&gt;$scope&lt;/strong&gt; do pai estará acessível para o filho, sendo possível utilizar de todos os métodos e variáveis. Eu ainda inventei uma maneira de se fazer &lt;strong&gt;override&lt;/strong&gt; dos métodos do controller pai - não sei se isso é legal, se é bonito ou feio, mas salvou minha vida.&lt;/div&gt;
&lt;div class=&quot;csharpcode&quot;&gt;
&lt;/div&gt;
&lt;pre class=&quot;alt&quot;&gt;&lt;span class=&quot;rem&quot;&gt;//Copio o método original do Controller Pai&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;div class=&quot;csharpcode&quot;&gt;
&lt;/div&gt;
&lt;pre&gt;$scope.salvarBase = angular.copy($scope.salvar);&lt;/pre&gt;
&lt;br /&gt;
&lt;div class=&quot;csharpcode&quot;&gt;
&lt;pre&gt;&lt;span class=&quot;rem&quot;&gt;//Modifico o método e chamo o base&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;csharpcode&quot;&gt;
&lt;/div&gt;
&lt;pre class=&quot;alt&quot;&gt;$scope.salvar = &lt;span class=&quot;kwrd&quot;&gt;function&lt;/span&gt; () {&lt;/pre&gt;
&lt;br /&gt;
&lt;div class=&quot;csharpcode&quot;&gt;
&lt;pre&gt;  &lt;span class=&quot;rem&quot;&gt;//Faço coisas específicas para o Controller Filho]&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;csharpcode&quot;&gt;
&lt;pre&gt;  $scope.salvarBase();&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;csharpcode&quot;&gt;
&lt;/div&gt;
&lt;pre class=&quot;alt&quot;&gt;}&lt;/pre&gt;
&lt;br /&gt;
No trecho de código acima eu copio o método original do Controller mais externo, logo depois altero seu comportamento. Por mais feio que seja, funciona e me salvou horas de trabalho.&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://lostechies.com/gabrielschenker/2013/12/10/angularjspart-3-inheritance/&quot; target=&quot;_blank&quot;&gt;AngularJS–Part 3, Inheritance&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
Não deixe clientes e analistas criarem Fluxos esdrúxulos&lt;/h3&gt;
&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;
Esta é uma parte crítica e bem abstrata do problema, porque dependendo da forma que seu cliente ou analista escreve o Angular JS pode ser um passo para o fracasso. A quantidade de JavaScript que será necessária para escrever seu sistema vai ser absurda &lt;em&gt;- tenho controllers com mais de 2200 linhas de JavaScript devido a pedidos esdrúxulos do cliente&lt;/em&gt;.&lt;br /&gt;
&lt;br /&gt;
Não deixe que seu analista crie telas com abas por todos os lados ou fluxos que envolvam chamadas em cascatas de modais que são exibidos a partir de determinados resultados de chamadas assíncronas ao ASP.NET. Irão aparecer erros quase impossíveis de rastrear e o código ficará poluído. &lt;/div&gt;
&lt;br /&gt;
&lt;h3 align=&quot;justify&quot;&gt;
Não deixe a validação por conta do AngularJS&lt;/h3&gt;
&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;
Infelizmente a validação de campos ainda não funciona muito bem, principalmente no IE8/9/10, total fracasso. Deixe tudo que puder no server e use os interceptadores &lt;strong&gt;$http&lt;/strong&gt; que falei anteriormente para exibir os erros para o usuário em um modal, por exemplo. &lt;/div&gt;
&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;
É possível combinar interceptadores e directive para exibir aquelas famosas validações &lt;strong&gt;inline&lt;/strong&gt; ou em um sumário parecido com o do ASP.NET MVC puro.&lt;/div&gt;
&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;
Se achar que é muito trabalhoso fazer a sua diretiva, use o clássico &lt;a href=&quot;http://jqueryvalidation.org/&quot; target=&quot;_blank&quot;&gt;jquery-validation&lt;/a&gt; para fazer o trabalho duro para você &lt;em&gt;– já aviso que vai perder toda a diversão fazendo sua própria directive =D&lt;/em&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;
Diga não a versões anteriores ao IE10&lt;/h3&gt;
&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;
O IE7/8/9 como sempre nos acompanha em nossa jornada – &lt;em&gt;desculpe MS, mas é dureza suportá-lo, principalmente com muito JavaScript =(.&lt;/em&gt; Se for realmente necessário usar o IE7/8/9, seu cliente for teimoso na verdade, já aviso que terá uma dura jornada. &lt;/div&gt;
&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;
Cada Controller Angular JS, pode ter certeza, vai ter uma série de trechos de código que só serão executados caso o Browser usado seja IE. No caso das directives, algumas específicas que desenvolvi, foram feitas praticamente duas versões por causa de incompatibilidades.&lt;/div&gt;
&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;
Um grande problema que enfrentei também foi o cache. Em alguns casos o IE não atualiza a tela de maneira alguma, então existe um cache killer, em que é desabilitado cache de JSON para IE7/8/9 e no interceptador. Chamadas get recebem um timestamp para evitar problemas.&lt;/div&gt;
&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;
Se você será um sofredor como eu fui, segue abaixo uma série de links que resolverão alguns problemas:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/17232169/data-not-updating-on-ie-9-10-in-application-developed-using-angularjs&quot; target=&quot;_blank&quot;&gt;Data not updating on ie 9/10 in application developed using angularjs&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/1160105/disable-browser-cache-for-entire-asp-net-website&quot; target=&quot;_blank&quot;&gt;Disable browser cache for entire ASP.Net website&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://gpiot.com/blog/angularjs-on-ie7-not-working-how-to-fix-it/&quot; target=&quot;_blank&quot;&gt;AngularJS on IE7 not working: how to fix it.&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://stackoverflow.com/questions/3326893/is-json-stringify-supported-by-ie-8&quot; target=&quot;_blank&quot;&gt;Is JSON.stringify() supported by IE 8?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;h3&gt;
Conclusão&lt;/h3&gt;
&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;
O Angular JS é fantástico, sua aplicação fica com outro nível. Se você tem medo de JavaScript mude de profissão, porque o futuro da Web é Single Page Application. &lt;/div&gt;
&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;
Abaixo seguem alguns tutoriais de como iniciar em Angular JS + ASP.NET MVC:&lt;/div&gt;
&lt;ul&gt;&lt;br /&gt;
&lt;li&gt;&lt;a href=&quot;http://weblogs.asp.net/dwahlin/archive/2013/04/12/video-tutorial-angularjs-fundamentals-in-60-ish-minutes.aspx&quot; target=&quot;_blank&quot;&gt;Video Tutorial: AngularJS Fundamentals in 60-ish Minutes&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.johnpapa.net/angular-app-structuring-guidelines/&quot; target=&quot;_blank&quot;&gt;Angular App Structuring Guidelines&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://andrebaltieri.azurewebsites.net/vdeo-iniciando-com-angularjs/&quot; target=&quot;_blank&quot;&gt;Iniciando com AngularJS&lt;/a&gt; – Guia Muito bom feito pelo MVP &lt;a href=&quot;https://www.facebook.com/andre.baltieri&quot; target=&quot;_blank&quot;&gt;Andre Baltieri&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;
Espero que tenham gostado do Artigo. Qualquer dúvida sobre Angular JS e ASP.NET MVC estou a disposição. Meu contato está no blog, me procure.&lt;/div&gt;
&lt;br /&gt;
&lt;div align=&quot;justify&quot;&gt;
Boa semana para todos!&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;</description><link>http://codingfirst.blogspot.com/2014/03/aspnet-mvc-dicas-para-nao-falhar-com.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1104298155886631006.post-6778366477314076859</guid><pubDate>Sun, 15 Dec 2013 03:36:00 +0000</pubDate><atom:updated>2013-12-16T03:34:25.496-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windows Phone 8</category><title>Windows Phone 8 - Usando HttpClient em um App WP8</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O Windows Phone 8 está fenomenal, com cada vez mais recursos e aplicativos. Eu sou um usuário hardcore e considero este o sistema operacional mais estável para mobile. Um app mobile precisa acessar o mundo externo de alguma forma, seja para consultar dados em um serviço ou mesmo enviar informações que serão persistidas em algum lugar. Pensando nisso, foi criado o &lt;a href=&quot;http://msdn.microsoft.com/pt-br/library/system.net.http.httpclient(v=vs.110).aspx&quot;&gt;HttpClient&lt;/a&gt;, que facilita a vida de quem precisa acessar &lt;b&gt;Http&lt;/b&gt;, como &lt;b&gt;&lt;a href=&quot;http://www.windowsazure.com/en-us/develop/mobile/tutorials/get-started-with-push-dotnet/&quot;&gt;Windows Azure Mobile Services&lt;/a&gt;&lt;/b&gt;&amp;nbsp;ou consumir &lt;b&gt;Restful &lt;/b&gt;services feitos em &lt;b&gt;Web API&lt;/b&gt;, por exemplo.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Instalando o HttpClient&lt;/span&gt;&lt;/h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O &lt;b&gt;HttpClient &lt;/b&gt;está localizado no assembly&amp;nbsp;&lt;span style=&quot;font-size: 13px; line-height: 17px;&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/pt-br/library/system.net.http.httpclient(v=vs.110).aspx&quot;&gt;System.Net.Http.dll&lt;/a&gt; e pode ser instalado via &lt;b&gt;Nuget&lt;/b&gt;:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; line-height: 17px;&quot;&gt;Acesse o Nuget Package Manager para instalar um novo pacote.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 17px;&quot;&gt;Procure pelo pacote&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;line-height: 17px;&quot;&gt;&lt;b&gt;Microsoft.Net.Http&lt;/b&gt;, ele aparecerá como a primeira opção.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; line-height: 17px;&quot;&gt;Dê dois cliques para instalar o pacote.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ9HMprvtF2Mhyphenhyphensmx5NmFwGp-VxULZdnRrsdOQWiXlRxfoo0r_Fv3lFb-KOX9WDUgokq1rUKz0G56cK9glVs70yQ2N5Y-72NiqDgmGm1R2bCUf4Z85y724OrKp9a6MVqESwYt90PPkeip2/s1600/2013-12-14+23_54_54-PhoneApp2+-+Manage+NuGet+Packages.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ9HMprvtF2Mhyphenhyphensmx5NmFwGp-VxULZdnRrsdOQWiXlRxfoo0r_Fv3lFb-KOX9WDUgokq1rUKz0G56cK9glVs70yQ2N5Y-72NiqDgmGm1R2bCUf4Z85y724OrKp9a6MVqESwYt90PPkeip2/s1600/2013-12-14+23_54_54-PhoneApp2+-+Manage+NuGet+Packages.png&quot; height=&quot;265&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Package HttpClient&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; line-height: 17px;&quot;&gt;Com este pacote já é possível usar a classe em sua aplicação, mas com um porém, os métodos dessa classe no WP8 não tem acesso a 100% dos recursos&amp;nbsp;&lt;b&gt;async, &lt;/b&gt;o que nos leva a outro passo :).&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; line-height: 17px;&quot;&gt;Instalando o Microsoft Async&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 17px;&quot;&gt;Para que os projetos WP8 façam uso de &lt;b&gt;async/await&lt;/b&gt; é necessário instalar um pacote Nuget que adiciona métodos extendidos para os tipos que acessam recursos de rede, como por exemplo, o &lt;b&gt;HttpClient&lt;/b&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small; line-height: 17px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 17px;&quot;&gt;Para instalar o&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;line-height: 17px;&quot;&gt;&lt;a href=&quot;https://www.nuget.org/packages/Microsoft.Bcl.Async&quot;&gt;Microsoft Async&lt;/a&gt;:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; line-height: 17px;&quot;&gt;Acesse o Nuget Package Manager para instalar um novo pacote.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; line-height: 17px;&quot;&gt;Procure pelo pacote&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; line-height: 17px;&quot;&gt;&lt;b&gt;Microsoft Async&lt;/b&gt;,&amp;nbsp;ele aparecerá como a primeira opção.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; line-height: 17px;&quot;&gt;Dê dois cliques para instalar o pacote.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-FtNHe3UNnGQV48O1fQks57LVRY8RZBbZRoG2LczmwnLyDoGy6w0EhTv6YvKOn5YLFjrZ4_KfyOMWQ71rl5W0R75-uvojklLLvsixNY0db_srOPjnYzGHLWGqfjDl_BALdjUsN0uIhDjU/s1600/2013-12-15+00_05_20-PhoneApp2+-+Manage+NuGet+Packages.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-FtNHe3UNnGQV48O1fQks57LVRY8RZBbZRoG2LczmwnLyDoGy6w0EhTv6YvKOn5YLFjrZ4_KfyOMWQ71rl5W0R75-uvojklLLvsixNY0db_srOPjnYzGHLWGqfjDl_BALdjUsN0uIhDjU/s1600/2013-12-15+00_05_20-PhoneApp2+-+Manage+NuGet+Packages.png&quot; height=&quot;266&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Package com extension method para networking types&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Com esse pacote instalado é possível usar o &lt;b&gt;HttpClient &lt;/b&gt;com todos os recursos modernos fornecidos pelo .NET.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Exemplo simples de uso do HttpClient&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Para usar o &lt;b&gt;HttpClient &lt;/b&gt;adicione a referência em sua classe para &lt;i&gt;System.Net.Http&lt;/i&gt;. No exemplo abaixo, existe um simples botão, que faz uma chamada Http e coloca o body da request em um textbox.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;private async void Button_Click(object sender, RoutedEventArgs e)
{
 HttpClient client = new HttpClient();

 try
 {
  HttpResponseMessage response = await client.GetAsync(&quot;http://www.google.com/&quot;);
  response.EnsureSuccessStatusCode();
  string responseBody = await response.Content.ReadAsStringAsync();

  this.txtResponse.Text = responseBody;
 }
 catch (HttpRequestException ex)
 {
  throw ex;
 }
}
&lt;/pre&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Veja o uso de async/await sem maiores problemas.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ol style=&quot;font-size: medium;&quot;&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKxNyU3wiycyvk017SLQH1dWbdsXsJsSJp5BO76JbNgPiMyoe72IYSpKZOoV4JbFWVMFUgiQJrEqQMAnk1AUXqDHs4AA990wt8_CXS5KM0k3vQJBkLU8JRXhkBFWj1Y_tcee7RL-4Gzytb/s1600/2013-12-15+00_53_42-Emulator+WVGA+512MB.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKxNyU3wiycyvk017SLQH1dWbdsXsJsSJp5BO76JbNgPiMyoe72IYSpKZOoV4JbFWVMFUgiQJrEqQMAnk1AUXqDHs4AA990wt8_CXS5KM0k3vQJBkLU8JRXhkBFWj1Y_tcee7RL-4Gzytb/s1600/2013-12-15+00_53_42-Emulator+WVGA+512MB.png&quot; height=&quot;320&quot; width=&quot;177&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;App usando HttpClient&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Ao clicar no botão, é chamado o evento &lt;b&gt;Button_Click&lt;/b&gt;, perceba que a requisição retorna status 200.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYSMRtNwzvAd1NfiMthmzsBGq_KLwR4vdAZg3qDzUFBbaW_LfJzC5kaE46HxkLvj8xaOtfPYfIw1qa5iv36ERNS__YL-_KYmq5S1p3N0JS3ugOKTKLAmhlURzP8EqTXAKa0JR2fsHzKtgz/s1600/2013-12-15+00_57_30-PhoneApp2+(Debugging)+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYSMRtNwzvAd1NfiMthmzsBGq_KLwR4vdAZg3qDzUFBbaW_LfJzC5kaE46HxkLvj8xaOtfPYfIw1qa5iv36ERNS__YL-_KYmq5S1p3N0JS3ugOKTKLAmhlURzP8EqTXAKa0JR2fsHzKtgz/s1600/2013-12-15+00_57_30-PhoneApp2+(Debugging)+-+Microsoft+Visual+Studio.png&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Código do evento do botão&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Como a requisição é para &lt;i&gt;www.google.com&lt;/i&gt;, a resposta será o HTML da página, como pode ser visto no textbox:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisD29EPRym9bWANkM6vhGCJ9YG_4SVu5J7m-Qq-RzwtpHlvdwrKrjPAu6bt5CMxZJZQ_WhN6J0cP9s9xmcTV7gCbWsKnp2j2QmC3lFueML2LWmx6YXUudQ8yKy95UrHE5AKFziwc5LvJm-/s1600/2013-12-15+00_56_36-Emulator+WVGA+512MB.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEisD29EPRym9bWANkM6vhGCJ9YG_4SVu5J7m-Qq-RzwtpHlvdwrKrjPAu6bt5CMxZJZQ_WhN6J0cP9s9xmcTV7gCbWsKnp2j2QmC3lFueML2LWmx6YXUudQ8yKy95UrHE5AKFziwc5LvJm-/s1600/2013-12-15+00_56_36-Emulator+WVGA+512MB.png&quot; height=&quot;320&quot; width=&quot;177&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Textbox é preenchido com o resultado da requisição&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;h3&gt;
&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Finalizando&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O &lt;b&gt;HttpClient&lt;/b&gt; está estável e muito fácil de usar. Um problema que tive durante os testes foi a falta de conexão com a internet no emulador do Windows Phone 8 que resolvi usando este post do stackoverflow:&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;a href=&quot;http://stackoverflow.com/questions/13159947/windows-phone-8-emulator-cant-connect-to-the-internet&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Windows Phone 8 emulator can&#39;t connect to the internet&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Para maiores referências de como usar o &lt;b&gt;HttpClient &lt;/b&gt;nas sua aplicações, um bom lugar para começar é o link abaixo:&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;a href=&quot;http://msdn.microsoft.com/pt-br/library/windows/apps/hh781239.aspx&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Início rápido: conectando-se usando System.Net.Http.HttpClient (aplicativos da Windows Store que usam C#/VB e XAML)&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Espero que tenham gostado da dica. Bom final de semana para todos!&lt;/span&gt;</description><link>http://codingfirst.blogspot.com/2013/12/windows-phone-8-usando-httpclient-em-um.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQ9HMprvtF2Mhyphenhyphensmx5NmFwGp-VxULZdnRrsdOQWiXlRxfoo0r_Fv3lFb-KOX9WDUgokq1rUKz0G56cK9glVs70yQ2N5Y-72NiqDgmGm1R2bCUf4Z85y724OrKp9a6MVqESwYt90PPkeip2/s72-c/2013-12-14+23_54_54-PhoneApp2+-+Manage+NuGet+Packages.png" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1104298155886631006.post-8262410459868764824</guid><pubDate>Tue, 01 Oct 2013 06:07:00 +0000</pubDate><atom:updated>2013-10-01T09:42:11.108-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">MVC</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio</category><title>ASP.NET MVC - Novidades do ASP.NET MVC 5</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;São muitas as novidades que virão com o &lt;a href=&quot;http://www.asp.net/mvc/tutorials/mvc-5&quot;&gt;ASP.NET MVC 5&lt;/a&gt; no &lt;a href=&quot;http://www.microsoft.com/visualstudio/ptb/2013-downloads&quot;&gt;Visual Studio 2013&lt;/a&gt;. Houve uma mudança visual com novo &lt;b&gt;CSS &lt;/b&gt;e templates de &lt;b&gt;Scaffold&lt;/b&gt;, incorporação do &lt;a href=&quot;http://msdn.microsoft.com/pt-br/library/system.security.claims.claimsidentity.aspx&quot;&gt;Claims Security&lt;/a&gt;, além&amp;nbsp;&amp;nbsp;da nova camada middleware &lt;b&gt;OWIN&lt;/b&gt;. No &lt;b&gt;Visual Studio 2013&lt;/b&gt;, a tela para criação do projeto ficou mais inflada, com várias opções de escolha para autenticação e algumas outras perfumarias.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Novo wizard para criar Web App&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;A tela para criação de projetos ficou um pouco diferente. Agora é possível selecionar &lt;b&gt;WebForms&lt;/b&gt;, &lt;b&gt;MVC &lt;/b&gt;e &lt;b&gt;Web API&lt;/b&gt;, o que adicionará suporte ao que for selecionado. Parece que a Microsoft finalmente resolveu deixar claro que &lt;b&gt;WebForms &lt;/b&gt;pode conviver na mesma aplicação que o MVC.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhv3-SaQhs9TXziO5BKP5xth2NT1BC17FiMwA8SQyjGwWVyCpgORzYWRGwO74feX2dYAedOGMyUn9KmJMf-IYeghUty8ZJZ6DYL5ETrVWIpZAHAmipp_hoAUUnMq92WILdBQExc5_MNWX4N/s1600/2013-10-01+00_54_52-Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;198&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhv3-SaQhs9TXziO5BKP5xth2NT1BC17FiMwA8SQyjGwWVyCpgORzYWRGwO74feX2dYAedOGMyUn9KmJMf-IYeghUty8ZJZ6DYL5ETrVWIpZAHAmipp_hoAUUnMq92WILdBQExc5_MNWX4N/s320/2013-10-01+00_54_52-Microsoft+Visual+Studio.png&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Novo Wizard para criação de Web Apps&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Foi adicionado também um novo botão, em que é possível selecionar o tipo de autenticação que a aplicação irá usar.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRsGCAni96zZnI5qm2-g9kp8MlP40UKZqJD4shEernvh-iZEX3W9GwQ4YdOYuYNWlJUO5PNGpCdBwhINM3e7idj59igMsWuwye0ge64jXh6z9rGj2fwNQgf1RClpwtVTVQDiveP7hkHXo2/s1600/2013-10-01+00_56_36-Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;198&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRsGCAni96zZnI5qm2-g9kp8MlP40UKZqJD4shEernvh-iZEX3W9GwQ4YdOYuYNWlJUO5PNGpCdBwhINM3e7idj59igMsWuwye0ge64jXh6z9rGj2fwNQgf1RClpwtVTVQDiveP7hkHXo2/s320/2013-10-01+00_56_36-Microsoft+Visual+Studio.png&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Dentre as formas de&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Autenticação&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;estão: Nenhuma, Individual, Windows e para Organizações. Esta última está diretamente ligada a outra novidade que foi adicionada, o &lt;/span&gt;&lt;b style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Claim Security&lt;/b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;, que falarei mais tarde.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Novo wizard Scaffold e Bootstrap&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Foi criado uma entrada de menu &lt;b&gt;&lt;i&gt;Scaffold &lt;/i&gt;&lt;/b&gt;para criação de &lt;b&gt;Views/Controllers&lt;/b&gt;. Eu particularmente achei que este deviria ficar no menu principal, mas adicionaram como sub item do menu &lt;b&gt;&lt;i&gt;Add&lt;/i&gt;&lt;/b&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSsifW3DWy0Ff4ECh8JA-OWxL0ha_F9QQvGx_KLsX1sJoIhKRjMaNTDmkQpQptQIYS05Js6QrmRre8e45cIC0VqHbLsnX2tsKA9SlaZPZ09bnlyGsoSJ4PrcHeEZb4h0i15rkeRiyFSdOM/s1600/2013-10-01+01_17_23-Fals.NewsAspMvc5+(Running)+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;148&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhSsifW3DWy0Ff4ECh8JA-OWxL0ha_F9QQvGx_KLsX1sJoIhKRjMaNTDmkQpQptQIYS05Js6QrmRre8e45cIC0VqHbLsnX2tsKA9SlaZPZ09bnlyGsoSJ4PrcHeEZb4h0i15rkeRiyFSdOM/s320/2013-10-01+01_17_23-Fals.NewsAspMvc5+(Running)+-+Microsoft+Visual+Studio.png&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Menu Scaffold&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O processo foi centralizado em um único local, parecido com um wizard de criação de projetos e soluções. Na primeira tela você seleciona o item que deseja, Controller, View, Web API.&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhVqPb-xgxRvMNF5dYzL1yGUVAnvVJzaRqhaGgpaj4LRZpkaseovZy379xo9rPVijOAK6Q8SD3KpFnOPiYlTrbDCVIV4E_egIcIgoAruKoVKKhElyMaC14V7tP8JWvv8oKqyl3-c7CfiEi/s1600/2013-10-01+01_21_02-Fals.NewsAspMvc5+(Running)+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;214&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhVqPb-xgxRvMNF5dYzL1yGUVAnvVJzaRqhaGgpaj4LRZpkaseovZy379xo9rPVijOAK6Q8SD3KpFnOPiYlTrbDCVIV4E_egIcIgoAruKoVKKhElyMaC14V7tP8JWvv8oKqyl3-c7CfiEi/s320/2013-10-01+01_21_02-Fals.NewsAspMvc5+(Running)+-+Microsoft+Visual+Studio.png&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Wizard para seleção de item de Scaffold&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;A próxima tela é bem parecida com as antigas, em que adiciona-se nome do arquivo, modelo, etc, sendo mais um rearranjo de layout, como por exemplo a tela de &lt;b&gt;Views &lt;/b&gt;da figura seguinte.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirb0_Z7jE0yy-_lyd7iHSI037R_B9gJJji00vRUHEDE7q-0V14zd7qSAQMfbZrvD294rs89Oxh_Ovrzc8wd78rHSisyikO5_1VzmopN0YmjYteZc5FFoesxruRFswvcbEh-GaaVu92pMIO/s1600/2013-10-01+01_25_12-Fals.NewsAspMvc5+(Running)+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;237&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirb0_Z7jE0yy-_lyd7iHSI037R_B9gJJji00vRUHEDE7q-0V14zd7qSAQMfbZrvD294rs89Oxh_Ovrzc8wd78rHSisyikO5_1VzmopN0YmjYteZc5FFoesxruRFswvcbEh-GaaVu92pMIO/s320/2013-10-01+01_25_12-Fals.NewsAspMvc5+(Running)+-+Microsoft+Visual+Studio.png&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Wizard criação de View&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O &lt;b&gt;CSS&lt;/b&gt; padrão agora é o &lt;a href=&quot;http://getbootstrap.com/2.3.2/&quot;&gt;&lt;b&gt;Bootstrap&lt;/b&gt;&lt;/a&gt;. Uma coisa que achei estranha é que a versão do &lt;b&gt;Bootstrap &lt;/b&gt;que vem com o template ser a &lt;b&gt;&lt;i&gt;2.3.1&lt;/i&gt;&lt;/b&gt;, sendo que a de mercado já é a &lt;b&gt;&lt;i&gt;3.0.0&lt;/i&gt;&lt;/b&gt;. Dado que estamos em RC, acho provável que a nova &amp;nbsp;seja adicionada ao MVC 5 Final- pelo menos espero que sim :).&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1G6FWvwBkxFrj1xcwcNEVuoJLvBWqBtQMWulawJh6r3qNQ45PHABeZ1MoSb8G3_oXv9vdakggjnMs8IzfTwEf3wrOgZiooMGBMYoYBKnjWDkeQ3SYIVE8uJL3zSPhUMB2oJRY8YgqO0q5/s1600/2013-10-01+01_15_29-Home+Page+-+News+ASP.NET+MVC+5+-+Internet+Explorer.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;156&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1G6FWvwBkxFrj1xcwcNEVuoJLvBWqBtQMWulawJh6r3qNQ45PHABeZ1MoSb8G3_oXv9vdakggjnMs8IzfTwEf3wrOgZiooMGBMYoYBKnjWDkeQ3SYIVE8uJL3zSPhUMB2oJRY8YgqO0q5/s320/2013-10-01+01_15_29-Home+Page+-+News+ASP.NET+MVC+5+-+Internet+Explorer.png&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;CSS padrão agora é Bootstrap&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Outra coisa importante é que os templates para &lt;b&gt;Scaffold &lt;/b&gt;de &lt;b&gt;View &lt;/b&gt;criam essas com layout todo baseado no &lt;b&gt;Bootstrap&lt;/b&gt;, ficou muito bom!&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Segurança com Claims&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;A segurança para o seu aplicativo agora pode ser ampliada usando &lt;b&gt;Claims&lt;/b&gt;. Com isso é possível criar várias formas de autenticação, como os próprios profissionais do &lt;b&gt;ASP.NET Team &lt;/b&gt;comentam, &lt;i&gt;&quot;.. é possível criar um Framework de autorização dirigido a qualquer coisa que você saiba que está associado a identidade de uma requisição que estiver sendo efetuada...&quot;&lt;/i&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;A maior mudança está no arquivo &lt;b&gt;AccountController.cs&lt;/b&gt;, como por exemplo, o método de login abaixo, que agora busca &lt;b&gt;IdentityResult&lt;/b&gt;, em vez de usuários diretamente como no MVC 4:&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task&lt;actionresult&gt; Login(LoginViewModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        // Validate the password
        IdentityResult result = await IdentityManager.Authentication.CheckPasswordAndSignInAsync(AuthenticationManager, model.UserName, model.Password, model.RememberMe);
        if (result.Success)
        {
            return RedirectToLocal(returnUrl);
        }
        else
        {
            AddErrors(result);
        }
    }

    // If we got this far, something failed, redisplay form
    return View(model);
}
&lt;/actionresult&gt;&lt;/pre&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;actionresult&gt;Para saber mais sobre essa novidade sugiro os artigos abaixo:&lt;/actionresult&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://visualstudiomagazine.com/articles/2013/08/01/leveraging-claims-based-security-in-aspnet-45.aspx&quot;&gt;Leveraging Claims-Based Security in ASP.NET 4.5&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://visualstudiomagazine.com/articles/2013/09/01/going-beyond-usernames-and-roles.aspx&quot;&gt;Going Beyond Usernames and Roles with Claims-Based Security in .NET&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;ul&gt;&lt;/ul&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;OWIN&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O OWIN&amp;nbsp;&lt;b&gt;&lt;a href=&quot;http://owin.org/&quot;&gt;Open Web Interface for .NET (OWIN)&lt;/a&gt;&lt;/b&gt;&amp;nbsp;é uma camada intermediária que separa a sua aplicação do Web Server. Com isto é possível migrar facilmente um aplicativo do &lt;b&gt;IIS&lt;/b&gt; para um serviço Windows, por exemplo.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Você notará dois novos arquivos na soluçao, ambos com o prefixo &lt;b&gt;Startup&lt;/b&gt;. Estes são os arquivos de configura&lt;/span&gt;ção do &lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;OWIN&lt;/span&gt;&lt;/b&gt;.&lt;/div&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbphr_prwfT4BOLMb_exn16QZvS5DPW5rU-IYhxiMhR8r3Q_RlEFE8xvL0KgEPp6h-6yyHWQJQ7Wt5LO76lMC9huRefdeiUi_LMrhL_diwaCCsOE_qdqjP_E8ICweFsH78zplMPtOgz4vE/s1600/2013-10-01+00_58_26-Fals.NewsAspMvc5+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgbphr_prwfT4BOLMb_exn16QZvS5DPW5rU-IYhxiMhR8r3Q_RlEFE8xvL0KgEPp6h-6yyHWQJQ7Wt5LO76lMC9huRefdeiUi_LMrhL_diwaCCsOE_qdqjP_E8ICweFsH78zplMPtOgz4vE/s320/2013-10-01+00_58_26-Fals.NewsAspMvc5+-+Microsoft+Visual+Studio.png&quot; width=&quot;182&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Arquivos de configuração do OWIN&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;actionresult&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Para saber mais sobre o &lt;b&gt;OWIN&lt;/b&gt;:&lt;/span&gt;&lt;/actionresult&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://www.asp.net/aspnet/overview/owin-and-katana/getting-started-with-owin-and-katana&quot;&gt;Getting Started with OWIN and Katana&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Entity Framework 6&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O &lt;b&gt;Entity Framework&lt;/b&gt; vem em uma nova versão com várias novidades, principalmente melhoria de performace e novos recursos na parte de &lt;b&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/data/jj591621.aspx&quot;&gt;Migrations&lt;/a&gt;&amp;nbsp;&lt;/b&gt;- acho excelente esse recurso. No projeto em si a única mudança visível é adição de uma classe &lt;b&gt;IdentityModels.cs&lt;/b&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O Entity traz agora um contexto próprio para tratar as classes personalizadas de usuário que serão usadas com o &lt;b&gt;Claims Security:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp&quot;&gt;public class ApplicationUser : User
{  
}

public class ApplicationDbContext : IdentityDbContextWithCustomUser&lt;applicationuser&gt;
{
}
&lt;/applicationuser&gt;&lt;/pre&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;actionresult&gt;Para saber mais sobre o&amp;nbsp;Entity Framework 6:&lt;/actionresult&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://ferhenriquef.com/2013/08/25/entity-framework-6-rc/&quot;&gt;Entity Framework 6 RC&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;No próximo post vou cobrir mais a fundo as novidades para &lt;b&gt;Web API 2&lt;/b&gt;. Espero que tenham gostado! Boa semana para todos!&lt;/span&gt;&lt;/div&gt;
</description><link>http://codingfirst.blogspot.com/2013/09/aspnet-mvc-novidades-no-aspnet-mvc-5.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhv3-SaQhs9TXziO5BKP5xth2NT1BC17FiMwA8SQyjGwWVyCpgORzYWRGwO74feX2dYAedOGMyUn9KmJMf-IYeghUty8ZJZ6DYL5ETrVWIpZAHAmipp_hoAUUnMq92WILdBQExc5_MNWX4N/s72-c/2013-10-01+00_54_52-Microsoft+Visual+Studio.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1104298155886631006.post-3291138563311282555</guid><pubDate>Sun, 15 Sep 2013 17:53:00 +0000</pubDate><atom:updated>2013-09-15T13:02:05.373-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">Bootstrap</category><category domain="http://www.blogger.com/atom/ns#">JQuery</category><category domain="http://www.blogger.com/atom/ns#">JQuery Mobile</category><category domain="http://www.blogger.com/atom/ns#">MVC</category><title>ASP.NET MVC - Web para grandes e pequenos: Part III - Ferramentas de Teste</title><description>&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Desenvolvendo aplicações PC +&amp;nbsp;Mobile&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://codingfirst.blogspot.com.br/2013/09/aspnet-mvc-web-para-grandes-e-pequenos.html&quot;&gt;Part I - Introdução&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://codingfirst.blogspot.com.br/2013/09/aspnet-mvc-web-para-grandes-e-pequenos_5.html&quot;&gt;Part II - Suportando PCs, Celulares e Tablets&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;Part III -&amp;nbsp;Ferramentas de Teste&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;Acessando a máquina de Desenvolvimento&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Nada mais útil que liberar o&amp;nbsp;&lt;b&gt;IIS Express&lt;/b&gt; da sua máquina para acesso externo. Assim, não é necessário que você publique a aplicação toda vez que queira testar diretamente nos dispositivos mobile.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Para isso basta fazer o seguinte:&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Abra o arquivo de configuração do&lt;b&gt; IIS Express &lt;/b&gt;que está em&amp;nbsp;&lt;i&gt;C:\Users\[Nome do usuário]\Documents\IISExpress\config\applicationhost.config&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Neste arquivo procure pelo nome da aplicação e no &lt;b&gt;binds&lt;/b&gt; adicione o ip da sua máquina . A configuração do meu está assim:&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;lt;binding protocol=&quot;http&quot; bindingInformation=&quot;:[porta]:[ip] /&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNTtFo6H3vTXyUHWoF50IqrxHC1hNU0-pkVADHjHMkcvt4ZTfxlL3Zqei4Nhz2XYg30dK4rySop7yyJiwLX2bfRkcvGjEmM6LDnUxLnWbUgUPX44eFJunNHNnso10K2LdSPxmi0Z2Ry3xM/s1600/2013-09-15+14_22_08-Fals.AspMvcMobile+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;51&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNTtFo6H3vTXyUHWoF50IqrxHC1hNU0-pkVADHjHMkcvt4ZTfxlL3Zqei4Nhz2XYg30dK4rySop7yyJiwLX2bfRkcvGjEmM6LDnUxLnWbUgUPX44eFJunNHNnso10K2LdSPxmi0Z2Ry3xM/s320/2013-09-15+14_22_08-Fals.AspMvcMobile+-+Microsoft+Visual+Studio+(Administrator).png&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;IIS Express - Exemplo de applicationhost.config&amp;nbsp;&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Agora é necessário reservar o seu endereço no windows, para isso execute o comando no CMD como administrador:&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;netsh http add urlacl url=http://[ip]:[porta]/ user=everyone&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Além disso, se você estiver rodando algum firewall de terceiro ou o próprio firewall do Windows é necessário liberar esta porta para acesso externo, logo siga o link abaixo da própria Microsoft, e em caso de outros firewalls procure no site do fabricante.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;&lt;a href=&quot;http://windows.microsoft.com/pt-br/windows7/open-a-port-in-windows-firewall&quot;&gt;Abrir uma porta no Firewall do&amp;nbsp;&lt;span class=&quot;notLocalizable&quot;&gt;Windows&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;Plugins para Browser&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Esse método é o mais simples e ajuda a filtrar a maioria dos erros que podem ser encontrados em &lt;b&gt;JavaScript &lt;/b&gt;e &lt;b&gt;CSS&lt;/b&gt;, dado que você terá acesso à consoles poderosos como o do Chrome para avaliar seu aplicativo.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Existem uma gama de extensões para isso, eu particularmente gosto mais do&lt;b&gt; &lt;/b&gt;&lt;span style=&quot;color: #555555;&quot;&gt;&lt;b&gt;Mobile/RWD Tester&lt;/b&gt;, que é simples e capaz de simular os dispositivos mais variados.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #555555; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #555555; font-family: Arial, Helvetica, sans-serif;&quot;&gt;No Google Chrome faça o seguinte:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555; font-family: Arial, Helvetica, sans-serif;&quot;&gt;Configurações-&amp;gt;Extensões-&amp;gt;Obter Extenções&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Na caixa de busca digite&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;Mobile/RWD Tester&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #555555; font-family: Arial, Helvetica, sans-serif;&quot;&gt;Clique no registro de mesmo nome e adicione ao Chrome&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Arial, Helvetica, sans-serif;&quot;&gt;Aparecerá um ícone perto da barra de endereços, em que é possível selecionar vários dispositivos, inclusive a orientação deste:&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #555555; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsxqp5Cv-88Zjf2_bWHGyw_9aRwskJxX33GspYxUnYGqmgJEx73Sy8mtCeIkwE_WFWFXp5IYTVg9aNXxs9E_cKxoG_qmDMJs-o7MLcnRPLXxRbR99RSeeRY9YS9-hXiBrmDsgZbIAF9RVi/s1600/2013-09-15+11_57_48-Home+Page+-+My+ASP.NET+MVC+Application.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsxqp5Cv-88Zjf2_bWHGyw_9aRwskJxX33GspYxUnYGqmgJEx73Sy8mtCeIkwE_WFWFXp5IYTVg9aNXxs9E_cKxoG_qmDMJs-o7MLcnRPLXxRbR99RSeeRY9YS9-hXiBrmDsgZbIAF9RVi/s320/2013-09-15+11_57_48-Home+Page+-+My+ASP.NET+MVC+Application.png&quot; width=&quot;255&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Mobile/RWD Teste no Chrome&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;span style=&quot;color: #555555; font-family: Arial, Helvetica, sans-serif;&quot;&gt;Basta selecionar o dispositivo que ele abrirá no tamanho compatível com este.&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgJyDuf6u2_JxpgRKwenwZ6iv98G2dLOp6CQebNre_1rAQqRzkoYM9zq1tveDaZESK6kgDGXa7q_aCdqeGgoXSIYrgAycgxflDLefQ7JlMQemlk0Wi6sc_uv3k9R9k85Zmk8yumCRNAV4q/s1600/2013-09-15+12_02_38-Home+Page+-+My+ASP.NET+MVC+Application.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;252&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjgJyDuf6u2_JxpgRKwenwZ6iv98G2dLOp6CQebNre_1rAQqRzkoYM9zq1tveDaZESK6kgDGXa7q_aCdqeGgoXSIYrgAycgxflDLefQ7JlMQemlk0Wi6sc_uv3k9R9k85Zmk8yumCRNAV4q/s320/2013-09-15+12_02_38-Home+Page+-+My+ASP.NET+MVC+Application.png&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Iphone5 Selecionado&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;span style=&quot;color: #555555; font-family: Arial, Helvetica, sans-serif;&quot;&gt;A mágica desta extensão está no &lt;b&gt;User-Agent.&lt;/b&gt; Ele injeta no cabeçalho da requisição um &lt;b&gt;User-Agent&lt;/b&gt; igual ao do Iphone 5, logo nossa aplicação vai retornar a &lt;b&gt;View &lt;/b&gt;certa para o browser, que além disso vai apresentar a dimensão do aparelho.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;color: #555555; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Arial, Helvetica, sans-serif;&quot;&gt;Este teste não deve ser o único meio de testar, dado que apenas simulamos a tela e não temos acesso ao touch do dispositivo, por exemplo, que deve ser feito para verificar a usabilidade.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Arial, Helvetica, sans-serif;&quot;&gt;Além disso, o browser é de um PC, isso não garante nada o funcionamento total no browser mobile.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;color: #555555; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;Virtual Machines&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;É necessário renderizar a página nos mais variados browsers mobiles, para que seja garantido que tudo funcionará. Se você não tem todos os dispositivos a mão para testar em um por um, máquinas virtuais resolvem o problema.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Existe um serviço online chamado&amp;nbsp;&lt;a href=&quot;http://www.browserstack.com/%E2%80%8E&quot;&gt;Browserstack&lt;/a&gt;. É pago, mas indispensável para garantir qualidade, que é o foco para um produto de sucesso. Há uma conta gratuita &lt;b&gt;trial&lt;/b&gt; que permite 28 minutos de teste.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Para instalar:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;No Visual Studio vá em Tools-&amp;gt;Extensions and Updates&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Selecione Online e digite Browserstack na caixa de pesquisa&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Instale a extensão e Reinicie Visual Studio&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC3TVfybIm-_wMfHEhf9n5F8k_T7VpaJ6QPWjh6OGustZwVfJjkqbYT6rgejFXY4H43FYbZWO4NDq3HnfA5FuX5b9pwBdu20-Ttx-9Zlv350zVls9o8b3NXnrRMeKQgRjEAb1AYor4gD_w/s1600/2013-09-15+12_28_31-Fals.AspMvcMobile+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;195&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgC3TVfybIm-_wMfHEhf9n5F8k_T7VpaJ6QPWjh6OGustZwVfJjkqbYT6rgejFXY4H43FYbZWO4NDq3HnfA5FuX5b9pwBdu20-Ttx-9Zlv350zVls9o8b3NXnrRMeKQgRjEAb1AYor4gD_w/s320/2013-09-15+12_28_31-Fals.AspMvcMobile+-+Microsoft+Visual+Studio.png&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Instalando Browserstack&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Vai ficar disponível na lista que contém os browsers o Browserstack.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIoG2m7eMCNk-wfLusFlAMZhoA6XmoszCcnGCKZAP2jlIMDr2IHWZalbkkVz1OIfcC6-H4eNTX0_ABewe-vYpQ1nm5M7rMjTzULKlBjOtA5YudmODHpRcC65tsJbIyPFRTw6bzGSQN-0sA/s1600/2013-09-15+12_32_11-Fals.AspMvcMobile+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIoG2m7eMCNk-wfLusFlAMZhoA6XmoszCcnGCKZAP2jlIMDr2IHWZalbkkVz1OIfcC6-H4eNTX0_ABewe-vYpQ1nm5M7rMjTzULKlBjOtA5YudmODHpRcC65tsJbIyPFRTw6bzGSQN-0sA/s1600/2013-09-15+12_32_11-Fals.AspMvcMobile+-+Microsoft+Visual+Studio.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Browserstack no Visual Studio&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Iniciando a aplicação com o Browserstack, uma lista com sistema operacional e dispositivos é exibida:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ9ZGTj3kvsS19dWolkhStZHEfxIhHVOe-1tcZ9fNDQUSdvJTjfmUwWY7mumCDuCNg5aZB53n_py4fUShbZl8hXc30cktLbXIL6HFd2Jr1Lvj7P-T31EmHWvTkMNdEZwSbMLW_oxVp1EBJ/s1600/2013-09-15+12_35_29-Fals.AspMvcMobile+(Running)+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;233&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiZ9ZGTj3kvsS19dWolkhStZHEfxIhHVOe-1tcZ9fNDQUSdvJTjfmUwWY7mumCDuCNg5aZB53n_py4fUShbZl8hXc30cktLbXIL6HFd2Jr1Lvj7P-T31EmHWvTkMNdEZwSbMLW_oxVp1EBJ/s320/2013-09-15+12_35_29-Fals.AspMvcMobile+(Running)+-+Microsoft+Visual+Studio.png&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Browserstack Lista de dispositivos&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O browser padrão é aberto diretamente no site do Browserstack. Suas credenciais de loging serão exigidas. Após autenticar uma máquina virtual é disponibilizada exatamente com o dispositivo que você escolheu.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsd66rnZCO2Im59Zhyjr8HPUmbAPJ8YSfyHVEyUYRfPISMJM4Rv8NxL9waRallFB-dLsoPJEtGkvFfzzRkMCoZj3O5pD85tf_4pfUwt14jWXbDdvuDJGDPZl1-OaGUjtWKaAai2-pTzNLO/s1600/2013-09-15+12_37_58-Dashboard.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;170&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsd66rnZCO2Im59Zhyjr8HPUmbAPJ8YSfyHVEyUYRfPISMJM4Rv8NxL9waRallFB-dLsoPJEtGkvFfzzRkMCoZj3O5pD85tf_4pfUwt14jWXbDdvuDJGDPZl1-OaGUjtWKaAai2-pTzNLO/s320/2013-09-15+12_37_58-Dashboard.png&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Browserstack - Galaxy SIII&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Outra possibilidade seria instalar várias máquinas virtuais, Android e Apple em seu pc e usá-las, mas isso foge um pouco do nosso contexto, então, &quot;google it&quot;. (Dica: A do Windows Phone 7/8 já fica disponível quando instalamos a &lt;a href=&quot;https://dev.windowsphone.com/en-us/downloadsdk&quot;&gt;WIndows Phone SDK&lt;/a&gt;&amp;nbsp;:D)&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;Fiddler&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O &lt;a href=&quot;http://fiddler2.com/get-fiddler&quot;&gt;&lt;b&gt;Feddler&lt;/b&gt; &lt;/a&gt;é um fantástico Web Debugger feito pela &lt;b&gt;Telerik &lt;/b&gt;e disponibilizado gratuitamente. Com ele podemos escutar as requisições &lt;b&gt;HTTP&lt;/b&gt; e saber se algo está dando errado. É muito útil quando estamos testando nossa aplicação na máquina de desenvolvimento ou produção.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O que você deve fazer então é configurá-lo como &lt;b&gt;proxy &lt;/b&gt;em sua máquina e então colocar o dispositivo mobile na mesma rede apontando para este &lt;b&gt;proxy&lt;/b&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Para configurar o &lt;b&gt;Feddler &lt;/b&gt;para ser um proxy:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Abra o &lt;b&gt;Feddler &lt;/b&gt;vá em Tools-&amp;gt;Feddler Options&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Selecione a aba Connections&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Coloque a porta, a padrão do &lt;b&gt;Feddler &lt;/b&gt;é a 8888, e marque a opção &lt;i&gt;Allow remote computers to connect&lt;/i&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8TfW08bfCysoRTrJgzK3qzN2ysljELt4P-nTPhN9gCVtLW9cclWm-U9ggFu90qoyfC6neHK1GV0mjoLMlrqkO8LcuX25Ng-jg_31kPQWkU7RXGSJHsSZbAdh2quMagM3lRDecCv6IaUcm/s1600/2013-09-15+12_52_22-Fiddler+Options.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;215&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh8TfW08bfCysoRTrJgzK3qzN2ysljELt4P-nTPhN9gCVtLW9cclWm-U9ggFu90qoyfC6neHK1GV0mjoLMlrqkO8LcuX25Ng-jg_31kPQWkU7RXGSJHsSZbAdh2quMagM3lRDecCv6IaUcm/s320/2013-09-15+12_52_22-Fiddler+Options.png&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: small;&quot;&gt;Feddler - Configuração como Proxy&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Você deve configurar&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;seu smartphone/tablet com o IP da máquina em que está o &lt;b&gt;Feddle &lt;/b&gt;e a porta na conexão. Eu não vou abordar isso aqui porque cada dispositivo tem uma forma de configuração diferente, consulte a do seu.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O que você ganha com isso? Um sistema para mobile para ser eficiente terá várias chamadas Ajax. Digamos que você vai testar diretamente o aplicativo em um smartphone, por exemplo. Se algo estiver dando errado é possível ver se há requisições, quais foram as respostas e atuar para solucionar o problema.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Final&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Espero que tenham gostado da série. O mundo hoje é mobile. Saber zilhões de frameworks para plataformas específicas não é o caminho. Escrever para web é HTML5, CSS3 e JavaScript, aplicação em cloud e não um aplicativo para plataforma X. Como o próprio &lt;a href=&quot;http://www.openwebplatform.com.br/&quot;&gt;Fernando Martin Figueira da Microsoft&lt;/a&gt; falou:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; color: #222222; line-height: 23px; text-align: right;&quot;&gt;“Muitas vezes vejo programadores dividirem-se nos segmentos web,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; box-sizing: border-box; color: #222222; line-height: 23px; text-align: right;&quot;&gt;mobile&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #222222; line-height: 23px; text-align: right;&quot;&gt;&amp;nbsp;e&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: white; box-sizing: border-box; color: #222222; line-height: 23px; text-align: right;&quot;&gt;cloud computing&lt;/span&gt;&lt;span style=&quot;background-color: white; color: #222222; line-height: 23px; text-align: right;&quot;&gt;, enquanto as novas plataformas de desenvolvimento se esforçam para fazer justamente o oposto, oferecendo uma experiência&amp;nbsp;integrada e uma plataforma que não exija conhecimento específico. “&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
</description><link>http://codingfirst.blogspot.com/2013/09/aspnet-mvc-web-para-grandes-e-pequenos_15.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNTtFo6H3vTXyUHWoF50IqrxHC1hNU0-pkVADHjHMkcvt4ZTfxlL3Zqei4Nhz2XYg30dK4rySop7yyJiwLX2bfRkcvGjEmM6LDnUxLnWbUgUPX44eFJunNHNnso10K2LdSPxmi0Z2Ry3xM/s72-c/2013-09-15+14_22_08-Fals.AspMvcMobile+-+Microsoft+Visual+Studio+(Administrator).png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1104298155886631006.post-6060019225296470224</guid><pubDate>Fri, 06 Sep 2013 01:16:00 +0000</pubDate><atom:updated>2013-09-15T10:53:44.332-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">Bootstrap</category><category domain="http://www.blogger.com/atom/ns#">JQuery</category><category domain="http://www.blogger.com/atom/ns#">JQuery Mobile</category><category domain="http://www.blogger.com/atom/ns#">MVC</category><title>ASP.NET MVC - Web para grandes e pequenos: Part II - Suportando PCs, Celulares e Tablets</title><description>&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Desenvolvendo aplicações PC +&amp;nbsp;Mobile&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://codingfirst.blogspot.com.br/2013/09/aspnet-mvc-web-para-grandes-e-pequenos.html&quot;&gt;Part I - Introdução&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;Part II - Suportando PCs, Celulares e Tablets&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://codingfirst.blogspot.com.br/2013/09/aspnet-mvc-web-para-grandes-e-pequenos_15.html&quot;&gt;Part III -&amp;nbsp;Ferramentas de Teste&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;BundleConfig para Mobile&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Dado que aplicativo será dividido em dois mundos, nada mais justo que separar as configurações. O &lt;a href=&quot;http://www.asp.net/mvc/tutorials/mvc-4/bundling-and-minification&quot;&gt;BundleConfig&lt;/a&gt;&amp;nbsp;já vem como padrão no projeto &lt;b&gt;ASP.NET MVC&lt;/b&gt;. Neste concentram-se os &lt;b&gt;CSS&lt;/b&gt; e &lt;b&gt;JavaScripts &lt;/b&gt;para que sejam enviados para o browser em blocos, reduzindo o número de requisições e também o tamanho. O André Paulovich, MVP em ASP.NET fez um post detalhado sobre &lt;a href=&quot;http://www.100loop.com/destaque/tecnicas-de-bundling-em-asp-net/&quot;&gt;Técnicas de Bundling em ASP.NET&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvGgApdrmqK1NoZ2gLxsfH73tV_z00rIhE4ly3daTKzQSATFmHQS5Ugda0dyqOfTlEHVcjYhQ7tmLvhO2iMEpPk7udCmrqaL58VT5RJ6XD679wFo2-srNTCct8HBSeZwFA3tFJajU1ACBn/s1600/2013-09-05+20_42_36-Fals.AspMvcMobile+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvGgApdrmqK1NoZ2gLxsfH73tV_z00rIhE4ly3daTKzQSATFmHQS5Ugda0dyqOfTlEHVcjYhQ7tmLvhO2iMEpPk7udCmrqaL58VT5RJ6XD679wFo2-srNTCct8HBSeZwFA3tFJajU1ACBn/s640/2013-09-05+20_42_36-Fals.AspMvcMobile+-+Microsoft+Visual+Studio.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;App_Start\BundleConfigMobile.cs&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Perceba que os arquivos que escolhi são os &quot;&lt;b&gt;.min&quot;&lt;/b&gt;. Estes já são a versão minimizada, muito menos Kbytes que os originais. Ideal para mobile, menos consumo de banda.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Em verde está uma chamada importante. Por padrão o &lt;b&gt;BundleCollection&lt;/b&gt; está configurado para ignorar esses arquivos, você tem que limpar a &lt;b&gt;IgnoreList &lt;/b&gt;ou eles serão descartados.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;DisplayModeProvider e User-Agent&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Para que sua aplicação consiga identificar qual &lt;b&gt;View&lt;/b&gt; renderizar quando é feita uma requisição é usado o &lt;a href=&quot;http://en.wikipedia.org/wiki/User_agent&quot;&gt;&lt;b&gt;User-Agent&lt;/b&gt;&lt;/a&gt;, que carrega no cabeçalho &lt;b&gt;HTTP &lt;/b&gt;uma série de informações como OS, nome do browser, engine do browser, dentre outras informações sobre o dispositivo que está acessando o site.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj611viYmvnOePBWfi8chOcEioRNl1puaJNtmJPLVLQAQxud4bjQSqNnZkSQYx4G_JIDUhAYFspfEl1RZYwyKEDiACSD-dBu-9t5cXuaidId_KoPicL9uqFImou4XZ496EcEM8P_PIifGbw/s1600/2013-09-05+21_02_19-Home+Page+-+My+ASP.NET+MVC+Application.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;147&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj611viYmvnOePBWfi8chOcEioRNl1puaJNtmJPLVLQAQxud4bjQSqNnZkSQYx4G_JIDUhAYFspfEl1RZYwyKEDiACSD-dBu-9t5cXuaidId_KoPicL9uqFImou4XZ496EcEM8P_PIifGbw/s640/2013-09-05+21_02_19-Home+Page+-+My+ASP.NET+MVC+Application.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Exemplo de Requisição e User-Agent&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Usando &lt;b&gt;User-Agent&lt;/b&gt; é possível criar&amp;nbsp;&lt;b&gt;DefaultDisplayMode&lt;/b&gt;, que falam qual será a View que a &lt;b&gt;&lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.web.mvc.razorviewengine(v=vs.108).aspx&quot;&gt;View Engine&lt;/a&gt;&lt;/b&gt; deve enviar de volta para o usuário.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Então, crie um&amp;nbsp;&lt;b&gt;DisplayModeProviderConfig &lt;/b&gt;na pasta &lt;b&gt;App_Start&lt;/b&gt; que encapsulará essa lógica.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwKjPrlT1zU2Oakts3FHHkNbcBwwoMdHxknf-XqEPxnJwwUHfArtHUpujxRpHDyjDJY37DCzdRYQKDFigJHFPbCu7Cvlaiz8UQN01O-UYLSMq8ZvF4_gspGfbivpe4JtGZ64FcyX7drZft/s1600/2013-09-05+21_08_25-Fals.AspMvcMobile+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;342&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwKjPrlT1zU2Oakts3FHHkNbcBwwoMdHxknf-XqEPxnJwwUHfArtHUpujxRpHDyjDJY37DCzdRYQKDFigJHFPbCu7Cvlaiz8UQN01O-UYLSMq8ZvF4_gspGfbivpe4JtGZ64FcyX7drZft/s640/2013-09-05+21_08_25-Fals.AspMvcMobile+-+Microsoft+Visual+Studio.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;App_Start\DisplayModeProviderConfig.cs&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O&amp;nbsp;&lt;b&gt;DefaultDisplayMode &lt;/b&gt;recebe como parâmetro uma &lt;b&gt;string&lt;/b&gt;. Esta &lt;b&gt;string &lt;/b&gt;será injetada pela &lt;b&gt;View Engine&lt;/b&gt; no caminho dos arquivos, logo, se você acessar por smartphone o Index, ele procurará por Index.Phone.cshtml nas pastas das Views e se encontrar retornará esta para ser renderizada e enviada como resposta para o browser do usuário.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O processo bem simplificado do ciclo está representado abaixo:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRmdOd15BMUBQMVBBv3znnfRYNk5ZLgLw8ts0KzYg4i-JadmjzcUdPbsCrrfnvm2doz64Oxk0JqOZ0ggDVujTXIzNsrSKpXyJwrMdyumCGrKusIc4nEDIfFv1PIlKR0nZ-gxtIBejGEMYb/s1600/Untitled+Page.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;201&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhRmdOd15BMUBQMVBBv3znnfRYNk5ZLgLw8ts0KzYg4i-JadmjzcUdPbsCrrfnvm2doz64Oxk0JqOZ0ggDVujTXIzNsrSKpXyJwrMdyumCGrKusIc4nEDIfFv1PIlKR0nZ-gxtIBejGEMYb/s400/Untitled+Page.png&quot; width=&quot;400&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O &lt;b&gt;ContextCondition &lt;/b&gt;aceita valor do tipo &lt;b&gt;bool&lt;/b&gt;. A função &lt;b&gt;GetDeviceType &lt;/b&gt;procura no &lt;b&gt;User-Agent&lt;/b&gt;&amp;nbsp;da requisição e retorna se é phone, tablet ou desktop quem está fazendo o acesso. Colocando &lt;b&gt;ContextCondition = true&lt;/b&gt; fará com que este&amp;nbsp;&lt;b&gt;DefaultDisplayMode &lt;/b&gt;deva ser escolhido.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7mfoPoDBFn59EssjQUjcWQA0ZDr6FwFpMX-eMrElEkMMK0-UohQNB37u0if4Z0fqeQ772I_EsC75KSd6kqo81iqBfALae4X3-cCinHgAoKbuNy8KIAHqTtFh-IFKS5lMwTwie9rdJJ22f/s1600/2013-09-05+21_20_46-Fals.AspMvcMobile+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;232&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7mfoPoDBFn59EssjQUjcWQA0ZDr6FwFpMX-eMrElEkMMK0-UohQNB37u0if4Z0fqeQ772I_EsC75KSd6kqo81iqBfALae4X3-cCinHgAoKbuNy8KIAHqTtFh-IFKS5lMwTwie9rdJJ22f/s640/2013-09-05+21_20_46-Fals.AspMvcMobile+-+Microsoft+Visual+Studio.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Existem várias listas na internet com&lt;b&gt; User-Agente&lt;/b&gt;, veja por exemplo a string iphone, que é enviada na requisição sinalizando acesso pelo aparelho da apple. A lista é bem extensa, cobri apenas nesse exemplo os dispositivos mais usados.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Layout e Views&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Agora que já empacotou o&amp;nbsp;&lt;b&gt;JavaScript +&amp;nbsp;CSS&lt;/b&gt;, já sabe como identificar qual o dispositivo está acessando e o como fazer o ASP.NET escolher a View certa, faltam as próprias Views.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuVVleHsi2wefpmZVjw-kV-jkWnc57aQCy7gvRsL6LDQZ-QT7ruv0YqqlRTPDjrufmS72td7pJvfxU22K75X-mJtJIUSOun0stnl3yNqVRDAxd0otZgkx4BsEgAHjE_MmJwwZHCQ7xp5qx/s1600/2013-09-04+22_17_27-Fals.AspMvcMobile+%2528Running%2529+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuVVleHsi2wefpmZVjw-kV-jkWnc57aQCy7gvRsL6LDQZ-QT7ruv0YqqlRTPDjrufmS72td7pJvfxU22K75X-mJtJIUSOun0stnl3yNqVRDAxd0otZgkx4BsEgAHjE_MmJwwZHCQ7xp5qx/s1600/2013-09-04+22_17_27-Fals.AspMvcMobile+%2528Running%2529+-+Microsoft+Visual+Studio.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Estrutura com os arquivos por tipo de dispositivo&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Como havia dito antes, o nome que passamos como parâmetro no&amp;nbsp;&lt;b&gt;DefaultDisplayMode &lt;/b&gt;é o complemento que você deve colocar no nome de suas Views. Logo, se você passou &lt;i&gt;&lt;b&gt;Phone&lt;/b&gt;&lt;/i&gt;, todos seus arquivos para Smartphone tem que ser desse padrão&lt;b&gt; {Nome}.Phone.cshtml&lt;/b&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Outra mudança importante é no &lt;b&gt;ViewStart&lt;/b&gt;, em que você deve adicionar condicionais para que o &lt;b&gt;Layout &lt;/b&gt;correto seja passado, assim não é preciso incluir manualmente em cada View específica.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip_3AWQII_5y1lnp2XHFV_-1P_0wCjcwjFGjGZNYXnO8-BBEgalP6txL6cYFIDErq5519wSQBX-nag2huxCSvk6Km2FEb6z7dEtoq9nt8jSLvswI0rsC7PsQ5gTICwiYJLVlFK_qbQnK06/s1600/2013-09-05+21_29_17-Fals.AspMvcMobile+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;176&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEip_3AWQII_5y1lnp2XHFV_-1P_0wCjcwjFGjGZNYXnO8-BBEgalP6txL6cYFIDErq5519wSQBX-nag2huxCSvk6Km2FEb6z7dEtoq9nt8jSLvswI0rsC7PsQ5gTICwiYJLVlFK_qbQnK06/s640/2013-09-05+21_29_17-Fals.AspMvcMobile+-+Microsoft+Visual+Studio.png&quot; width=&quot;640&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Views\ViewStart.cshtml&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Nas Views Mobile deve ser adicionado o &lt;b&gt;Bundle &lt;/b&gt;correto como abaixo:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz9GuWsUYbymWqVJeBaeJio1_8u3A7LQglt_XBdaRrrTxO3_N3IsCA_9T3bwl80e2helFUhd73GEI3JHZ0qfq5jBOCDvIAGz1FxnUWvJpzgB4vqKb7Ow5pCrit69hoVk2re-fwM9oTCIRF/s1600/2013-09-05+21_36_06-Fals.AspMvcMobile+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhz9GuWsUYbymWqVJeBaeJio1_8u3A7LQglt_XBdaRrrTxO3_N3IsCA_9T3bwl80e2helFUhd73GEI3JHZ0qfq5jBOCDvIAGz1FxnUWvJpzgB4vqKb7Ow5pCrit69hoVk2re-fwM9oTCIRF/s1600/2013-09-05+21_36_06-Fals.AspMvcMobile+-+Microsoft+Visual+Studio.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Views\Layout.Phone.cshtml&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Adicionando Configs ao Global.asax&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Para finalizar essa parte, é necessário adicionar nossas novas configurações ao&lt;b&gt; Global.asax&lt;/b&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiedebNFq2Yz68X1HSDwOysVwIOYaoseks5Kh68WWaV65rox41otFyd33R_k-yrp4PU7W08xqo1lQ7eScmTGgysqspUKRpsCBAxptg_4dkcTdAlKPXajsv1Pa_l1mE3hDZOkt5QrM6gpHej/s1600/2013-09-05+21_39_47-Fals.AspMvcMobile+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiedebNFq2Yz68X1HSDwOysVwIOYaoseks5Kh68WWaV65rox41otFyd33R_k-yrp4PU7W08xqo1lQ7eScmTGgysqspUKRpsCBAxptg_4dkcTdAlKPXajsv1Pa_l1mE3hDZOkt5QrM6gpHej/s1600/2013-09-05+21_39_47-Fals.AspMvcMobile+-+Microsoft+Visual+Studio.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Global.asax&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;No próximo post o foco vai ser em ferramentas para testar sua aplicação. Fiquem ligados =D.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Eu desenvolvi uma espécie de Projeto Jump Start, que ainda está incompleto, mas já contém todo isso que falei até agora. Ele está no GitHub, usem e abusem =D.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;
&lt;/span&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Link do GitHub:&amp;nbsp;&lt;a href=&quot;https://github.com/fals/AspMvcMobileTemplate&quot;&gt;AspMvcMobileTemplate&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</description><link>http://codingfirst.blogspot.com/2013/09/aspnet-mvc-web-para-grandes-e-pequenos_5.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvGgApdrmqK1NoZ2gLxsfH73tV_z00rIhE4ly3daTKzQSATFmHQS5Ugda0dyqOfTlEHVcjYhQ7tmLvhO2iMEpPk7udCmrqaL58VT5RJ6XD679wFo2-srNTCct8HBSeZwFA3tFJajU1ACBn/s72-c/2013-09-05+20_42_36-Fals.AspMvcMobile+-+Microsoft+Visual+Studio.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1104298155886631006.post-4204137282446879</guid><pubDate>Thu, 05 Sep 2013 02:47:00 +0000</pubDate><atom:updated>2014-01-10T03:27:13.802-08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">Bootstrap</category><category domain="http://www.blogger.com/atom/ns#">JQuery</category><category domain="http://www.blogger.com/atom/ns#">JQuery Mobile</category><category domain="http://www.blogger.com/atom/ns#">MVC</category><title>ASP.NET MVC - Web para grandes e pequenos: Part I - Introdução</title><description>&lt;br /&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Desenvolvendo aplicações PC +&amp;nbsp;Mobile&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;Part I - Introdução&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://codingfirst.blogspot.com.br/2013/09/aspnet-mvc-web-para-grandes-e-pequenos_5.html&quot;&gt;Part II - Suportando PCs, Celulares e Tablets&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;a href=&quot;http://codingfirst.blogspot.com.br/2013/09/aspnet-mvc-web-para-grandes-e-pequenos_15.html&quot;&gt;Part III -&amp;nbsp;Ferramentas de Teste&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Introdução&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Cada vez mais se faz necessário desenvolver aplicações que suportem acessos por meio de Smartphones e Tablets. Atualmente, 18% de todo o tráfego de internet é feito por meio de dispositivos móveis, segundo pesquisa realizada pelo site americano&amp;nbsp;&lt;a href=&quot;http://mashable.com/2013/08/20/mobile-web-traffic/&quot;&gt;mashable.com&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Disponibilizar ferramentas gerenciais de BI e relatórios para tomada de decisões tornou-se crucial em um mercado tão competitivo. Além de serviços de e-commerce, informações, etc, para serem acessados de qualquer lugar a qualquer hora.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O ASP.NET MVC provê ferramentas de alto nível e com o que há de mais novo no mercado para criação de aplicações deste tipo.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Nesta série de três artigos, falarei como desenvolver aplicativos que extrapolem o mundo dos PCs, e que proporcionem uma usabilidade incrível para o usuário. Abordarei também técnicas e ferramentas para testar sua aplicação.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Design Responsivo x Design Específico&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O Design Responsivo é feito por meio de &lt;a href=&quot;http://www.w3.org/TR/css3-mediaqueries/&quot;&gt;media queries&lt;/a&gt; e CSS facilitam a vida quando precisamos que nossas aplicações se adaptem a diversos formatos de tela. Porém, nem tudo são flores, porque o CSS somente esconde, redimensiona e reorganiza o layout para caber na tela.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi_xGPEaWtT5ObPfLD8Jjk3g4EVYtqyB0Rn4ToLt7twTUlT3rVkzA1IdEzsc4h15jiQP5FLpkQ9KG_vFSGl39qJU4_9aGB52Hfy-IbHmqOxso8nzRYMBOBiNQ1-K6ClhohEirfIlhw3r-e/s1600/2013-09-04+21_53_30-.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi_xGPEaWtT5ObPfLD8Jjk3g4EVYtqyB0Rn4ToLt7twTUlT3rVkzA1IdEzsc4h15jiQP5FLpkQ9KG_vFSGl39qJU4_9aGB52Hfy-IbHmqOxso8nzRYMBOBiNQ1-K6ClhohEirfIlhw3r-e/s400/2013-09-04+21_53_30-.png&quot; height=&quot;213&quot; width=&quot;400&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Todo o conteúdo HTML vai sempre para o cliente, o que é um problema, dado que na maioria das vezes o acesso por dispositivos móveis é feito por redes de velocidade inferior ao que temos em computadores.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Existem também limitações de recursos de hardware e do próprio browser dos Smartphones e Tablets (compatibilidade dos browsers mobile:&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://mobilehtml5.org/&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;mobilehtml5.org/&lt;/a&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;e&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://jquerymobile.com/gbs/&quot; style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;jquerymobile.com/gbs/&lt;/a&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;).&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Para gastar o mínimo de banda, dar o máximo experiência ao usuário e facilidade de desenvolvimento, o ideal é usar o Design Específico - o que vou focar nessa série de artigos.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyzQTZ9OPi6Xs5bkDbOHOub8lVBeatzmSZUtmICvDO4xSMcXAkos1p85BSUjFWz2WwCcXPUnSkxhuts1F2DaG4s7llOIk7ACGoydEcg_5tEjVFzupm3g-ZdbYFST8TO9fuBcgpGzaGB0ac/s1600/2013-09-04+22_13_19-Log+in+-+My+ASP.NET+MVC+Application.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyzQTZ9OPi6Xs5bkDbOHOub8lVBeatzmSZUtmICvDO4xSMcXAkos1p85BSUjFWz2WwCcXPUnSkxhuts1F2DaG4s7llOIk7ACGoydEcg_5tEjVFzupm3g-ZdbYFST8TO9fuBcgpGzaGB0ac/s400/2013-09-04+22_13_19-Log+in+-+My+ASP.NET+MVC+Application.png&quot; height=&quot;212&quot; width=&quot;400&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Neste caso, cada dispositivo terá seu próprio Layout e Views específicas que se adaptem melhor a tela do alvo, exibindo apenas informações mais prioritárias.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWnvGcn1-35sdb94DY49lXER9qVI1n0C6qT1kPNkJOoP1ots-PgD6zjtn-Vv6hoRdRN7TjhZcFt1PNwCZKwj_yEB7K_Gu3x2rz0iIvjUBNNRSjws9IVyNjzIleYfLW3YH3BS0hoLqgsTjy/s1600/2013-09-04+22_17_27-Fals.AspMvcMobile+(Running)+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWnvGcn1-35sdb94DY49lXER9qVI1n0C6qT1kPNkJOoP1ots-PgD6zjtn-Vv6hoRdRN7TjhZcFt1PNwCZKwj_yEB7K_Gu3x2rz0iIvjUBNNRSjws9IVyNjzIleYfLW3YH3BS0hoLqgsTjy/s1600/2013-09-04+22_17_27-Fals.AspMvcMobile+(Running)+-+Microsoft+Visual+Studio.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Mas, isso também nos traz problemas, porque temos de duplicar código, nesse caso, teremos três Views para cada recurso para o usuário, o que dificulta bastante a manutenção,&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Porém fará um cliente do outro lado da tela muito satisfeito em usar sua aplicação em qualquer lugar.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Resumindo:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;Design Responsivo&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Fácil implementar&lt;a href=&quot;http://socialboards.com/images/right-mark.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; font-family: &#39;Times New Roman&#39;; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://socialboards.com/images/right-mark.png&quot; /&gt;&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Causa uso excessivo de banda&lt;a href=&quot;http://docs.unofficialjmbsupport.com/tgpx/images/remove-small.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://docs.unofficialjmbsupport.com/tgpx/images/remove-small.png&quot; /&gt;&lt;/a&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Fácil de manter&lt;/span&gt;&lt;a href=&quot;http://socialboards.com/images/right-mark.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://socialboards.com/images/right-mark.png&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Experiência moderada de uso&amp;nbsp;para o usuário&lt;/span&gt;&lt;a href=&quot;http://docs.unofficialjmbsupport.com/tgpx/images/remove-small.png&quot; imageanchor=&quot;1&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://docs.unofficialjmbsupport.com/tgpx/images/remove-small.png&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;Design Específico&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Fácil implementar&lt;/span&gt;&lt;a href=&quot;http://socialboards.com/images/right-mark.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://socialboards.com/images/right-mark.png&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Reduz muito uso de banda&lt;/span&gt;&lt;a href=&quot;http://socialboards.com/images/right-mark.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://socialboards.com/images/right-mark.png&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Difícil de manter&lt;/span&gt;&lt;a href=&quot;http://docs.unofficialjmbsupport.com/tgpx/images/remove-small.png&quot; imageanchor=&quot;1&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://docs.unofficialjmbsupport.com/tgpx/images/remove-small.png&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Experiência de uso com nível de excelência para o&amp;nbsp;usuário&lt;/span&gt;&lt;a href=&quot;http://socialboards.com/images/right-mark.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; margin-bottom: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://socialboards.com/images/right-mark.png&quot; /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;No próximo post mostrarei como identificar o dispositivo que o usuário está usando para acesso e exibir a View correta para este.&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;</description><link>http://codingfirst.blogspot.com/2013/09/aspnet-mvc-web-para-grandes-e-pequenos.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhi_xGPEaWtT5ObPfLD8Jjk3g4EVYtqyB0Rn4ToLt7twTUlT3rVkzA1IdEzsc4h15jiQP5FLpkQ9KG_vFSGl39qJU4_9aGB52Hfy-IbHmqOxso8nzRYMBOBiNQ1-K6ClhohEirfIlhw3r-e/s72-c/2013-09-04+21_53_30-.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1104298155886631006.post-8108184193021219429</guid><pubDate>Fri, 30 Aug 2013 15:14:00 +0000</pubDate><atom:updated>2013-08-30T10:39:03.734-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">MVC</category><title>ASP.NET MVC - Postando Listas ou Coleções de objetos sem alterar o ModelBinder padrão</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Uma das maiores mudanças ocorridas no &lt;b&gt;ASP.NET MVC&lt;/b&gt; desde a sua criação, pelo menos em minha opinião, foi a incorporação do &lt;b&gt;&lt;a href=&quot;http://blogs.msdn.com/b/webdev/archive/2012/11/30/model-binding-fundamentals.aspx&quot;&gt;ModelBinder&lt;/a&gt;&lt;/b&gt;. O &lt;b&gt;&lt;a href=&quot;http://blogs.msdn.com/b/webdev/archive/2012/11/30/model-binding-fundamentals.aspx&quot;&gt;ModelBinder&lt;/a&gt;&amp;nbsp;&lt;/b&gt;é responsável pela construção do modelo no server baseado no parâmetro da &lt;b&gt;Action &lt;/b&gt;e os nomes dos inputs que foram postados em um formulário. Dessa forma, não é preciso iterar sobre um &lt;b&gt;&lt;a href=&quot;http://msdn.microsoft.com/pt-br/library/system.windows.forms.formcollection.aspx&quot;&gt;FormCollection&lt;/a&gt;&amp;nbsp;&lt;/b&gt;para recuperar as informações enviadas, basta apenas colocar como parâmetro&amp;nbsp;o modelo que deseja receber. Neste breve post vou mostrar como enviar uma coleção qualquer para o servidor sem ter que alterar o &lt;b&gt;&lt;a href=&quot;http://blogs.msdn.com/b/webdev/archive/2012/11/30/model-binding-fundamentals.aspx&quot;&gt;ModelBinder&lt;/a&gt;&amp;nbsp;&lt;/b&gt;padrão do &lt;b&gt;ASP.NET MVC&lt;/b&gt;.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;O problema&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Quando criamos um formulário, os &lt;b&gt;HtmlHelpers &lt;/b&gt;cuidam do trabalho pesado e já constroem automaticamente todos os atributos necessários nos inputs &lt;b&gt;Html&lt;/b&gt;. O principal atributo é o &lt;b&gt;name&lt;/b&gt;, que é usado pelo &lt;b&gt;ModelBinder &lt;/b&gt;para colocar o valor na propriedade certa quanto o formulário é postado para o server.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Esse attribute &lt;b&gt;name &lt;/b&gt;vem direto da &lt;b&gt;&lt;a href=&quot;http://msdn.microsoft.com/pt-br/library/vstudio/bb397687.aspx&quot;&gt;Lambda Expression&lt;/a&gt;&lt;/b&gt; que passamos. Por exemplo, ao criamos um formulário com uma lista usando o &lt;b&gt;foreach &lt;/b&gt;, o &lt;b&gt;body &lt;/b&gt;da &lt;b&gt;Lambda Exmpression&lt;/b&gt; é usado para o &lt;b&gt;name&lt;/b&gt;, repare no &lt;b&gt;HtmlHelper &lt;/b&gt;e &lt;b&gt;HTML &lt;/b&gt;gerado:&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoP4kWtMVM0pClpPBirb47ASEpIw6bNI2PkedMf1r3XLW8osKQ00BTvZFIb17ZZfk2WSdCfc9u1miBrGInXYRCTwRgjCgUHcuyXA0Uy73u7dvNvvNlx9qvGti6geZelikawYiH60bpKrgp/s1600/2013-08-30+11_39_45-Fals.PostListModel+(Running)+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoP4kWtMVM0pClpPBirb47ASEpIw6bNI2PkedMf1r3XLW8osKQ00BTvZFIb17ZZfk2WSdCfc9u1miBrGInXYRCTwRgjCgUHcuyXA0Uy73u7dvNvvNlx9qvGti6geZelikawYiH60bpKrgp/s1600/2013-08-30+11_39_45-Fals.PostListModel+(Running)+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;View/Task/UpdateMany.cshtml&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhg7adUslug-4_Pk8GiDq7rbOZEQvUQzvwTCKL1jNHDu6_difj8EicBx_vtldL1FhbZA0ggzau5qNE9gNb6Ux-Fh20bvURSSSxmeAhBarToBi4t_1js4SkIDVRvHduznH7YEnhu2qKlhl2I/s1600/2013-08-30+11_40_51-UpdateMany.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1_DoFs2K7rzFpy4pZgv7l9N4m6luK8W-BvCkomCVZegfSJ4eMKVOhmIR9NzYH2dX3GNbwG-RpcJxsv31AXqStrb6GJqmtEOfEHluQbGtZwtEpkXOOGLAYCaepiqo0JiEVmUQcXuyzqm06/s1600/2013-08-30+11_40_51-UpdateMany.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi1_DoFs2K7rzFpy4pZgv7l9N4m6luK8W-BvCkomCVZegfSJ4eMKVOhmIR9NzYH2dX3GNbwG-RpcJxsv31AXqStrb6GJqmtEOfEHluQbGtZwtEpkXOOGLAYCaepiqo0JiEVmUQcXuyzqm06/s1600/2013-08-30+11_40_51-UpdateMany.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;Html gerado&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Isso está errado, quando estamos falando de Listas. O &lt;b&gt;ModelBinder &lt;/b&gt;não entenderá que o que será postado é uma coleção de objetos e não conseguirá reconstruir essa lista de novo no server, resultado, você terá um &lt;b&gt;null &lt;/b&gt;como abaixo:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBP4VosQ7uZHfmO1V344xrHnowwIwGjVcEaq2ngxsWUNVvBZQON_YbZIjOpz9-tfVVKJFKWImnvIQmejEiJX9rdNbR7qcMuPMaY8G_-MiprMaaOS-Mua5gr_lI8wA37V5mYFOk7N3CYdGo/s1600/2013-08-30+11_45_17-Fals.PostListModel+(Debugging)+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBP4VosQ7uZHfmO1V344xrHnowwIwGjVcEaq2ngxsWUNVvBZQON_YbZIjOpz9-tfVVKJFKWImnvIQmejEiJX9rdNbR7qcMuPMaY8G_-MiprMaaOS-Mua5gr_lI8wA37V5mYFOk7N3CYdGo/s1600/2013-08-30+11_45_17-Fals.PostListModel+(Debugging)+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;Controllers/Task.cs&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;A solução&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Para fazer funcionar basta alterar o foreach por um for, assim os &lt;b&gt;HtmlHelpers &lt;/b&gt;vão criar a coisa certa, como abaixo:&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9VwIEj5YaooznzSmUKLH-Wi8tTN_xbyya2boo9b-P1UarpEfubrl2pQEbyGufyitnn_nuC8IylV3jLW77a7Kb5sxrCmOp7pB8vUSzvUdRbtBGQU3yXg97gC5K6jkrWlGeOciOivp0RRXA/s1600/2013-08-30+11_49_35-Fals.PostListModel+(Running)+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9VwIEj5YaooznzSmUKLH-Wi8tTN_xbyya2boo9b-P1UarpEfubrl2pQEbyGufyitnn_nuC8IylV3jLW77a7Kb5sxrCmOp7pB8vUSzvUdRbtBGQU3yXg97gC5K6jkrWlGeOciOivp0RRXA/s1600/2013-08-30+11_49_35-Fals.PostListModel+(Running)+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;View/Task/UpdateMany.cshtml&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1p6d0YpuHMMtLHzCFxoF0ItRsGwuTDNIdj3qTgmXGpqgecW5PRDmsd9AL-stOu9zUsCg1ehHGpalJeNlqDadak5pEonKXpFlBirmSkacndsXOfVZUNfMb6JTgPplsS3X_U8la7MO3yGOR/s1600/2013-08-30+11_50_11-UpdateMany.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1p6d0YpuHMMtLHzCFxoF0ItRsGwuTDNIdj3qTgmXGpqgecW5PRDmsd9AL-stOu9zUsCg1ehHGpalJeNlqDadak5pEonKXpFlBirmSkacndsXOfVZUNfMb6JTgPplsS3X_U8la7MO3yGOR/s1600/2013-08-30+11_50_11-UpdateMany.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Html gerado&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Veja que agora o &lt;b&gt;name &lt;/b&gt;está diferente, parece com um índice de um &lt;b&gt;Array&lt;/b&gt;. Quando o &lt;b&gt;form &lt;/b&gt;for postado o &lt;b&gt;ModelBinder &lt;/b&gt;vai identificar esse padrão dentro da request e reconstruir o formulário como se fosse uma lista, logo você receberá a coisa certa no server.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz9z8fu6KFG6hBi2P4yIhC5RSWUQg7HBT71pdSBr9mv7sW74lvdcu72Zw2HEg3ttUI3LYwPKlKkq8T_ufHUipBal9P-CBd_fCABY-mkFQ5yeC8EohIrqJWyVK1Zt4XbfWNQqBN4N2RTDlU/s1600/2013-08-30+11_53_21-Fals.PostListModel+(Debugging)+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiz9z8fu6KFG6hBi2P4yIhC5RSWUQg7HBT71pdSBr9mv7sW74lvdcu72Zw2HEg3ttUI3LYwPKlKkq8T_ufHUipBal9P-CBd_fCABY-mkFQ5yeC8EohIrqJWyVK1Zt4XbfWNQqBN4N2RTDlU/s1600/2013-08-30+11_53_21-Fals.PostListModel+(Debugging)+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;Controllers/Task.cs&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Quando for criar qualquer tipo de formulário com lista, preocupe-se então com o &lt;b&gt;name&lt;/b&gt;, mesmo se não estiver usando os &lt;b&gt;HtmlHelpers &lt;/b&gt;use sempre esse padrão que o &lt;b&gt;ModelBinder &lt;/b&gt;fará todo o trabalho duro para você.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Espero que tenham gostado do post. O exemplo completo pode ser baixado &lt;a href=&quot;http://sdrv.ms/15pZTwN&quot;&gt;aqui&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;Referências:&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx&quot;&gt;Model Binding To A List&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;http://stackoverflow.com/questions/9306246/posting-to-a-listmodeltype-mvc3&quot;&gt;Posting to a list&amp;lt;modeltype&amp;gt; MVC3&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
</description><link>http://codingfirst.blogspot.com/2013/08/aspnet-mvc-postando-lista-ou-colecoes.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjoP4kWtMVM0pClpPBirb47ASEpIw6bNI2PkedMf1r3XLW8osKQ00BTvZFIb17ZZfk2WSdCfc9u1miBrGInXYRCTwRgjCgUHcuyXA0Uy73u7dvNvvNlx9qvGti6geZelikawYiH60bpKrgp/s72-c/2013-08-30+11_39_45-Fals.PostListModel+(Running)+-+Microsoft+Visual+Studio+(Administrator).png" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1104298155886631006.post-2325233945294215860</guid><pubDate>Wed, 21 Aug 2013 16:54:00 +0000</pubDate><atom:updated>2013-08-23T10:13:27.389-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">JQuery</category><category domain="http://www.blogger.com/atom/ns#">MVC</category><title>ASP.NET MVC - Validação de Datas sem complicação, JQuery Validation + JQuery.Globalize</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Recentemente um amigo que começou a desenvolver em um projeto em ASP.NET MVC questionou a respeito da validação de datas. A validação sempre falha em server e client se você usar o campo do tipo &lt;b&gt;DateTime &lt;/b&gt;e as &lt;b&gt;DataAnnotations &lt;/b&gt;que o MVC traz. Como &quot;paliativo&quot; o pessoal usa um campo &lt;b&gt;string &lt;/b&gt;e &lt;b&gt;RegularExpressionAttribute&lt;/b&gt;, depois transfere esse valor para o campo &lt;b&gt;DateTime &lt;/b&gt;original.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ22ZHH88uy1cwZgjNP3XFnZN277qvN6ocl-RGEczNw8_usRiF6zBy5Wv955_pdK7j_lD6Pcdqs7HcHbCwRlI6ONRqQL0eN8he65uXQFzGwRCz2m5e-y99INVf07qXmXiHH4iulyNUwmws/s1600/2013-08-21+11_55_35-Create.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;273&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ22ZHH88uy1cwZgjNP3XFnZN277qvN6ocl-RGEczNw8_usRiF6zBy5Wv955_pdK7j_lD6Pcdqs7HcHbCwRlI6ONRqQL0eN8he65uXQFzGwRCz2m5e-y99INVf07qXmXiHH4iulyNUwmws/s320/2013-08-21+11_55_35-Create.png&quot; width=&quot;320&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;&lt;i&gt;Data Válida, mas falha.&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Porém, isso não é necessário, o que acontece é um problema com o localization do &lt;b&gt;&lt;a href=&quot;http://jqueryvalidation.org/&quot;&gt;JQuery Val&lt;/a&gt;&lt;/b&gt; que não consegue validar o formato dd/MM/yyyy sem uma &quot;ajuda&quot;. Neste post vou mostrar como concertar isso.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Instalando jquery.globalize&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O jquery globalize é uma biblioteca de globalization e localization. Vou usá-la para parser da data que será validada.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Para instalar:&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Clique com botão direito na Solução-&amp;gt;Manage Nuget Packages&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Vá em Online e digite na caixa Jquery Globalize&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLYZ9Hnv8l2ulodA3SLJNJiaGSAWUwc2tyUk2mfqDM8TVEK2QqMNf_mIOlariuygFgWVUkq1TxH5uuGt4GDiq2YjSYOZD_WP4wyE7Vbhr_uTuO8RRYDwRcop2ppm10GD5RL8U87W8SVU05/s1600/2013-08-21+11_25_11-Fals.DateTimeValidation+-+Manage+NuGet+Packages.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;213&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLYZ9Hnv8l2ulodA3SLJNJiaGSAWUwc2tyUk2mfqDM8TVEK2QqMNf_mIOlariuygFgWVUkq1TxH5uuGt4GDiq2YjSYOZD_WP4wyE7Vbhr_uTuO8RRYDwRcop2ppm10GD5RL8U87W8SVU05/s320/2013-08-21+11_25_11-Fals.DateTimeValidation+-+Manage+NuGet+Packages.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Agora é necessário adicionar o &amp;nbsp;jquery.globalize ao nosso BundleConfig&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDmJjJvcUfWs1enVbGNCE-MPWfYpM1QRBZHBghDBbgyXJjAATE3QVSzABjCxY1dQ2jvcpMZLNzR__FZKg2mwNLUYzmUwlqjDRPVOUPmCrFV5JO49rwGWFk9g3GlrGoPUtwN4OHk4w4EqIn/s1600/2013-08-21+11_32_16-Fals.DateTimeValidation+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjDmJjJvcUfWs1enVbGNCE-MPWfYpM1QRBZHBghDBbgyXJjAATE3QVSzABjCxY1dQ2jvcpMZLNzR__FZKg2mwNLUYzmUwlqjDRPVOUPmCrFV5JO49rwGWFk9g3GlrGoPUtwN4OHk4w4EqIn/s1600/2013-08-21+11_32_16-Fals.DateTimeValidation+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;&lt;i&gt;App_Start/BundleConfig.cs&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Modificando a função de validação de datas do Jquery Val&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Agora vem a parte &quot;hardcoding&quot;. Com o jquery globalize vamos usar a função &lt;a href=&quot;https://github.com/jquery/globalize#parseDate&quot;&gt;parseDate &lt;/a&gt;para validar nosso formato.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTJnwyPmfIGMUTGlalYKkKQXCQyTXsOei7cLO4v6nK4vKMgs_LGl5YCEsZBqcpOsOrxP7SlOeyMVxQmXc-W08VSQNQ4U-5MfPtbhsK51qKlc-CPp-55BHD12a8g3An6LWo6FfyGGLL2YSl/s1600/2013-08-21+13_19_48-Fals.DateTimeValidation+(Running)+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTJnwyPmfIGMUTGlalYKkKQXCQyTXsOei7cLO4v6nK4vKMgs_LGl5YCEsZBqcpOsOrxP7SlOeyMVxQmXc-W08VSQNQ4U-5MfPtbhsK51qKlc-CPp-55BHD12a8g3An6LWo6FfyGGLL2YSl/s1600/2013-08-21+13_19_48-Fals.DateTimeValidation+(Running)+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;&lt;i&gt;Views/Task/Create.cshtml&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Na função acima estou alterando o método date para que a validação ocorra da forma que eu quero. Veja em Azul o formato que especifiquei. Logo, qualquer coisa diferente disso que for digitado em um campo com validação para data vai falhar.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O ideal é que você crie um arquivo de Script e coloque uma função anônima dentro para reutilizar.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Exemplo&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Agora no ASP.NET é possível usar o seu campo com DateTime, sem problemas.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR4EE9A57cwHoEq7ppkZWZvcQetcnVxqK9z1Yee1hRCndBEbMjjemmkUj1X55srIUif_zN3z9g9cpiFisf-d5e-2UWWU6aURoMJ5SfrPW75dnk3eYQeyom3qSw_-45EKbO9lApYGuyoeUr/s1600/2013-08-21+13_38_39-Fals.DateTimeValidation+(Running)+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR4EE9A57cwHoEq7ppkZWZvcQetcnVxqK9z1Yee1hRCndBEbMjjemmkUj1X55srIUif_zN3z9g9cpiFisf-d5e-2UWWU6aURoMJ5SfrPW75dnk3eYQeyom3qSw_-45EKbO9lApYGuyoeUr/s1600/2013-08-21+13_38_39-Fals.DateTimeValidation+(Running)+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;&lt;i&gt;Models/Task.cs&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY6nMl0Ar4bezEvBrA2kXCCwZh7ls7ip46G0mTDG9Vbm6tQE7xvbvrR-2pKJ1feLBLofobbxWUzQCsNdcdkYPyS3ddfqeJHB4pf3z2CZOwROiLWMshsEybbPfVV3Hm6w3hGQknqKIH_6FI/s1600/2013-08-21+13_40_32-Fals.DateTimeValidation+(Running)+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiY6nMl0Ar4bezEvBrA2kXCCwZh7ls7ip46G0mTDG9Vbm6tQE7xvbvrR-2pKJ1feLBLofobbxWUzQCsNdcdkYPyS3ddfqeJHB4pf3z2CZOwROiLWMshsEybbPfVV3Hm6w3hGQknqKIH_6FI/s1600/2013-08-21+13_40_32-Fals.DateTimeValidation+(Running)+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;&lt;i&gt;View/Task/Create.cshtml&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O campo pode ser criado normalmente. Quando você cria o campo como DateTime, por baixo dos panos o Html Helper já coloca que o campo é para ser validado como Data.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnifAiXdgzHYEoADYcSy3iqj3cYF0XRJGx1AGsHjNKWl5GJnDKMfIMyVVy4pwPbDh93fgL4GFbi0aHV2simqSjAjqthh__VKdS0yGk-RLvz3JxPmynj0ZCfkjejJQZkj44y2uqj5DCnwuK/s1600/2013-08-21+13_43_26-Create.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnifAiXdgzHYEoADYcSy3iqj3cYF0XRJGx1AGsHjNKWl5GJnDKMfIMyVVy4pwPbDh93fgL4GFbi0aHV2simqSjAjqthh__VKdS0yGk-RLvz3JxPmynj0ZCfkjejJQZkj44y2uqj5DCnwuK/s1600/2013-08-21+13_43_26-Create.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;&lt;i&gt;HTML Resultado para o Campo DateTime&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Agora a validação funciona:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxx8GpQHfbmFkqoZo0qoieu2KWIW_sb5B5DEsFlDqKoD3wnAzc6SFdticnqg6rFzpDyo350UX1WME9bO0nngwvuos4YzZj1fVtNUEJucWf3q_bnmTbI3QpyQ84k6jyuanjs1hxsxJVkLd5/s1600/2013-08-21+11_58_45-Create.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxx8GpQHfbmFkqoZo0qoieu2KWIW_sb5B5DEsFlDqKoD3wnAzc6SFdticnqg6rFzpDyo350UX1WME9bO0nngwvuos4YzZj1fVtNUEJucWf3q_bnmTbI3QpyQ84k6jyuanjs1hxsxJVkLd5/s320/2013-08-21+11_58_45-Create.png&quot; width=&quot;245&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Espero que tenham gostado, o código fonte do exemplo pode ser baixado &lt;a href=&quot;http://sdrv.ms/13RqZxq&quot;&gt;aqui&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://codingfirst.blogspot.com/2013/08/aspnet-mvc-validando-datas-sem.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhQ22ZHH88uy1cwZgjNP3XFnZN277qvN6ocl-RGEczNw8_usRiF6zBy5Wv955_pdK7j_lD6Pcdqs7HcHbCwRlI6ONRqQL0eN8he65uXQFzGwRCz2m5e-y99INVf07qXmXiHH4iulyNUwmws/s72-c/2013-08-21+11_55_35-Create.png" height="72" width="72"/><thr:total>5</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1104298155886631006.post-1224094901997012548</guid><pubDate>Tue, 13 Aug 2013 19:18:00 +0000</pubDate><atom:updated>2013-08-13T13:27:28.760-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">JQuery</category><category domain="http://www.blogger.com/atom/ns#">JSON</category><category domain="http://www.blogger.com/atom/ns#">Web API</category><title>ASP.NET Web API - Criação de select (DropDownList) em cascata, usando Ajax, JQuery e JSON.</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Essa semana estava criando um sistema e me deparei com um problema relacionado a &lt;b&gt;select &lt;/b&gt;list (nome da tag &lt;b&gt;HTML&lt;/b&gt;, mas conhecido como Drop Down List no mundo Windows) encadeados. O sistema teria vários desses &lt;b&gt;select &lt;/b&gt;em cascata.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Como um bom programador, resolvi encapsular a lógica deste em algum lugar, para futuro reuso. Então surgiu a ideia de criar uma extensão do &lt;/span&gt;&lt;b style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;JQuery &lt;/b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;que já fizesse o trabalho duro.&amp;nbsp;&lt;span style=&quot;background-color: white; color: #222222; line-height: 18px;&quot;&gt;É necessário Visual Studio 2010/2012 com o template do&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;background-color: white; border: 0px; color: #222222; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;ASP.NET MVC 4 Project&amp;nbsp;&lt;/strong&gt;&lt;span style=&quot;background-color: white; border: 0px; color: #222222; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;instalados&lt;/span&gt;&lt;strong style=&quot;background-color: white; border: 0px; color: #222222; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;.&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;background-color: white;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Link do Git Hub para o&lt;a href=&quot;https://github.com/fals/jquery-cascadeselect&quot;&gt;&amp;nbsp;&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; text-align: justify;&quot;&gt;&lt;a href=&quot;https://github.com/fals/jquery-cascadeselect&quot;&gt;jquery-cascadeselect&lt;/a&gt; &lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; text-align: justify;&quot;&gt;Contribua!&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3 style=&quot;background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; margin: 0px; position: relative;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: medium;&quot;&gt;Criando o projeto Web Api&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; line-height: 18.203125px; text-align: justify;&quot;&gt;No Visual Studio, para um novo projeto:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;
&lt;ol&gt;
&lt;li style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;line-height: 18.203125px;&quot;&gt;File-&amp;gt;&lt;/span&gt;&lt;span style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;New Project-&amp;gt;&lt;/span&gt;&lt;span style=&quot;line-height: 18.203125px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Templates-&amp;gt;&lt;/span&gt;&lt;span style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Installed Templates-&amp;gt;&lt;/span&gt;&lt;span style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Visual C#-&amp;gt;&lt;/span&gt;&lt;span style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;ASP.NET MVC 4 Web Application&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Na janela selecione&amp;nbsp;&lt;strong style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Web API.&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;Caso já tenha um projeto MVC:&lt;/span&gt;&lt;br /&gt;
&lt;ol style=&quot;background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;
&lt;li style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Adicione referência para&amp;nbsp;&lt;code style=&quot;background-color: #eeeeee; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;System.Web.Http.WebHost&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Adicione o arquivo&amp;nbsp;&lt;code style=&quot;background-color: #eeeeee; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;App_Start\WebApiConfig.cs&lt;/code&gt;&amp;nbsp;(use como exemplo o código do post).&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Adicione using&amp;nbsp;&lt;code style=&quot;background-color: #eeeeee; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;System.Web.Http&lt;/code&gt;&amp;nbsp;in&amp;nbsp;&lt;code style=&quot;background-color: #eeeeee; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Global.asax.cs&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Chame&amp;nbsp;&lt;code style=&quot;background-color: #eeeeee; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;WebApiConfig.Register(GlobalConfiguration.Configuration)&lt;/code&gt;&amp;nbsp;na função Start&amp;nbsp;&lt;code style=&quot;background-color: #eeeeee; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Global.asax.cs&lt;/code&gt;,&amp;nbsp;&lt;i&gt;antes da rota MVC, por causa de sua precedência&lt;/i&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;A ideia&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O principal objetivo era diminuir a complexidade de criar o cascateamento e também performance, dado que o resultado é em JSON, diminuindo assim, o tráfego de dados. Principalmente porque eu o usaria para mobile.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O cascateamento de componentes é recursivo por natureza. Então resolvi usar os novos padrões &lt;b&gt;HTML5 &lt;/b&gt;&lt;a href=&quot;http://www.w3.org/html/wg/drafts/html/master/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes&quot;&gt;data-*&lt;/a&gt; (chamado de &lt;a href=&quot;http://www.w3.org/html/wg/drafts/html/master/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes&quot;&gt;&quot;data dash attribute&quot;&lt;/a&gt;), que salva as informações para que o &lt;b&gt;select &lt;/b&gt;saiba seu comportamento. A&amp;nbsp;&lt;b&gt;url &lt;/b&gt;de origem dos dados, os parâmetros a serem passados, &lt;b&gt;paramName,&lt;/b&gt;&amp;nbsp;quem dispararia o evento para ele ser preenchido, o&amp;nbsp;&lt;b&gt;parentSelectId &lt;/b&gt;e um texto padrão que este teria vazio ou não selecionado o&amp;nbsp;&lt;b&gt;defatulText&lt;/b&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_JsM1a5WFNHa0ebRYhELJ9QBQtG7EBaOtoT5OdaDHLR8uTdXEZYSX8sLbNPB29HyL4oKbuRSPGUV_04rSxmS-DWFN9ajhL0C3xiE4_6Mxcmb0CLfGw_U-wYtq1UjugGJ8yg_uDPsqtjvT/s1600/2013-08-13+15_47_12-Fals.AjaxSearchForm+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_JsM1a5WFNHa0ebRYhELJ9QBQtG7EBaOtoT5OdaDHLR8uTdXEZYSX8sLbNPB29HyL4oKbuRSPGUV_04rSxmS-DWFN9ajhL0C3xiE4_6Mxcmb0CLfGw_U-wYtq1UjugGJ8yg_uDPsqtjvT/s1600/2013-08-13+15_47_12-Fals.AjaxSearchForm+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Chamada do método&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;A Web API&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Criei um objeto &lt;b&gt;SelectOption&amp;nbsp;&amp;nbsp;&lt;/b&gt;que remete ao que é esperado pelo &lt;b&gt;jquery-cascadeselect &lt;/b&gt;(esse o nome da extensão que crie :D). &amp;nbsp;Então nossos métodos devem preencher e retornar esse objeto.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCS5i1q-tclKbprbOi2iL1vl3IiiYojW8jiopiaqxcpTIk-PP1altd4jBBtKqXDeWmsWMYf6vwq9YQ6sc0JkAsSW3VMna0zZk9K4A2S4o-AojslI0UFPMhVdSw53ro54nWEVYu6ee9NiWn/s1600/2013-08-13+16_34_18-Fals.AjaxSearchForm+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCS5i1q-tclKbprbOi2iL1vl3IiiYojW8jiopiaqxcpTIk-PP1altd4jBBtKqXDeWmsWMYf6vwq9YQ6sc0JkAsSW3VMna0zZk9K4A2S4o-AojslI0UFPMhVdSw53ro54nWEVYu6ee9NiWn/s1600/2013-08-13+16_34_18-Fals.AjaxSearchForm+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Model/SelectOption.cs&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTGxeL6PFGAPYpOSrwEhs1-xKJv1t3eQZsYtb9kztWqDpBMmBIXrLda0y7NGGVR-ro0QfN4YnJSQQjoeA_2FK7hhgWrPmhqGRbiWx6sYoZgnrAddJhp0d_yjQzmKLcP4J57KoteTPyH5WF/s1600/2013-08-13+15_53_27-Info+-+Bloco+de+notas.png&quot; imageanchor=&quot;1&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTGxeL6PFGAPYpOSrwEhs1-xKJv1t3eQZsYtb9kztWqDpBMmBIXrLda0y7NGGVR-ro0QfN4YnJSQQjoeA_2FK7hhgWrPmhqGRbiWx6sYoZgnrAddJhp0d_yjQzmKLcP4J57KoteTPyH5WF/s1600/2013-08-13+15_53_27-Info+-+Bloco+de+notas.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Padrão do JSON gerado&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;No exemplo eu vou usar Estado, Cidade e Região. Veja que retorno em cada método de API é uma lista de&amp;nbsp;&lt;b&gt;SelectOption&lt;/b&gt;. Preste atenção também nos parâmetros. Vamos usá-los mais tarde.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_xt-WtbOumPsJqkoQ-yN5-SjsP0QGiOb7CGHL-RI2I9jfo12x_c5F2hSGlDcC4ygCtmrNop2TgMUD_bLj88M6m7DdfjbjmVuRDyYzmThBo9HDLqpiRsmH2KKzK-WMESBSjlwXKkm-tohX/s1600/2013-08-13+16_33_22-Fals.AjaxSearchForm+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh_xt-WtbOumPsJqkoQ-yN5-SjsP0QGiOb7CGHL-RI2I9jfo12x_c5F2hSGlDcC4ygCtmrNop2TgMUD_bLj88M6m7DdfjbjmVuRDyYzmThBo9HDLqpiRsmH2KKzK-WMESBSjlwXKkm-tohX/s1600/2013-08-13+16_33_22-Fals.AjaxSearchForm+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Controller/SearchController.cs&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Na configuração do Web API, adicionei a &lt;b&gt;action &lt;/b&gt;na rota, porque temos mais de um método&amp;nbsp;&lt;b&gt;GET &lt;/b&gt;dentro do mesmo controller, caso contrário &amp;nbsp;o Routing não irá resolver o endereço requisitado. Além disso,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;JSON foi colocado como padrão de retorno.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCq6nUVeTwuA_y9YwyBAxFOG5QaJQoEHAiVklNzsD_WFOGD25wtbC-qKnGO5UTPS0MQh6oz7vTmfpo6XeVofFMETlHxqMOZ2FD6V1OfKhWye4Bw2hmq43xh0dvbbaM3GONcmef8NziJOr_/s1600/2013-08-13+16_44_14-Fals.AjaxSearchForm+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhCq6nUVeTwuA_y9YwyBAxFOG5QaJQoEHAiVklNzsD_WFOGD25wtbC-qKnGO5UTPS0MQh6oz7vTmfpo6XeVofFMETlHxqMOZ2FD6V1OfKhWye4Bw2hmq43xh0dvbbaM3GONcmef8NziJOr_/s1600/2013-08-13+16_44_14-Fals.AjaxSearchForm+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;App_Start/WebApiConfig.cs&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Uso&lt;/span&gt;&lt;/h3&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O uso é bem simples, basta chamar como se fosse um método do &lt;b&gt;JQuery,&lt;/b&gt;&amp;nbsp;dado que é uma extensão. No exemplo abaixo estou usando com ASP.NET Web API, mas não há restrições, o endereço passado só deve garantir que seja retornado JSON no formato correto .&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWLVJnrpgxnkUtS_KOhx6wJWGlczgPe33Ca-V-LFObO5HRCb3Q8MnNvCUxB5aaTLHUwhiMcKBFH6KybMb2Enjj3f1PkmQcPTHU4_F0v-2o5YJMKiSXx3bgyZ3QEVW-apB9HfUnsLJvhK2p/s1600/2013-08-13+15_49_56-Fals.AjaxSearchForm+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWLVJnrpgxnkUtS_KOhx6wJWGlczgPe33Ca-V-LFObO5HRCb3Q8MnNvCUxB5aaTLHUwhiMcKBFH6KybMb2Enjj3f1PkmQcPTHU4_F0v-2o5YJMKiSXx3bgyZ3QEVW-apB9HfUnsLJvhK2p/s1600/2013-08-13+15_49_56-Fals.AjaxSearchForm+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Cascateamento entre Regiões, Estado e Cidades&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Lembra-se dos parâmetros da nossa WebAPI? Por exemplo&amp;nbsp;&lt;/span&gt;&lt;i style=&quot;font-family: Arial, Helvetica, sans-serif; font-weight: bold;&quot;&gt;regiaoId,&amp;nbsp;&lt;/i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;o nome deve ser idêntico para que o&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;GET&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;seja feito corretamente.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8-UtgRpVzj3TKPQ0CcxXBYXKVGMaduGzqDtDMo70GVScMmFbG7EYWG7SNZfClYRFgR66icgMVwsubCsWJ2e4a9gQLdN3atK_dyxNJPU_jdQa9NSH1piJnHhBj6eMMOnfl8V2JDSGUe82B/s1600/2013-08-13+15_58_49-ASP.NET+Web+API+-+Carregando+DropDowns+dependentes+por+demanda,+com+Jquery,+JSON.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8-UtgRpVzj3TKPQ0CcxXBYXKVGMaduGzqDtDMo70GVScMmFbG7EYWG7SNZfClYRFgR66icgMVwsubCsWJ2e4a9gQLdN3atK_dyxNJPU_jdQa9NSH1piJnHhBj6eMMOnfl8V2JDSGUe82B/s1600/2013-08-13+15_58_49-ASP.NET+Web+API+-+Carregando+DropDowns+dependentes+por+demanda,+com+Jquery,+JSON.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;HTML exemplo&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Resultado&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Abaixo está o resultado, o &lt;b&gt;jquery-cascadeselect&lt;/b&gt; cuida da parte chata de lógica automaticamente. Ao mudarmos as seleções os &lt;b&gt;select &lt;/b&gt;são populados segundo a configuração feita. No exemplo clássico abaixo tenho Região, Estado, e Cidade:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjht6J7q5m1W3C1elOUDkPyiBggMQYR2COf7j99Ij9y9RSIQjAjY_PMasJHLvGHdoAUopZoiNEMbf2ZdTNw-LmpktAwMaFH-zjEqeZP4DTAaFj_Bc-MMmqlBJHeqpdY62gOTcymY9LDThAC/s1600/2013-08-13+16_01_55-ASP.NET+Web+API+-+Carregando+DropDowns+dependentes+por+demanda,+com+Jquery,+JSON.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjht6J7q5m1W3C1elOUDkPyiBggMQYR2COf7j99Ij9y9RSIQjAjY_PMasJHLvGHdoAUopZoiNEMbf2ZdTNw-LmpktAwMaFH-zjEqeZP4DTAaFj_Bc-MMmqlBJHeqpdY62gOTcymY9LDThAC/s1600/2013-08-13+16_01_55-ASP.NET+Web+API+-+Carregando+DropDowns+dependentes+por+demanda,+com+Jquery,+JSON.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Regiões é o pai de todos, então já vem populado&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX1hyphenhyphenO2hwzaiTtNEaki7PEYHgT5PQSzqzkVXiGNGLlUxOxc5vJ5hiP43pVnsrTRKnU0kdd5QY7S5PB5p396c0Rtv7NDyP_sATbfWgM8ZNOcJlmoqYqyKu9VxjXUh9-fpMDidcXrjgmiWqD/s1600/2013-08-13+16_02_12-ASP.NET+Web+API+-+Carregando+DropDowns+dependentes+por+demanda,+com+Jquery,+JSON.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiX1hyphenhyphenO2hwzaiTtNEaki7PEYHgT5PQSzqzkVXiGNGLlUxOxc5vJ5hiP43pVnsrTRKnU0kdd5QY7S5PB5p396c0Rtv7NDyP_sATbfWgM8ZNOcJlmoqYqyKu9VxjXUh9-fpMDidcXrjgmiWqD/s1600/2013-08-13+16_02_12-ASP.NET+Web+API+-+Carregando+DropDowns+dependentes+por+demanda,+com+Jquery,+JSON.png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Mudando a seleção de Região o Estado é populado&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOwvcVKUzLzcbFzoBVA2w2Hiygz_LWZ7Ro6jVyhzTDzmsoD6TDoBPzUtklI8hJLOoN4xKgmpiJw9PHPjLkJHSj449Ti1zGnbR-NFR5dViW35VZ58vbrD1CtRgeRApuQ7T4yjoBS-RMtqg2/s1600/2013-08-13+16_02_36-ASP.NET+Web+API+-+Carregando+DropDowns+dependentes+por+demanda,+com+Jquery,+JSON.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOwvcVKUzLzcbFzoBVA2w2Hiygz_LWZ7Ro6jVyhzTDzmsoD6TDoBPzUtklI8hJLOoN4xKgmpiJw9PHPjLkJHSj449Ti1zGnbR-NFR5dViW35VZ58vbrD1CtRgeRApuQ7T4yjoBS-RMtqg2/s320/2013-08-13+16_02_36-ASP.NET+Web+API+-+Carregando+DropDowns+dependentes+por+demanda,+com+Jquery,+JSON.png&quot; width=&quot;245&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Mudando a seleção de Estado vêem as Cidades&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Contribua&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Eu criei uma entrada no Git Hub para&amp;nbsp;&lt;a href=&quot;https://github.com/fals/jquery-cascadeselect&quot;&gt;jquery-cascadeselect&lt;/a&gt;. Não sou nenhum &quot;expert&quot; em JavaScript, então o código pode estar um pouco &quot;bagunçado&quot; e sem padrão, mas está funcionando que é uma maravilha :D! Se você tem interesse em contribuir acesse.&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Espero que tenham gostado. O exemplo que usei para testar, igual ao das imagens acima, pode ser baixado &lt;a href=&quot;http://sdrv.ms/148px9S&quot;&gt;aqui&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
</description><link>http://codingfirst.blogspot.com/2013/08/aspnet-web-api-criacao-de-select.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_JsM1a5WFNHa0ebRYhELJ9QBQtG7EBaOtoT5OdaDHLR8uTdXEZYSX8sLbNPB29HyL4oKbuRSPGUV_04rSxmS-DWFN9ajhL0C3xiE4_6Mxcmb0CLfGw_U-wYtq1UjugGJ8yg_uDPsqtjvT/s72-c/2013-08-13+15_47_12-Fals.AjaxSearchForm+-+Microsoft+Visual+Studio+(Administrator).png" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1104298155886631006.post-5173863291595985624</guid><pubDate>Tue, 06 Aug 2013 20:42:00 +0000</pubDate><atom:updated>2013-08-12T06:20:34.542-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">JQuery UI</category><category domain="http://www.blogger.com/atom/ns#">Web API</category><title>ASP.NET Web API - AutoComplete com imagem usando Web API, Jquery UI e JSON</title><description>&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;No último post sobre ASP.NET Web API,&amp;nbsp;&lt;a href=&quot;http://codingfirst.blogspot.com.br/2013/08/aspnet-web-api-autocomplete-usando-web.html&quot;&gt;&lt;b&gt;ASP.NET Web API - AutoComplete usando Web API, Jquery UI e JSON&lt;/b&gt;&lt;/a&gt;&amp;nbsp;mostrei como fazer um simples &lt;b&gt;AutoComplete&lt;/b&gt;. Nesse artigo vou mostrar como incrementar o que foi feito anteriormente, possibilitando exibir a imagem do que está sendo pesquisado, ou até mais informações para cada item.&amp;nbsp;&lt;span style=&quot;background-color: white; color: #222222; line-height: 18px; text-align: justify;&quot;&gt;É necessário uma revisão post mencionado e o Visual Studio 2010/2012 com o template do&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;background-color: white; border: 0px; color: #222222; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; text-align: justify; vertical-align: baseline;&quot;&gt;ASP.NET MVC 4 Project&amp;nbsp;&lt;/strong&gt;&lt;span style=&quot;background-color: white; border: 0px; color: #222222; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; text-align: justify; vertical-align: baseline;&quot;&gt;instalados&lt;b&gt;.&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 18.203125px;&quot;&gt;Parte 1:&amp;nbsp;&lt;a href=&quot;http://codingfirst.blogspot.com.br/2013/08/aspnet-web-api-autocomplete-usando-web.html&quot; style=&quot;font-weight: bold;&quot;&gt;ASP.NET Web API - AutoComplete usando Web API, Jquery UI e JSON&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7_hH7HF0flZQdeymAGrYAK2BBByT_Re9VJy8eeAZ776woMh0JXaFYUGavdD0QB1hMUY-R0jSxHFcborEyXwR_cdcN4SdI8vt9jscNOG8XFIuDVdj1K4BCbhOkqGFqCtP4z8Q2DL6IMiko/s1600/2013-08-07+10_40_38-WebApi+-+Auto+Complete+Image.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7_hH7HF0flZQdeymAGrYAK2BBByT_Re9VJy8eeAZ776woMh0JXaFYUGavdD0QB1hMUY-R0jSxHFcborEyXwR_cdcN4SdI8vt9jscNOG8XFIuDVdj1K4BCbhOkqGFqCtP4z8Q2DL6IMiko/s200/2013-08-07+10_40_38-WebApi+-+Auto+Complete+Image.png&quot; width=&quot;198&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;&quot;&gt;&lt;span style=&quot;line-height: 18px;&quot;&gt;&lt;i&gt;AutoComplete com Imagem&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;h3 style=&quot;background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; margin: 0px; position: relative;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: medium;&quot;&gt;Criando o Modelo AutoComplete&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;No artigo anterior o nosso &lt;b&gt;AutoComplete&amp;nbsp;&lt;/b&gt;exibia apenas um texto para o usuário. Nosso modelo então precisa de um pequeno &quot;upgrade&quot; :). Precisamos de um &lt;b&gt;AutoCompleteImageModel,&lt;/b&gt;&amp;nbsp;que terá além informações básicas padrão para o &lt;b&gt;Jquery UI&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;b style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;AutoComplete&amp;nbsp;&lt;/b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;, também caminho da imagem de cada item.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFmuxeyWbL4pccUa8ek3MkiFAkIQCxaxDvn538mQaWLAnQWrzYw6BwDrtl4Au9ARgq32PN8Cib6g_DTeMaZsPMyZ1zoCjmlyh8Bv71A5PgCIMFRPbmjx2YV2DsX2PKtkif25JjA37nHipW/s1600/2013-08-06+16_49_14-Fals.WebApiAutoCompleteImage+(Running)+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFmuxeyWbL4pccUa8ek3MkiFAkIQCxaxDvn538mQaWLAnQWrzYw6BwDrtl4Au9ARgq32PN8Cib6g_DTeMaZsPMyZ1zoCjmlyh8Bv71A5PgCIMFRPbmjx2YV2DsX2PKtkif25JjA37nHipW/s1600/2013-08-06+16_49_14-Fals.WebApiAutoCompleteImage+(Running)+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;i style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Model/AutoCompleteImageModel.cs&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;h3 style=&quot;background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; margin: 0px; position: relative;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: medium;&quot;&gt;Modificando a View&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;A versão original do &lt;b&gt;AutoComplete &lt;/b&gt;não possui overflow, logo, quando o resultado traz muitos itens fica uma &quot;bagunça&quot;. Para solucionar isso basta alterar o &lt;b&gt;css&lt;/b&gt;, conforme uma solução como esta: &lt;a href=&quot;http://jqueryui.com/autocomplete/#maxheight&quot;&gt;Jquery UI Scrollable Results&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2SPWkTvQeyokKrXbGgDcdY3rYQ_g4_0qELH7EK_67p9_b4xFa3BAzncxyZ1n5dD5sv8T472MP7xxdD4QOriEWSSgZaaP0xi3DKgdTbPOKNpwX60r2e1EHfkvpXk1p-bg08T0gqhJDv59Y/s1600/2013-08-06+17_15_30-Fals.WebApiAutoCompleteImage+(Running)+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi2SPWkTvQeyokKrXbGgDcdY3rYQ_g4_0qELH7EK_67p9_b4xFa3BAzncxyZ1n5dD5sv8T472MP7xxdD4QOriEWSSgZaaP0xi3DKgdTbPOKNpwX60r2e1EHfkvpXk1p-bg08T0gqhJDv59Y/s1600/2013-08-06+17_15_30-Fals.WebApiAutoCompleteImage+(Running)+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: xx-small;&quot;&gt;&lt;span style=&quot;line-height: 18px;&quot;&gt;&lt;i&gt;Content/Site.css&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Basicamente alterei o &lt;b&gt;css&lt;/b&gt; padrão do &lt;b&gt;AutoComplete &lt;/b&gt;para ter um tamanho máximo e exibir a scrollbar.&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Para nossa Imagem e descrição do&amp;nbsp;&lt;/span&gt;&lt;b style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;AutoComplete,&lt;/b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt; criei o css abaixo&lt;/span&gt;&lt;b style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;:&lt;/b&gt;&lt;br /&gt;
&lt;b style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgze0SMlXmj7qR4ZoRxiwhxz8U5rYbjIrPbLrfiaw4wu574of3VFkwE5FvCU41LkOQXHDrOwshqScsqqc-EER3LTekCFto-vX0V_tsSaIcoxSm8KGRkWUaSS2PRgH6a5PaKQSb7knLGoXhyphenhyphen/s1600/2013-08-07+10_40_12-Fals.WebApiAutoCompleteImage+%2528Running%2529+-+Microsoft+Visual+Studio+%2528Administrator%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgze0SMlXmj7qR4ZoRxiwhxz8U5rYbjIrPbLrfiaw4wu574of3VFkwE5FvCU41LkOQXHDrOwshqScsqqc-EER3LTekCFto-vX0V_tsSaIcoxSm8KGRkWUaSS2PRgH6a5PaKQSb7knLGoXhyphenhyphen/s1600/2013-08-07+10_40_12-Fals.WebApiAutoCompleteImage+%2528Running%2529+-+Microsoft+Visual+Studio+%2528Administrator%2529.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: x-small; line-height: 18px;&quot;&gt;Content/Site.css&lt;/i&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;h3 style=&quot;background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; margin: 0px; position: relative;&quot;&gt;
&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: medium;&quot;&gt;Modificando a função JavaScript&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;A api do Jquery UI é bem robusta, logo a personalização é algo que estava em mente quando foi construída. É possível então no &lt;b&gt;AutoComplete &lt;/b&gt;modificar o template que é exibido para o usuário. Logo, existe o &lt;a href=&quot;http://jqueryui.com/autocomplete/#custom-data&quot;&gt;Jquery UI AutoComplete custom data&lt;/a&gt;. O exemplo que vou usar é bem parecido com o do site oficial.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5O7HiFFclVsoSGC0lRwLBP7WjYtwoqRhCIb9w9md8PkvGXROfpJfDD5m9ANZDq0KNqUEH40Sgv-KEnlSCmJYBqDcYearYJbZnKUe6cHWJC5qOJuU3FQOHqPlfaAqU_0xgrKnafxRMlaXQ/s1600/2013-08-07+10_39_19-Fals.WebApiAutoCompleteImage+%2528Running%2529+-+Microsoft+Visual+Studio+%2528Administrator%2529.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi5O7HiFFclVsoSGC0lRwLBP7WjYtwoqRhCIb9w9md8PkvGXROfpJfDD5m9ANZDq0KNqUEH40Sgv-KEnlSCmJYBqDcYearYJbZnKUe6cHWJC5qOJuU3FQOHqPlfaAqU_0xgrKnafxRMlaXQ/s1600/2013-08-07+10_39_19-Fals.WebApiAutoCompleteImage+%2528Running%2529+-+Microsoft+Visual+Studio+%2528Administrator%2529.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Views/Home/Index.cshtml&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O &lt;b&gt;item &lt;/b&gt;é nosso objeto JSON espelho do AutoCompleteImageModel, logo item.value, item.label e item.image são exatamente o que criamos no servidor.&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLTwGcC2ExgzwMmQHgtJf2MarkJndVQOAU5V4ESoSmuuse3k4SL2ow5jtp1if_UNMYuwMeq6Xv5ZFvQL32XVBjQwCMVfULSZHNR6_F3MG7Fy0iBKRsad4XXOQVLKJ_RAn8Vv9QKba2MEar/s1600/2013-08-06+17_22_16-localhost_62148_api_AutoCompleteImage_Cars_term=20.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgLTwGcC2ExgzwMmQHgtJf2MarkJndVQOAU5V4ESoSmuuse3k4SL2ow5jtp1if_UNMYuwMeq6Xv5ZFvQL32XVBjQwCMVfULSZHNR6_F3MG7Fy0iBKRsad4XXOQVLKJ_RAn8Vv9QKba2MEar/s1600/2013-08-06+17_22_16-localhost_62148_api_AutoCompleteImage_Cars_term=20.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;Resultado JSON para a API&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; font-size: 13px; line-height: 18px;&quot;&gt;&lt;span style=&quot;font-size: xx-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; text-align: justify;&quot;&gt;Em &lt;span style=&quot;background-color: yellow;&quot;&gt;amarelo&lt;/span&gt;&amp;nbsp;está mudança que fiz ao log. Ao selecionarmos um item o log exibirá o mesmo que está no AutoComplete.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; text-align: justify;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; text-align: justify;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Em &lt;span style=&quot;background-color: cyan;&quot;&gt;azul&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: white; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;está o Html personalizado. O &lt;b&gt;AutoComplete &lt;/b&gt;é uma tag&amp;nbsp;&lt;b&gt;ul&lt;/b&gt;, que passamos por parametro por essa função do proprio Jquery. Na&amp;nbsp;&lt;b&gt;ul&amp;nbsp;&lt;/b&gt;é possível adicionar qualquer Html personalizado como eu fiz. Coloquei a imagem, o código e o modelo que vem do nosso JSON.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; text-align: justify;&quot;&gt;&lt;span style=&quot;background-color: white; font-family: Arial, Helvetica, sans-serif;&quot;&gt;É possível colocar praticamente qualquer coisa, o único cuidado é que o conteúdo tem que estar dentro de uma tag&amp;nbsp;&lt;/span&gt;&lt;b&gt;a&lt;/b&gt;&lt;span style=&quot;background-color: white; font-family: Arial, Helvetica, sans-serif;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3 style=&quot;background-color: white; color: #222222; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; margin: 0px; position: relative; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: medium;&quot;&gt;Finalizando&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Na parte Web API o que foi mudado é que populo o novo modelo já com o caminho da imagem que será exibida de cada item.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O resultado é esse:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span id=&quot;goog_908985081&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_908985082&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgAope36lBmeeFaDpRPmqMmmYHItHlU8FWl_u-Rz-6IMUo_P331dhY5XQLLdXugEo0wp2DZBFxC5Qgh2uwkcMJY-ZvvL_Ob2LqOApGhzfzvVVwhm09l4MSfnDXdII39ThmFQ-Qp0QcEmd6C/s1600/2013-08-06+17_17_39-WebApi+-+Auto+Complete+Image.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBl3kTtemBz9IiiEgce3WnEX2DBHJd5_dblIPI3dhHhf2UnxlalqchUigORaOLDAQ5e5X2ws3xGF_NEcgd6RJj70IvBhS3z9ykgOFYvA1ZAYgHZ8OC0BWHfKMEekvlQItxOWrXsk1SV4c_/s1600/2013-08-07+10_55_02-WebApi+-+Auto+Complete+Image.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;181&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBl3kTtemBz9IiiEgce3WnEX2DBHJd5_dblIPI3dhHhf2UnxlalqchUigORaOLDAQ5e5X2ws3xGF_NEcgd6RJj70IvBhS3z9ykgOFYvA1ZAYgHZ8OC0BWHfKMEekvlQItxOWrXsk1SV4c_/s200/2013-08-07+10_55_02-WebApi+-+Auto+Complete+Image.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Ao selecionar um item este vai para o log:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3cXg01UIU0vWn1h2C6Qbk526q3jZaJO8YAgKkC-BafuWYoYyh6pptosXDpZOwWMawTYhyK8OrLtwXZ4x4Lf7PcYBW0mZyBrJ8O8mCF_pTzxW6dFkzjA7qadVGI2v75hlRR4V4Yi2xeIsR/s1600/2013-08-06+17_17_55-WebApi+-+Auto+Complete+Image.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibQAp1lyQEJGkTDksLx6ddrYxITdddi3gW-9crTX9cZvQdN0jnoZN4ATZ13H8KP7xZbVJOoUvmfL6DJtfYIH7E4XAWsvg93eybQziqmEvYYHN1axwa5zj-atoR26vkdjQ9wmnb6km7jXX1/s1600/2013-08-07+10_46_02-WebApi+-+Auto+Complete+Image.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;180&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEibQAp1lyQEJGkTDksLx6ddrYxITdddi3gW-9crTX9cZvQdN0jnoZN4ATZ13H8KP7xZbVJOoUvmfL6DJtfYIH7E4XAWsvg93eybQziqmEvYYHN1axwa5zj-atoR26vkdjQ9wmnb6km7jXX1/s200/2013-08-07+10_46_02-WebApi+-+Auto+Complete+Image.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: white; color: #222222; line-height: 18px; text-align: justify;&quot;&gt;Espero que tenham gostado, o exemplo pode ser baixado&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://sdrv.ms/14hhpa8&quot; style=&quot;background-color: white; color: #888888; line-height: 18px; text-align: justify; text-decoration: none;&quot;&gt;aqui&lt;/a&gt;&lt;span style=&quot;background-color: white; color: #222222; line-height: 18px; text-align: justify;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;text-align: justify;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 18.203125px;&quot;&gt;Parte 1:&amp;nbsp;&lt;a href=&quot;http://codingfirst.blogspot.com.br/2013/08/aspnet-web-api-autocomplete-usando-web.html&quot; style=&quot;font-weight: bold;&quot;&gt;ASP.NET Web API - AutoComplete usando Web API, Jquery UI e JSON&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
</description><link>http://codingfirst.blogspot.com/2013/08/aspnet-web-api-autocomplete-com-imagem.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh7_hH7HF0flZQdeymAGrYAK2BBByT_Re9VJy8eeAZ776woMh0JXaFYUGavdD0QB1hMUY-R0jSxHFcborEyXwR_cdcN4SdI8vt9jscNOG8XFIuDVdj1K4BCbhOkqGFqCtP4z8Q2DL6IMiko/s72-c/2013-08-07+10_40_38-WebApi+-+Auto+Complete+Image.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1104298155886631006.post-1351939093680606192</guid><pubDate>Fri, 02 Aug 2013 19:44:00 +0000</pubDate><atom:updated>2013-08-12T06:21:37.390-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">MVC</category><title>ASP.NET MVC - Criando um HtmlHelper personalizado, CheckBoxList</title><description>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;h3&gt;
&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O ASP.NET MVC dá ao desenvolvedor todo o controle sobre o código&amp;nbsp;HTML que será gerado. De uma forma geral, programar em HTML puro é bem improdutivo. Para &amp;nbsp;facilitar o desenvolvimento , foram criados os &lt;b&gt;HtmlHelpers&lt;/b&gt;, métodos que encapsulam a lógica de como as tags são criadas e facilitam a vida do programador. Neste breve artigo vou mostrar como fazer um &lt;b&gt;&lt;a href=&quot;http://msdn.microsoft.com/pt-br/library/system.web.mvc.htmlhelper(v=vs.100).aspx&quot;&gt;HtmlHelper&lt;/a&gt;&amp;nbsp;&lt;/b&gt;personalizado, mais precisamente um CheckBoxList.&amp;nbsp;&lt;span style=&quot;text-align: justify;&quot;&gt;É necessário Visual Studio 2010/2012 com o template do&amp;nbsp;&lt;/span&gt;&lt;strong style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; text-align: justify; vertical-align: baseline;&quot;&gt;ASP.NET MVC Project&amp;nbsp;&lt;/strong&gt;&lt;span style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; text-align: justify; vertical-align: baseline;&quot;&gt;instalado&lt;/span&gt;&lt;strong style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; text-align: justify; vertical-align: baseline;&quot;&gt;.&lt;/strong&gt;&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;strong style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; text-align: justify; vertical-align: baseline;&quot;&gt;&lt;br /&gt;&lt;/strong&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;h3 style=&quot;background-color: white; color: #222222; margin: 0px; position: relative;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Criando a estrutura do Projeto&lt;/span&gt;&lt;/h3&gt;
&lt;div style=&quot;background-color: white; color: #222222; line-height: 18px;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; line-height: 18.203125px; text-align: justify;&quot;&gt;No Visual Studio, para um novo projeto:&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: white; color: #222222; line-height: 18px;&quot;&gt;
&lt;ol&gt;
&lt;li style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;line-height: 18.203125px;&quot;&gt;File-&amp;gt;&lt;/span&gt;&lt;span style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;New Project-&amp;gt;&lt;/span&gt;&lt;span style=&quot;line-height: 18.203125px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Templates-&amp;gt;&lt;/span&gt;&lt;span style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Installed Templates-&amp;gt;&lt;/span&gt;&lt;span style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Visual C#-&amp;gt;&lt;/span&gt;&lt;span style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;ASP.NET MVC 4 Web Application&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;margin: 0px 0px 0.25em; padding: 0px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Na janela selecione&amp;nbsp;&lt;span style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;o projeto que desejar&lt;/span&gt;&lt;strong style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;.&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;span style=&quot;background-color: white; color: #222222; font-family: Arial, Helvetica, sans-serif; line-height: 18px;&quot;&gt;Caso já tenha um projeto MVC;&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li style=&quot;text-align: justify;&quot;&gt;&lt;span style=&quot;color: #222222; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 18px;&quot;&gt;Adicione uma nova classe&amp;nbsp;&lt;span style=&quot;color: black; line-height: normal;&quot;&gt;CheckBoxListHelper que irá encapsular nosso &lt;b&gt;Helper&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;. (Eu criei um diretório &lt;b&gt;Helpers &lt;/b&gt;dentro da raiz do projeto para colocar todos os &lt;b&gt;Helpers&lt;/b&gt;. Nada impede que você coloque esses &lt;b&gt;Helpers &lt;/b&gt;em um projeto separado para utilizar em outro lugares).&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0f6CvovNSZ6VOz6u_SwsXJu8hyyvrAQyHCe4CEF5R75XwzWha5e9X9j6MBa-QSRpVMFs7hs2glLeDohUKJtdiUCnzSFVQINZdxLN3nKIXzSzHOYOHc3S1PNFyhUXuKD64-YrQCnox-cah/s1600/2013-08-02+15_14_21-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;clear: left; display: inline !important; margin-bottom: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0f6CvovNSZ6VOz6u_SwsXJu8hyyvrAQyHCe4CEF5R75XwzWha5e9X9j6MBa-QSRpVMFs7hs2glLeDohUKJtdiUCnzSFVQINZdxLN3nKIXzSzHOYOHc3S1PNFyhUXuKD64-YrQCnox-cah/s200/2013-08-02+15_14_21-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio+(Administrator).png&quot; width=&quot;165&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Adicione as seguintes referências ao arquivo:&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVK6ZW0PRMN2qOR2lINw3bNapM5diwY8OnVmo-P95Ajq753diHisE7ko7ARqEU3EeAEcNA9IdLt5q4xNjFLWdHIDD5eZvDpVr2B4omOpNVhfy6Yt6_UPwh8U4hIDDxYs-V5YqPnE8RIb9a/s1600/2013-08-02+15_25_39-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVK6ZW0PRMN2qOR2lINw3bNapM5diwY8OnVmo-P95Ajq753diHisE7ko7ARqEU3EeAEcNA9IdLt5q4xNjFLWdHIDD5eZvDpVr2B4omOpNVhfy6Yt6_UPwh8U4hIDDxYs-V5YqPnE8RIb9a/s1600/2013-08-02+15_25_39-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Criando o&amp;nbsp;&lt;span style=&quot;background-color: transparent;&quot;&gt;CheckBoxListHelper&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Se você já programou em ASP.NET MVC, já deve ter criado um&lt;b&gt;&amp;nbsp;&lt;/b&gt;DropDownList. Para isso deve ter usado &lt;a href=&quot;https://www.google.com.br/url?sa=t&amp;amp;rct=j&amp;amp;q=&amp;amp;esrc=s&amp;amp;source=web&amp;amp;cd=1&amp;amp;ved=0CDAQFjAA&amp;amp;url=http%3A%2F%2Fmsdn.microsoft.com%2Fpt-br%2Flibrary%2Fsystem.web.mvc.selectlist(v%3Dvs.100).aspx&amp;amp;ei=JQr8UZWcC6zviQKJpIHwBw&amp;amp;usg=AFQjCNGF8E1IeMMe6Ihq639KM9vkoFzwnA&amp;amp;sig2=Bhvp56O0j3LyqAakzVaulQ&amp;amp;bvm=bv.50165853,d.cGE&amp;amp;cad=rja&quot;&gt;SelectList&lt;/a&gt;&amp;nbsp;e &lt;a href=&quot;http://msdn.microsoft.com/en-us/library/system.web.mvc.selectlistitem(v=vs.108).aspx&quot;&gt;SelectListItem&lt;/a&gt;. Seguindo a mesma lógica, vou criar um&amp;nbsp;&lt;b&gt;CheckBoxItem &lt;/b&gt;e&amp;nbsp;&lt;b&gt;CheckBoxList &lt;/b&gt;que serão usados para gerar o HTML.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjY0Qmk6kvpZVm40lT4Puc91KQ6VFmFn75LiYWJEebA6hftJLFVKMUj40xaT8RaTShyDO9BBvO_yE1X8eDyKn_PAAoooG1LjzC2tMEXqUnTH1JoGHorzoPJpWgpzq_nIrmiQuib2Yk3Is8/s1600/2013-08-02+19_06_07-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjY0Qmk6kvpZVm40lT4Puc91KQ6VFmFn75LiYWJEebA6hftJLFVKMUj40xaT8RaTShyDO9BBvO_yE1X8eDyKn_PAAoooG1LjzC2tMEXqUnTH1JoGHorzoPJpWgpzq_nIrmiQuib2Yk3Is8/s1600/2013-08-02+19_06_07-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyNQOzRus4qYRgNslceBaxuxnZxHU-BDFpzmyhzJX8i-YULs_eAF-AJwLrL9fAx-RlgdB0_YYwWd91Xnt02qOL7zOIr3Km0lcVY09aWBRql9aep6feOpeaBR4n8Z6DsHh_nxOhBZY984cO/s1600/2013-08-02+15_46_46-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;Helpers/CheckBoxListHelper.cs&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc7edRt-NipfR_wUsGUYlaSY20UbIjUeBL9racuz1TxjPbTZrC7j83a72OpVTfBCTPTWQXmSwKqQsIgQAlEitd9itGVIsMkHNjjGkxDh7uxfkA-3Qi8Djf-QQJtQLOoabKB-pdnWZ525uU/s1600/2013-08-02+15_46_57-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc7edRt-NipfR_wUsGUYlaSY20UbIjUeBL9racuz1TxjPbTZrC7j83a72OpVTfBCTPTWQXmSwKqQsIgQAlEitd9itGVIsMkHNjjGkxDh7uxfkA-3Qi8Djf-QQJtQLOoabKB-pdnWZ525uU/s1600/2013-08-02+15_46_57-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;Helpers/CheckBoxListHelper.cs&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Agora é só começar o &quot;hardcoding&quot; :). Um &lt;b&gt;HtmlHelper &lt;/b&gt;nada mais é que um &lt;a href=&quot;http://msdn.microsoft.com/pt-br/library/vstudio/bb383977.aspx&quot;&gt;Extension Method&lt;/a&gt; da classe&amp;nbsp;&lt;b&gt;HtmlHelper&lt;/b&gt;. Logo, deve ser criada uma classe static, e o método static deve receber como parametro &lt;b&gt;&quot;this HtmlHelper htmlHelper&quot;&lt;/b&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUM5y7FUKZqOimXefCEDwys3vUX_ehepsUpvi99OsSsAfiagGxiM5FCnGRVfuoW8Aw_XA0RaBEjT1yGjXrskyzGA0WimcpDyqnTzNLGOeztIVaXKZ_ZSDVQIOtJKJiCcQrDUouUhUC_XXL/s1600/2013-08-02+19_04_30-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhUM5y7FUKZqOimXefCEDwys3vUX_ehepsUpvi99OsSsAfiagGxiM5FCnGRVfuoW8Aw_XA0RaBEjT1yGjXrskyzGA0WimcpDyqnTzNLGOeztIVaXKZ_ZSDVQIOtJKJiCcQrDUouUhUC_XXL/s1600/2013-08-02+19_04_30-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;Helpers/CheckBoxListHelper.cs&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Veja que passo como parâmetro a legenda, que será exibida no topo do &lt;b&gt;fieldset, &lt;/b&gt;o &lt;b&gt;CheckBoxList &lt;/b&gt;e os objetos&lt;b&gt; htmlAttributes, &lt;/b&gt;para&amp;nbsp;o&amp;nbsp;desenvolvedor personalizar as tags geradas&lt;b&gt;.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;A classe&lt;span id=&quot;goog_1217239307&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1217239308&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://draft.blogger.com/&quot;&gt;&lt;/a&gt; &lt;span id=&quot;goog_1217239298&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1217239299&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1217239292&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://www.asp.net/mvc/tutorials/older-versions/views/using-the-tagbuilder-class-to-build-html-helpers-cs&quot;&gt;&lt;span id=&quot;goog_1217239312&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1217239315&quot;&gt;&lt;/span&gt;TagBu&lt;span id=&quot;goog_1217239295&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1217239296&quot;&gt;&lt;/span&gt;ilder&lt;span id=&quot;goog_1217239293&quot;&gt;&lt;/span&gt; &lt;span id=&quot;goog_1217239316&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1217239313&quot;&gt;&lt;/span&gt;&lt;/a&gt;é usada para construir uma tag HTML qualquer, bastando apenas passar o seu nome para o construtor. Ela oferece várias comodidades, como por exemplo, poder setar o InnerHtml e gerenciar os atributos HTML.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXRz0ia3-TTEsX0g01NtUp6lQEXAyZMobNtGI8WfQFvz8Zrqi-INTP3ibNtuM2T5YAbbgI0PQijSarjX-295fleiBy8uvRQFzAOIqYfWJf5sG_jRcsZumb_3J_wuDg8zqhkBuI4nPg7bo-/s1600/2013-08-02+19_04_57-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXRz0ia3-TTEsX0g01NtUp6lQEXAyZMobNtGI8WfQFvz8Zrqi-INTP3ibNtuM2T5YAbbgI0PQijSarjX-295fleiBy8uvRQFzAOIqYfWJf5sG_jRcsZumb_3J_wuDg8zqhkBuI4nPg7bo-/s1600/2013-08-02+19_04_57-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;i style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;Helpers/CheckBoxListHelper.cs&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O código é bem simples, uso um fieldset, seto a legenda vindo do parametro e construo uma &lt;b&gt;ul &lt;/b&gt;com a lista &lt;b&gt;ChekBoxList&lt;/b&gt;. Usei o próprio helper &lt;b&gt;CheckBox &lt;/b&gt;para gerar o campo. Perceba que eu concateno coisas. Isso mesmo!!! O que é gerado nada mais é que String, mais especificamente &lt;a href=&quot;http://msdn.microsoft.com/pt-br/library/system.web.mvc.mvchtmlstring(v=vs.100).aspx&quot;&gt;MvcHtmlString&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3 style=&quot;background-color: white; color: #222222; margin: 0px; position: relative;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Usando o Helper&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;É cômodo adicionar a referência no &lt;b&gt;Web.config&lt;/b&gt;. Dessa forma não é necessário importa o namespace em todas as Views que você criar.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7rBhlQuZLhNjacyK3Rgfc5j3M1Y5YqtG8s-nS1iqcKVbzT1BLReRtfwMQEnyyiWSRyxplyi0Nao4sb9CfIwzWtpwcN19nKEZZ5Sd4KqlgBr07lqYGOOz1yZvVQEpEF5XH6LSB0LRSsgSi/s1600/2013-08-02+16_13_37-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg7rBhlQuZLhNjacyK3Rgfc5j3M1Y5YqtG8s-nS1iqcKVbzT1BLReRtfwMQEnyyiWSRyxplyi0Nao4sb9CfIwzWtpwcN19nKEZZ5Sd4KqlgBr07lqYGOOz1yZvVQEpEF5XH6LSB0LRSsgSi/s1600/2013-08-02+16_13_37-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;&lt;i&gt;Views/Web.config&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Agora basta utilizar o &lt;b&gt;Helper&lt;/b&gt;:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTQAH0XvQDp0J3MmGFrgbmUFM023izH-PxSt1odhARHhF1FgbhIEfUZD9sQ-21JSYIxRUCYTP0rd5n1vGM68ebb1ff7lgPRSS7eo8tpSXPXkUAdFd9dmerNJGso3xWt_64AAoTJRQLn9Jb/s1600/2013-08-02+16_17_59-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span id=&quot;goog_1217239278&quot;&gt;&lt;/span&gt;&lt;img border=&quot;0&quot; height=&quot;75&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjTQAH0XvQDp0J3MmGFrgbmUFM023izH-PxSt1odhARHhF1FgbhIEfUZD9sQ-21JSYIxRUCYTP0rd5n1vGM68ebb1ff7lgPRSS7eo8tpSXPXkUAdFd9dmerNJGso3xWt_64AAoTJRQLn9Jb/s640/2013-08-02+16_17_59-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio+(Administrator).png&quot; width=&quot;640&quot; /&gt;&lt;span id=&quot;goog_1217239279&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;O resultado gerado por esse &lt;b&gt;Helper &lt;/b&gt;é esse:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF0KeXfdslz9yRw_SP8kYDoVnOpneVIR6WNQHfygSC38sjgxFES6Qs6Ihg6frvwJ34cHwZnolVK91Y4qk11y2TomdL-KwDFB5o45S9zcfykrAbLIQM701wxjrM-G9Y5DT62lR3TDNVpDqZ/s1600/2013-08-02+16_24_05-Index.png&quot; imageanchor=&quot;1&quot; style=&quot;clear: right; float: right; margin-bottom: 1em; margin-left: 1em; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF0KeXfdslz9yRw_SP8kYDoVnOpneVIR6WNQHfygSC38sjgxFES6Qs6Ihg6frvwJ34cHwZnolVK91Y4qk11y2TomdL-KwDFB5o45S9zcfykrAbLIQM701wxjrM-G9Y5DT62lR3TDNVpDqZ/s1600/2013-08-02+16_24_05-Index.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;76&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiF0KeXfdslz9yRw_SP8kYDoVnOpneVIR6WNQHfygSC38sjgxFES6Qs6Ihg6frvwJ34cHwZnolVK91Y4qk11y2TomdL-KwDFB5o45S9zcfykrAbLIQM701wxjrM-G9Y5DT62lR3TDNVpDqZ/s200/2013-08-02+16_24_05-Index.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;i&gt;Html&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;margin-left: 1em; margin-right: 1em; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvSmQo6adEOR2nvifubLAWSvmZ97mV-Ke1Z1n16HJ8fc4-m9dJqOL7lujrzpVrHexgcjYBrQrcuU2UmsI3v2iABmNqWsIDS_H9ueZG_MllZJJDroePNPACcqH_3FRtIu6vba4rNod1CHK1/s1600/2013-08-02+16_20_23-Index.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvSmQo6adEOR2nvifubLAWSvmZ97mV-Ke1Z1n16HJ8fc4-m9dJqOL7lujrzpVrHexgcjYBrQrcuU2UmsI3v2iABmNqWsIDS_H9ueZG_MllZJJDroePNPACcqH_3FRtIu6vba4rNod1CHK1/s1600/2013-08-02+16_20_23-Index.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvSmQo6adEOR2nvifubLAWSvmZ97mV-Ke1Z1n16HJ8fc4-m9dJqOL7lujrzpVrHexgcjYBrQrcuU2UmsI3v2iABmNqWsIDS_H9ueZG_MllZJJDroePNPACcqH_3FRtIu6vba4rNod1CHK1/s1600/2013-08-02+16_20_23-Index.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;173&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvSmQo6adEOR2nvifubLAWSvmZ97mV-Ke1Z1n16HJ8fc4-m9dJqOL7lujrzpVrHexgcjYBrQrcuU2UmsI3v2iABmNqWsIDS_H9ueZG_MllZJJDroePNPACcqH_3FRtIu6vba4rNod1CHK1/s200/2013-08-02+16_20_23-Index.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Espero que tenham gostado do artigo. O código de exemplo pode ser baixado &lt;a href=&quot;http://sdrv.ms/145Qcac&quot;&gt;aqui&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;a href=&quot;http://draft.blogger.com/&quot;&gt;&lt;/a&gt;&lt;span id=&quot;goog_1217239300&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1217239301&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://draft.blogger.com/&quot;&gt;&lt;/a&gt;&lt;span id=&quot;goog_1217239302&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1217239303&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://draft.blogger.com/&quot;&gt;&lt;/a&gt;&lt;span id=&quot;goog_1217239304&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1217239305&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://draft.blogger.com/&quot;&gt;&lt;/a&gt;&lt;span id=&quot;goog_1217239309&quot;&gt;&lt;/span&gt;&lt;span id=&quot;goog_1217239310&quot;&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;
</description><link>http://codingfirst.blogspot.com/2013/08/aspnet-mvc-criando-um-htmlhelper.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0f6CvovNSZ6VOz6u_SwsXJu8hyyvrAQyHCe4CEF5R75XwzWha5e9X9j6MBa-QSRpVMFs7hs2glLeDohUKJtdiUCnzSFVQINZdxLN3nKIXzSzHOYOHc3S1PNFyhUXuKD64-YrQCnox-cah/s72-c/2013-08-02+15_14_21-Fals.CustomHtmlHelper+-+Microsoft+Visual+Studio+(Administrator).png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1104298155886631006.post-6411576268797012882</guid><pubDate>Thu, 01 Aug 2013 13:03:00 +0000</pubDate><atom:updated>2013-10-03T21:22:26.999-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">JQuery UI</category><category domain="http://www.blogger.com/atom/ns#">Web API</category><title>ASP.NET Web API - AutoComplete usando Web API, Jquery UI e JSON</title><description>&lt;h3&gt;
&lt;/h3&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 18.203125px;&quot;&gt;ASP.NET Web API é um framework para construir APIs&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;line-height: 18.203125px;&quot;&gt;web&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;line-height: 18.203125px;&quot;&gt;em cima do .NET Framework. Neste tutorial,&amp;nbsp;&lt;/span&gt;vou mostrar com fazer um simples AutoComplete usando WebApi retornando JSON e Jquery UI. É necessário Visual Studio 2010/2012 com o template do&amp;nbsp;&lt;strong style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;ASP.NET MVC 4 Project &lt;/strong&gt;&lt;span style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;instalados&lt;/span&gt;&lt;strong style=&quot;border: 0px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;.&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 18.203125px;&quot;&gt;Parte 2:&amp;nbsp;&lt;a href=&quot;http://codingfirst.blogspot.com.br/2013/08/aspnet-web-api-autocomplete-com-imagem.html&quot;&gt;ASP.NET Web API - AutoComplete com imagem usando Web API, Jquery UI e JSON&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Criando o projeto Web Api&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; line-height: 18.203125px; text-align: justify;&quot;&gt;No Visual Studio, para um novo projeto:&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;line-height: 18.203125px;&quot;&gt;File-&amp;gt;&lt;/span&gt;&lt;span style=&quot;border: 0px; color: #222222; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;New Project-&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #222222; line-height: 18.203125px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;border: 0px; color: #222222; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Templates-&amp;gt;&lt;/span&gt;&lt;span style=&quot;border: 0px; color: #222222; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Installed Templates-&amp;gt;&lt;/span&gt;&lt;span style=&quot;border: 0px; color: #222222; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Visual C#-&amp;gt;&lt;/span&gt;&lt;span style=&quot;border: 0px; color: #222222; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;ASP.NET MVC 4 Web Application&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Na janela selecione&amp;nbsp;&lt;strong style=&quot;border: 0px; color: #222222; font-size: 13px; line-height: 18.203125px; margin: 0px; outline: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Web API.&lt;/strong&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Caso já tenha um projeto MVC:&lt;/span&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Adicione referência para&amp;nbsp;&lt;code style=&quot;background-color: #eeeeee; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;System.Web.Http.WebHost&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Adicione o arquivo&amp;nbsp;&lt;code style=&quot;background-color: #eeeeee; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;App_Start\WebApiConfig.cs&lt;/code&gt;&amp;nbsp;(use como exemplo o código do post).&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Adicione using&amp;nbsp;&lt;code style=&quot;background-color: #eeeeee; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;System.Web.Http&lt;/code&gt;&amp;nbsp;in&amp;nbsp;&lt;code style=&quot;background-color: #eeeeee; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Global.asax.cs&lt;/code&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Chame&amp;nbsp;&lt;code style=&quot;background-color: #eeeeee; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;WebApiConfig.Register(GlobalConfiguration.Configuration)&lt;/code&gt;&amp;nbsp;na função Start&amp;nbsp;&lt;code style=&quot;background-color: #eeeeee; border: 0px; margin: 0px; padding: 0px; vertical-align: baseline;&quot;&gt;Global.asax.cs&lt;/code&gt;,&amp;nbsp;&lt;i&gt;antes da rota MVC, por causa de sua precedência&lt;/i&gt;.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;
Criando o Modelo AutoComplete&lt;/span&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Para criar o nosso resultado JSON vou usar um modelo que pode ser reutilizado toda vez que precisarmos da funcionalidade, chamado AutoCompleteModel. Esse modelo possui os campos padrão que a função do Jquery UI utiliza. Segundo a documentação oficial pode ser de duas maneiras:&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;ul style=&quot;background-color: white; box-sizing: border-box; color: #333333; font-family: &#39;Helvetica Neue&#39;, HelveticaNeue, Helvetica, Arial, sans-serif; font-size: 15px; line-height: 20px; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;
&lt;li style=&quot;background-image: url(http://api.jqueryui.com/jquery-wp-content/themes/jquery/images/bullet.png); background-position: 0px 10px; background-repeat: no-repeat no-repeat; box-sizing: border-box; list-style-type: none; padding-bottom: 5px; padding-left: 20px; padding-top: 5px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Lista de Strings:&amp;nbsp;&lt;code style=&quot;background-color: #eeeeee; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; box-sizing: border-box; font-family: source-code-pro, Consolas, monospace !important; font-size: 13px; line-height: 16px; padding: 0px 3px; white-space: pre;&quot;&gt;[ &quot;Choice1&quot;, &quot;Choice2&quot; ]&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;background-color: white; box-sizing: border-box; color: #333333; font-family: &#39;Helvetica Neue&#39;, HelveticaNeue, Helvetica, Arial, sans-serif; font-size: 15px; line-height: 20px; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;
&lt;li style=&quot;background-image: url(http://api.jqueryui.com/jquery-wp-content/themes/jquery/images/bullet.png); background-position: 0px 10px; background-repeat: no-repeat no-repeat; box-sizing: border-box; list-style-type: none; padding-bottom: 5px; padding-left: 20px; padding-top: 5px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Array de objetos com as propriedades&amp;nbsp;&lt;code style=&quot;background-color: #eeeeee; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; box-sizing: border-box; font-family: source-code-pro, Consolas, monospace !important; font-size: 13px; line-height: 16px; padding: 0px 3px; white-space: pre;&quot;&gt;label&lt;/code&gt;&amp;nbsp;e&lt;code style=&quot;background-color: #eeeeee; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; box-sizing: border-box; font-family: source-code-pro, Consolas, monospace !important; font-size: 13px; line-height: 16px; padding: 0px 3px; white-space: pre;&quot;&gt;value&lt;/code&gt;:&lt;code style=&quot;background-color: #eeeeee; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; border-top-left-radius: 3px; border-top-right-radius: 3px; box-sizing: border-box; font-family: source-code-pro, Consolas, monospace !important; font-size: 13px; line-height: 16px; padding: 0px 3px; white-space: pre;&quot;&gt;[ { label: &quot;Choice1&quot;, value: &quot;value1&quot; }, ... ]&lt;/code&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;color: #333333; font-family: source-code-pro, Consolas, monospace; font-size: xx-small;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; line-height: 16px; white-space: pre;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Neste exemplo vou trabalhar com o Array de objetos, que será representado pelo objeto AutoComplete. Na maioria dos casos o desenvolvedor trabalha neste modelo, dado que é necessário usar o Value, que pode representar uma chave primária ou outra informação que será essencial para executar alguma lógica ao submeter o form.&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlFOy_-q0-btSNhjthQaxhdHd5uks3C_lhoSe0VLFJmVv0C8tQLmvQ-hEFnVB5WJeiulghYFaSw5fo0OKdZKIoo2tEm_I551ndwOsEC5iUu1mnruGeWGPavuULz06Y069ur-iYhofgvHd9/s1600/2013-08-01+08_49_01-Fals.WebApiAutoComplete+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlFOy_-q0-btSNhjthQaxhdHd5uks3C_lhoSe0VLFJmVv0C8tQLmvQ-hEFnVB5WJeiulghYFaSw5fo0OKdZKIoo2tEm_I551ndwOsEC5iUu1mnruGeWGPavuULz06Y069ur-iYhofgvHd9/s1600/2013-08-01+08_49_01-Fals.WebApiAutoComplete+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Model/AutoCompleteModel.cs&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Criando nossa API&lt;/span&gt;&lt;/h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Nossa API será bem simples, vamos criar uma Action que retorne uma lista de AutoComplete passando como parametro uma string com nome &lt;b&gt;term. &lt;/b&gt;Fica como observação que &lt;b&gt;term&lt;/b&gt; é o nome padrão que o Jquery UI AutoComplete usa na requisição, logo seu método action deve receber exatamente esse nome nesse caso.&lt;/span&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhawyk64e-WqNlpdMqPz01NOJ9O8yYaeZ_vDTPn3RrlsrKPrCEsn6jzTLJhvHYLLBOZ_HQuOSSYm_dcK2anM6isVqu05IEm1t0aUXNJzjts5ZbBDiXPDtK9ny46AJ0zH8vNfoj4YdQtD5g3/s1600/2013-08-01+09_14_45-Fals.WebApiAutoComplete+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhawyk64e-WqNlpdMqPz01NOJ9O8yYaeZ_vDTPn3RrlsrKPrCEsn6jzTLJhvHYLLBOZ_HQuOSSYm_dcK2anM6isVqu05IEm1t0aUXNJzjts5ZbBDiXPDtK9ny46AJ0zH8vNfoj4YdQtD5g3/s1600/2013-08-01+09_14_45-Fals.WebApiAutoComplete+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;i&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;Controller/AutoCompleteController.cs&lt;/span&gt;&lt;/i&gt;&lt;br /&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Especificando AcceptVerbs na Action nos permite que chamemos nosso método como api/AutoComplete/Cars. Mas fazendo isso se faz necessário especificar também o método, no nosso caso é um GET, então HttpGet. Isso é somente perfumaria, para que fique mais legível a url.&lt;/span&gt;&lt;/div&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Configurando a API&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;A configuração de rotas que vou usar é a que vem por padrão no projeto. Uma coisa que deve ser mudada está relacionado com o Formatter. Por padrão, o Formatter utilizado no Web Api é o XML, mas no nosso caso queremos JSON. Outra coisa está relacionada ao nome das propriedades, dado que em nosso modelo elas estão em case diferente do que é requerido pela função (está Value, precisa ser value).&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDsw1MEJSM7nUiQdqbV6PINAlXnudeIcQqTw9f3RBisWGSCbVSeYpJ-3KFEfdW-gyS00wWvnF7N0pk6m2epDoKjTVV2iJXGmDNHUVjMQWVJFW1oI5gAaWBP3z1YsGs81kS3iecy87u2cDU/s1600/2013-08-01+09_26_12-Fals.WebApiAutoComplete+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiDsw1MEJSM7nUiQdqbV6PINAlXnudeIcQqTw9f3RBisWGSCbVSeYpJ-3KFEfdW-gyS00wWvnF7N0pk6m2epDoKjTVV2iJXGmDNHUVjMQWVJFW1oI5gAaWBP3z1YsGs81kS3iecy87u2cDU/s1600/2013-08-01+09_26_12-Fals.WebApiAutoComplete+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;i style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: x-small;&quot;&gt;App_Start/WebApiConfig.cs&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Nossa Api já está funcionando, podemos acessá-la pelo próprio browser.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinU8A44O8WDUkspCrIC8Ni9g6VMHXtstE53zZZDLXWnF4484PjGzU1wgItWwYygrq5jjgIheafglpnSfEMMTzRxrM_zabliFz1dAtuXmlQmM2bNfOlGgiV7fb6kqkXXNq6dyAqh1QMXEsB/s1600/2013-08-01+09_28_55-localhost_62148_api_AutoComplete_Cars_term=1995.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;169&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinU8A44O8WDUkspCrIC8Ni9g6VMHXtstE53zZZDLXWnF4484PjGzU1wgItWwYygrq5jjgIheafglpnSfEMMTzRxrM_zabliFz1dAtuXmlQmM2bNfOlGgiV7fb6kqkXXNq6dyAqh1QMXEsB/s320/2013-08-01+09_28_55-localhost_62148_api_AutoComplete_Cars_term=1995.png&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Criando os campos View&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Na View haverão dois campos: um input que será usado para autocomplete e um div de log que receberá o que for selecionado. Eu usei basicamente o mesmo html que está no site de referência do &lt;a href=&quot;http://jqueryui.com/autocomplete/#remote&quot;&gt;Jquery UI Autocomplete&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjudlEgN0M67siW7iAgM7RAy4hpY6u_V3j1-kGotQf4sO_TWnzuSLPqSC5NO7Pm3gApdna1qXL-Kl0lhty-oiwanxLMzR6xoktZmQEl0Ah6xFxtdcLMcZcCDRSO1VxcGb6Eik2pGXdyfcIL/s1600/2013-08-01+09_00_38-Fals.WebApiAutoComplete+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjudlEgN0M67siW7iAgM7RAy4hpY6u_V3j1-kGotQf4sO_TWnzuSLPqSC5NO7Pm3gApdna1qXL-Kl0lhty-oiwanxLMzR6xoktZmQEl0Ah6xFxtdcLMcZcCDRSO1VxcGb6Eik2pGXdyfcIL/s1600/2013-08-01+09_00_38-Fals.WebApiAutoComplete+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp; &lt;i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Views/Home/Index.cshtml&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Esse HTML nos dá como resultado o seguinte:&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimsbGOenGKs7uKcaPfBWybiajjUUAXhEkEThk0zcPzSErEnm9TUG5BJR4pvQw73zy9F8pYRcwaRlGvCDRVtM2K0x1PoiaH83Q191OkJGOblV_mOijTfCcNW2CWPzgA80hAjCo-s8sYR4Jo/s1600/2013-08-01+09_04_05-WebApi+-+Auto+Complete.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;168&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimsbGOenGKs7uKcaPfBWybiajjUUAXhEkEThk0zcPzSErEnm9TUG5BJR4pvQw73zy9F8pYRcwaRlGvCDRVtM2K0x1PoiaH83Q191OkJGOblV_mOijTfCcNW2CWPzgA80hAjCo-s8sYR4Jo/s200/2013-08-01+09_04_05-WebApi+-+Auto+Complete.png&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;b&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;Criando a função JavaScript&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Para o auto complete foi usado o&amp;nbsp;&lt;a href=&quot;http://jqueryui.com/autocomplete&quot;&gt;Jquery UI AutoComplete&lt;/a&gt;. O exemplo é simples, vamos consultar remotamente nosso caminho de API, retornar um JSON já no formato esperado e ao selecionarmos um elemento esse será colocado no campo Result. A função foi baseada no exemplo do site oficial do Jquery, fiz algumas alterações apenas para adequar o source a nosso local e os nomes dos campos que mudei.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhtyWsxQQjceciUVNs9AvnduH97YdqcA4lN8W1TBuNjniJXh5TXfQA0Ubn9iOwMoKNz8wxo59cO7jWEV17y0srXrIipgVogw60IIFteDjhLM4Bj66CbKap8-puwG9Uq5ENGqZUYjP31y0C/s1600/2013-08-01+09_09_13-Fals.WebApiAutoComplete+(Running)+-+Microsoft+Visual+Studio+(Administrator).png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhtyWsxQQjceciUVNs9AvnduH97YdqcA4lN8W1TBuNjniJXh5TXfQA0Ubn9iOwMoKNz8wxo59cO7jWEV17y0srXrIipgVogw60IIFteDjhLM4Bj66CbKap8-puwG9Uq5ENGqZUYjP31y0C/s1600/2013-08-01+09_09_13-Fals.WebApiAutoComplete+(Running)+-+Microsoft+Visual+Studio+(Administrator).png&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&amp;nbsp;&lt;i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;Views/Home/Index.cshtml&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: large;&quot;&gt;&lt;b&gt;Finalizando&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Já com tudo pronto é possível utilizar nosso autocomplete. Ao digitar dois ou mais caracteres o campo exibe as opções de busca.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGM4PJW7I5-O_ZUhwNakqHaYs5qMxS3yvWrlnq4RcJp2PmTa4m1snG7M0ZteoolQwSo5XuGMN0hBDWMQSIZA10TdxmIN0LEZsNYzSrWASf4NXknU-1IaEa0xNPykJ79Cnzf08Res_jY8YQ/s1600/2013-08-01+09_32_10-WebApi+-+Auto+Complete.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;200&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGM4PJW7I5-O_ZUhwNakqHaYs5qMxS3yvWrlnq4RcJp2PmTa4m1snG7M0ZteoolQwSo5XuGMN0hBDWMQSIZA10TdxmIN0LEZsNYzSrWASf4NXknU-1IaEa0xNPykJ79Cnzf08Res_jY8YQ/s200/2013-08-01+09_32_10-WebApi+-+Auto+Complete.png&quot; width=&quot;152&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Ao selecionar um registro, é adicionado ao Log.&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_3w7WesPRHeQat3-aQYu4-mOgC10Lyc-GthfuC-sK4v5GO8KadueSZW8H8eQ3e9-UhwueasMXtOEzA33ZB52DXjnyaJn8XEekRozhE0uWzk0SsdkZlyQoIeoWSk-kXHaLZKIJaWlF0_g6/s1600/2013-08-01+09_34_40-WebApi+-+Auto+Complete.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;176&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_3w7WesPRHeQat3-aQYu4-mOgC10Lyc-GthfuC-sK4v5GO8KadueSZW8H8eQ3e9-UhwueasMXtOEzA33ZB52DXjnyaJn8XEekRozhE0uWzk0SsdkZlyQoIeoWSk-kXHaLZKIJaWlF0_g6/s200/2013-08-01+09_34_40-WebApi+-+Auto+Complete.png&quot; width=&quot;200&quot; /&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: justify;&quot;&gt;
&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;Web API e JSON trazem benéfícios impressionantes em relação a banda. A requisição dessa lista auto complete por exemplo não passou de 502 bytes. Espero que tenham gostado, o exemplo pode ser baixado &lt;a href=&quot;http://sdrv.ms/1bNHR0R&quot;&gt;aqui&lt;/a&gt;.&lt;/span&gt;&lt;/div&gt;
&lt;ul style=&quot;text-align: justify;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;line-height: 18.203125px;&quot;&gt;Parte 2:&amp;nbsp;&lt;a href=&quot;http://codingfirst.blogspot.com.br/2013/08/aspnet-web-api-autocomplete-com-imagem.html&quot;&gt;ASP.NET Web API - AutoComplete com imagem usando Web API, Jquery UI e JSON&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</description><link>http://codingfirst.blogspot.com/2013/08/aspnet-web-api-autocomplete-usando-web.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjlFOy_-q0-btSNhjthQaxhdHd5uks3C_lhoSe0VLFJmVv0C8tQLmvQ-hEFnVB5WJeiulghYFaSw5fo0OKdZKIoo2tEm_I551ndwOsEC5iUu1mnruGeWGPavuULz06Y069ur-iYhofgvHd9/s72-c/2013-08-01+08_49_01-Fals.WebApiAutoComplete+-+Microsoft+Visual+Studio+(Administrator).png" height="72" width="72"/><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1104298155886631006.post-5625552676216384798</guid><pubDate>Wed, 20 Feb 2013 21:47:00 +0000</pubDate><atom:updated>2013-08-12T06:22:09.809-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET WebForms</category><title>ASP.NET WebForms - Urls simplificadas usando o FriendlyUrls</title><description>No dia 18/02/2012 saiu mais um patch de atualização &lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkId=282650&quot;&gt;ASP.NET and Web Tools 2012.2 update&lt;/a&gt;. 
Dentre as várias melhorias contidas nesse patch a que mais chamou minha atenção foi o suporte nativo a FriendlyUrls, que torna possível usar o sistema 
de rotas introduzido no ASP.NET v4.0 de maneira fácil com o WebForms. 
&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;
Conceito&lt;/h1&gt;
&lt;br /&gt;
Para aqueles que já programaram para a plataforma ASP.NET MVC/WebApi notaram a estrutura bem definida das Urls organizadas por diretórios, actions e controllers.
Com o lançamento deste novo patch ficou simples disponibilizar em sua aplicação Urls que independem da extensão de seu arquivo WebForm. Isso, graças
a uma nova classe helper, FriendlyUrls que disponibiliza uma série de métodos que fazem o &quot;trabalho sujo por trás dos panos&quot;.
&lt;br /&gt;


&lt;br /&gt;
&lt;h1&gt;
Implementação&lt;/h1&gt;
&lt;br /&gt;
Se você estiver criando um novo projeto ASP.NET WebForms depois de instalar o &lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkId=282650&quot;&gt;ASP.NET and Web Tools 2012.2 update&lt;/a&gt;
as configurações do FriendlyUrls já vem habilitadas por padrão. Caso contrário basta adicionar via NuGet, abrindo o Pack Mananger Console, usando o comando 
&quot;Install-Package Microsoft.AspNet.FriendlyUrls -Pre&quot;.
&lt;br /&gt;


Com o FriendlyUrls instalado no seu projeto resta somente programação. Criei uma classe chamada RouteConfig para habilitar o FriendlyUrls e no Global.asax usei essa classe para
registrar as rotas na tabela. 
&lt;br /&gt;


&lt;pre class=&quot;brush: csharp; gutter: false&quot;&gt;    public static class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.EnableFriendlyUrls();
        }
    }
 
    public class Global : HttpApplication
    {
        void Application_Start(object sender, EventArgs e)
        {
            BundleConfig.RegisterBundles(BundleTable.Bundles);
            AuthConfig.RegisterOpenAuth();
            RouteConfig.RegisterRoutes(RouteTable.Routes);
        }
    }
&lt;/pre&gt;
O método EnableFriendlyUrls() é um extension method da classe FriendlyUrls que faz todo o trabalho duro. Agora basta digitar o 
endereço de página sem se preocupar com a extensão .aspx. Uma observação é que se a página estiver continda dentro de um
diretório com o mesmo nome desta, ele não consegue resolver a rota.
&lt;br /&gt;


A classe FriendlyUrls trás alguns métodos interessantes. Na imagem abaixo em amarelo estão a Url que acessei e o caminho
virtual obtido com a chamada do método.
&lt;br /&gt;

&lt;pre class=&quot;brush: csharp; gutter: false&quot;&gt; //Recupera o caminho virtual da página
 Request.GetFriendlyUrlFileVirtualPath();
&lt;/pre&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnqPaQO1GjBhdQ0QRYn4fCLhLCjm3OrUHoQOjnG47r8vX8DqCZlB09TKtFuLEzmcj0sZqYbK67_v3H4kVVm524tP5AR3XhuH10Df_cPXBIPmN29T50qkdmS5_0qsXrxO4p4L3shx0esxcw/s1600/2013-02-20+18_30_01-First+Page+-+Asp.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnqPaQO1GjBhdQ0QRYn4fCLhLCjm3OrUHoQOjnG47r8vX8DqCZlB09TKtFuLEzmcj0sZqYbK67_v3H4kVVm524tP5AR3XhuH10Df_cPXBIPmN29T50qkdmS5_0qsXrxO4p4L3shx0esxcw/s320/2013-02-20+18_30_01-First+Page+-+Asp.png&quot; /&gt;&lt;/a&gt;

&lt;pre class=&quot;brush: csharp; gutter: false&quot;&gt; //Recupera os segmentos da url
 Request.GetFriendlyUrlSegments();
&lt;/pre&gt;
Com esse método é possível recuperar os segmentos da Url. Veja que tudo que vem após o nome da página é considerado
como segmento.&lt;br /&gt;


&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf7XhoZdSTyzGo0sMKmI_-Z9lF_gTXHuj-0M-tkWUaIvNmKecyJIlqrrZ0zaAPQs3znOKFC8QSYYwo7hKDr4_52mG2l513_4YElytxYZD9E49kSZWSkgugbajXkhKJD1UCdbmrKHqcw6G8/s1600/2013-02-20+18_31_15-Query+String+-+Asp.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgf7XhoZdSTyzGo0sMKmI_-Z9lF_gTXHuj-0M-tkWUaIvNmKecyJIlqrrZ0zaAPQs3znOKFC8QSYYwo7hKDr4_52mG2l513_4YElytxYZD9E49kSZWSkgugbajXkhKJD1UCdbmrKHqcw6G8/s320/2013-02-20+18_31_15-Query+String+-+Asp.png&quot; /&gt;&lt;/a&gt;

&lt;pre class=&quot;brush: csharp; gutter: false&quot;&gt; //Ajuda a criar os links para as páginas
 FriendlyUrl.Href(&quot;~/Pages/QueryStringPage&quot;, &quot;ID&quot;, &quot;1001&quot;);
&lt;/pre&gt;
Grifado na imagem abaixo está uma Url criada com um método utilitário da classe.
&lt;br /&gt;


&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoJBlm6TCq0UmYdWPbQno-4M9m5ylbLIiHCbIlf8y2c83nGIOKdVhgfQuJPTru_hirS6BYe3PLNd0SP6naWa3EeACsFz-Q27HP8IpClTAX0wZQno1_8EEL8jd-M9-qUIvlflIwqk44cEbR/s1600/2013-02-20+18_30_42-Second+Page+-+Asp.png&quot; imageanchor=&quot;1&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhoJBlm6TCq0UmYdWPbQno-4M9m5ylbLIiHCbIlf8y2c83nGIOKdVhgfQuJPTru_hirS6BYe3PLNd0SP6naWa3EeACsFz-Q27HP8IpClTAX0wZQno1_8EEL8jd-M9-qUIvlflIwqk44cEbR/s320/2013-02-20+18_30_42-Second+Page+-+Asp.png&quot; /&gt;&lt;/a&gt;

Espero que a dica seja útil! Não deixem de baixar o &lt;a href=&quot;http://go.microsoft.com/fwlink/?LinkId=282650&quot;&gt;ASP.NET and Web Tools 2012.2 update&lt;/a&gt;.
O exemplo que criei pode ser baixado &lt;a href=&quot;http://sdrv.ms/WRI5tr&quot;&gt;aqui&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
</description><link>http://codingfirst.blogspot.com/2013/02/aspwebform-urls-simplificadas-usando-o.html</link><author>noreply@blogger.com (Anonymous)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjnqPaQO1GjBhdQ0QRYn4fCLhLCjm3OrUHoQOjnG47r8vX8DqCZlB09TKtFuLEzmcj0sZqYbK67_v3H4kVVm524tP5AR3XhuH10Df_cPXBIPmN29T50qkdmS5_0qsXrxO4p4L3shx0esxcw/s72-c/2013-02-20+18_30_01-First+Page+-+Asp.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1104298155886631006.post-8220084251325452628</guid><pubDate>Tue, 19 Feb 2013 00:52:00 +0000</pubDate><atom:updated>2013-08-12T06:22:39.997-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">Web API</category><title> ASP.NET Web API / HTML5 - Streaming de áudio e vídeo assincronamente</title><description>Muita gente acha que a WebApi é apenas um Framework para desenvolver outros Frameworks. Mas na verdade é uma maneira de usar o máximo de desempenho e controle sobre aplicativos que utilizam HTTP. Neste breve texto irei mostrar como fazer streaming de áudio e vídeo assincronamente usando ASP.NET WebApi.
&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;
Conceito básico&lt;/h1&gt;
&lt;br /&gt;
Para enviarmos dados assincronamente tiraremos proveito da nova classe PushStreamContent  contida no namespace System.Net.Http. Essa classe permite que possamos enviar pacotes por demanda para o cliente. A referência que tive veio do blog &lt;a href=&quot;http://draft.blogger.com/%E2%80%9Dhttp://weblogs.asp.net/andresv/%E2%80%9D&quot;&gt;Andru&#39;s WebLog&lt;/a&gt;.
Em nosso caso leremos o arquivo do disco do servidor e o enviaremos pouco a pouco para o cliente que visualizará ou escutará a mídia por meio de controles HTML5 de áudio e vídeo.
&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;
Implementação&lt;/h1&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp; gutter: false&quot;&gt;//A classe recebe como construtor uma Action
public PushStreamContent(Action&lt;stream httpcontent=&quot;&quot; transportcontext=&quot;&quot;&gt; onStreamAvailable);

&lt;/stream&gt;&lt;/pre&gt;
Criei uma classe de ajuda que lê a mídia do disco do servidor e assincronamente a salva em um buffer e libera para o cliente de acordo com a demanda. Usei as novas técnicas de programação contidas no C# 5.0 async/await para realizar a tarefa.
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp; gutter: false&quot;&gt;    public class MediaStream
    {
        private readonly string _filename;

        public MediaStream(string filename)
        {
            this._filename = filename;
        }

        public async void WriteToStream(Stream outputStream, HttpContent content, TransportContext context)
        {
            try
            {
                var buffer = new byte[65536];

                using (var media = File.Open(_filename, FileMode.Open, FileAccess.Read))
                {
                    var length = (int)media.Length;
                    var bytesRead = 1;

                    while (length &amp;gt; 0 &amp;amp;&amp;amp; bytesRead &amp;gt; 0)
                    {
                        bytesRead = media.Read(buffer, 0, Math.Min(length, buffer.Length));
                        await outputStream.WriteAsync(buffer, 0, bytesRead);
                        length -= bytesRead;
                    }
                }
            }
            catch (HttpException ex)
            {
                return;
            }
            finally
            {
                outputStream.Close();
            }
        }
    }
&lt;/pre&gt;
Note que a assinatura do método WriteToStream corresponde a assinatura do métodos PushStreamContent.
Logo depois criei duas classes, uma para Vídeo e outra para Áudio ambas filhas da classe MediaStream. Fiz dessa maneira para promover uma certa extensibilidade caso seja necessário fazer algo mais complexo mais tarde.
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp; gutter: false&quot;&gt;    public class VideoStream : MediaStream
    {
        public VideoStream(string filename) : base(filename)
        {

        }
    }
    public class AudioStream : MediaStream
    {
        public AudioStream(string filename) : base(filename)
        {

        }
    }
&lt;/pre&gt;
Agora vamos para a classe Controller para áudio e vídeo, que ficaram bastante simples após a separação nas classes anteriores.
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp; gutter: false&quot;&gt;    public class AudiosController : ApiController
    {
        // GET api/music/5
        public HttpResponseMessage Get(string filename, string ext)
        {
            filename = @&quot;\Content\Audio\&quot; + filename + &quot;.&quot; + ext;

            var audio = new AudioStream(filename);

            var response = Request.CreateResponse();
            response.Content = new PushStreamContent(audio.WriteToStream, new MediaTypeHeaderValue(&quot;audio/&quot; + ext));

            return response;
        }
    }

    public class VideosController : ApiController
    {
        // GET api/music/5
        public HttpResponseMessage Get(string filename, string ext)
        {
            filename = @&quot;\Content\Audio\&quot; + filename + &quot;.&quot; + ext;

            var video = new VideoStream(filename);

            var response = Request.CreateResponse();
            response.Content = new PushStreamContent(video.WriteToStream, new MediaTypeHeaderValue(&quot;video/&quot; + ext));

            return response;
        }
    }
&lt;/pre&gt;
O nome do arquivo deve conter o caminho completo do mesmo em seu servidor, logo quando for fazer o seu teste lembre-se  disso.
Agora para que o cliente possa passar um endereço e consumir os nossos serviços é necessário que este registre uma rota com a padrão correspondendo, neste exemplo estou usando api/extensão/nomeDoArquivo:
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp; gutter: false&quot;&gt;config.Routes.MapHttpRoute(
    name: &quot;DefaultVideo&quot;,
    routeTemplate: &quot;api/{controller}/{ext}/{filename}&quot;
);
&lt;/pre&gt;
&lt;br /&gt;
&lt;h1&gt;
Consumindo os serviços&lt;/h1&gt;
&lt;br /&gt;
Basta criar uma página e adicionar nossos controles HTML5:
&lt;br /&gt;
&lt;pre class=&quot;brush: html; gutter: false&quot;&gt;    &lt;h3&gt;
Música&lt;/h3&gt;
&lt;audio autoplay=&quot;autoplay&quot; controls=&quot;controls&quot;&gt;
        &lt;source src=&quot;/api/audios/mp3/AsRosasNaoFalam&quot; type=&quot;audio/mpeg&quot;&gt;&lt;/source&gt;
    &lt;/audio&gt;
    

    &lt;h3&gt;
Video&lt;/h3&gt;
&lt;video controls=&quot;controls&quot; height=&quot;320&quot; width=&quot;480&quot;&gt;
        &lt;source src=&quot;/api/videos/mp4/OMundoUmMoinho&quot; type=&quot;video/mp4&quot;&gt;&lt;/source&gt;
    &lt;/video&gt;
&lt;/pre&gt;
Agora você pode abrir alguma ferramenta como firebug e ver que o conteúdo está sendo transmitido por streaming e não sendo carregado como um todo. 
Uma observação é que você deve usar o Chrome para fazer seus testes e brincar com este exemplo, eu não consegui fazer funcionar em nenhum outro =).
Espero que tenham gostado da dica, o código fonte se encontra abaixo:
&lt;br /&gt;
&lt;iframe frameborder=&quot;0&quot; height=&quot;120&quot; scrolling=&quot;no&quot; src=&quot;https://skydrive.live.com/embed?cid=1F21ED2E0FF29C98&amp;amp;resid=1F21ED2E0FF29C98%211794&amp;amp;authkey=AHJdzFgDSM0eXKs&quot; width=&quot;98&quot;&gt;&lt;/iframe&gt;
</description><link>http://codingfirst.blogspot.com/2013/02/transmitindo-audio-e-video.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>2</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1104298155886631006.post-7617614212425142828</guid><pubDate>Wed, 19 Sep 2012 20:28:00 +0000</pubDate><atom:updated>2013-08-12T06:23:09.480-07:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">MVC</category><title>ASP.NET MVC – Tratando erros HTTP e Exceções</title><description>Nesse artigo mostrarei um exemplo prático e simples de como exibir mensagens amigáveis caso aconteça um erro HTTP ou alguma exceção em sua aplicação.

&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;
Tratando Erros HTTP&lt;/h1&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Passo 1 – Criando um NotFoundActionResult&lt;/h3&gt;
&lt;br /&gt;
Criaremos nosso próprio ActionResult que retornará nossos erros. Abaixo segue a implementação para o Erro 404, mas nada impede que implemente para outros =).
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp; gutter: false&quot;&gt;public class NotFoundActionResult : ActionResult
{
 private string _viewName;
 public NotFoundActionResult()
 {

 }
 public NotFoundActionResult(string viewName)
 {
  _viewName = viewName;
 }
 public override void ExecuteResult(ControllerContext context)
 {
  context.HttpContext.Response.StatusCode = 404;
  context.HttpContext.Response.TrySkipIisCustomErrors = true;

  new ViewResult { ViewName = string.IsNullOrEmpty(_viewName) ? &quot;Error&quot; : _viewName}.ExecuteResult(context);
 }
}
&lt;/pre&gt;
No método ExecuteResult, indicamos o StatusCode como 404 e setamos TrySkipIisCustomErrors para true para que o IIS não lance suas páginas de exceção.
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Passo 2 – Criando nosso ErrorController&lt;/h3&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp; gutter: false&quot;&gt; public class ErrorController : Controller
    {
        public ActionResult NotFound()
        {
            return new NotFoundActionResult(&quot;NotFound&quot;);
        }
    }
&lt;/pre&gt;
Veja que passei como paramentro o nome da minha View para o NotFoundActionResult que acabamos de criar.
&amp;lt;/&amp;gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Passo 3 – Registrando Filtro&lt;/h3&gt;
&lt;br /&gt;
&lt;br /&gt;
Para que nossas exceções sejam capturadas precisando registrar HandleErrorAttribute na lista de filtros do aplicativo. Dessa forma qualquer exception lançada será capturada.
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp; gutter: false&quot;&gt; public static void RegisterGlobalFilters(GlobalFilterCollection filters)
 {
  filters.Add(new HandleErrorAttribute());
 }
&lt;/pre&gt;
&lt;br /&gt;
&lt;h3&gt;
Passo 4 – Criando uma View personalizada&lt;/h3&gt;
&lt;br /&gt;
Criaremos uma View tipada para HandleErrorInfo, assim caso aconteça uma exception no meio do caminho a mensagem será exibida, caso contrátio ela exibirá a mensagem de página não encontrada. Uma view amigável é muito melhor que a tela amarela da morte lançada pelo IIS =P, principalmente quando é exibida pra o usuário final.
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp; gutter: false&quot;&gt;@model System.Web.Mvc.HandleErrorInfo
@{
    ViewBag.Title = &quot;Ops!&quot;;
}
&lt;hgroup class=&quot;title&quot;&gt;
    &lt;h1 class=&quot;error&quot;&gt;
        Erro.&lt;/h1&gt;
@if (@Model != null)
    {
        &lt;h2 class=&quot;error&quot;&gt;
@Model.Exception&lt;/h2&gt;
}
    else
    {
        &lt;h2&gt;
            Ops! 404 (Page Not Found)!
            

            A página não foi encontrada, provavelmente o 
            endereço foi movido ou removido. 
            Contate seu administrador
            de redes.
        &lt;/h2&gt;
}
&lt;/hgroup&gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;h3&gt;
Passo 5 – Adicionando rotas&lt;/h3&gt;
&lt;br /&gt;
Precisamos registrar duas rotas: uma para tratar os erros para Actions ou Controllers que não existem (NotFound) e outra para tratar qualquer rota que fuja àquelas que foram definidas para nossa aplicação (NotFound-catchall).
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp; gutter: false;&quot;&gt;public static void RegisterRoutes(RouteCollection routes)
{
 routes.IgnoreRoute(&quot;{resource}.axd/{*pathInfo}&quot;);
 routes.MapRoute(
  name: &quot;NotFound&quot;,
  url: &quot;NotFound/{action}/{id}&quot;,
  defaults: new
  {
   controller = &quot;Error&quot;,
   action = &quot;NotFound&quot;,
   id = UrlParameter.Optional
  }
 );
 routes.MapHttpRoute(
  name: &quot;DefaultApi&quot;,
  routeTemplate: &quot;api/{controller}/{id}&quot;,
  defaults: new
  {
   id = RouteParameter.Optional
  }
 );
 routes.MapRoute(
  name: &quot;Default&quot;,
  url: &quot;{controller}/{action}&quot;,
  defaults: new { controller = &quot;Home&quot;, action = &quot;Index&quot;}
 );
 routes.MapRoute(
    name: &quot;NotFound-catchall&quot;,
    url: &quot;{*all}&quot;,
    defaults: new { controller = &quot;Error&quot;, action = &quot;NotFound&quot; }
    );
}
&lt;/pre&gt;
Não se esqueça que a ordem em que as rotas são registradas é a ordem de precedência para validação, logo a útima rota deve ser a genérica (NotFound-catchall) que trata qualquer url inválida.
&lt;br /&gt;
&lt;br /&gt;
&lt;h1&gt;
Tratando Exceções&lt;/h1&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;h3&gt;
Passo 1 – Criando uma View personalizada&lt;/h3&gt;
&lt;br /&gt;
Mais uma vez criaremos uma view tipada para HandleErrorInfo, e usaremos a mensagem de Erro e o Stack Trace capturados. Note que validamos se a requisicão é local para que o usuário final não veja o erro lançado, mas sim uma mensagem amigável.
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp; gutter: false&quot;&gt;@model System.Web.Mvc.HandleErrorInfo

@{
    ViewBag.Title = &quot;Error&quot;;
    Layout = &quot;~/Views/Shared/_Layout.cshtml&quot;;
}

&lt;h2&gt;
Erro&lt;/h2&gt;
&lt;hgroup class=&quot;title&quot;&gt;
    &lt;h1 class=&quot;error&quot;&gt;
Erro&lt;/h1&gt;
&lt;h2 class=&quot;error&quot;&gt;
Erro ao executar a requisição&lt;/h2&gt;
@{
        if (Request.IsLocal)
        {

            if (@Model != null &amp;amp;&amp;amp; @Model.Exception != null)
            {
                &lt;h3&gt;
Exception: @Model.Exception.Message&lt;/h3&gt;
&lt;h3&gt;
Stack Trace: @Model.Exception.StackTrace&lt;/h3&gt;
}
        }
        else
        {
            &lt;h3&gt;
O erro foi reportado ao Administrador.&lt;/h3&gt;
}
    }
&lt;/hgroup&gt;
&lt;/pre&gt;
&lt;br /&gt;
&lt;h1&gt;
Finalizando&lt;/h1&gt;
&lt;br /&gt;
É necessário ativar o customErrors para que nossos erros sejam redirecionados. Assim adicione ao arquivo as seguintes linhas:
&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush: csharp; gutter: false&quot;&gt; &lt;customerrors defaultredirect=&quot;Error&quot; mode=&quot;On&quot;&gt;
      &lt;error redirect=&quot;NotFound&quot; statuscode=&quot;404&quot;&gt;
 &lt;/error&gt;&lt;/customerrors&gt;
&lt;/pre&gt;
Note que adicionei o erro 404 porque nosso ActionResult personalizado trata erros 404. Para cada Erro, você deve incluir uma linha
no arquivo, caso deseje tratálos em páginas separadas.
&lt;br /&gt;

O código fonte desse exemplo está disponível &lt;a href=&quot;http://sdrv.ms/S9FqFA&quot;&gt;aqui&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
</description><link>http://codingfirst.blogspot.com/2012/09/aspnet-mvc-tratando-erros-http-e.html</link><author>noreply@blogger.com (Anonymous)</author><thr:total>0</thr:total></item></channel></rss>