<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Blogs da Lambda3 &#187; Osmar Landin</title>
	<atom:link href="http://blog.lambda3.com.br/L3/osmar-landin/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.lambda3.com.br</link>
	<description></description>
	<lastBuildDate>Fri, 17 May 2013 17:54:13 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Conteúdo do Lambda Day SP 2013</title>
		<link>http://blog.lambda3.com.br/2013/04/conteudo-do-lambda-day-sp-2013/</link>
		<comments>http://blog.lambda3.com.br/2013/04/conteudo-do-lambda-day-sp-2013/#comments</comments>
		<pubDate>Thu, 18 Apr 2013 15:47:58 +0000</pubDate>
		<dc:creator>Osmar Landin</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Eventos]]></category>

		<guid isPermaLink="false">http://blog.lambda3.com.br/?p=5316</guid>
		<description><![CDATA[No último mês de Março foi realizada a primeira edição do Lambda Day. Dias 08 e 09 no Rio de Janeiro e São Paulo, respectivamente. Como não pude participar do evento do RJ, minha intenção aqui é falar um pouco &#8230; <a href="http://blog.lambda3.com.br/2013/04/conteudo-do-lambda-day-sp-2013/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://blog.lambda3.com.br/wp-content/uploads//2013/04/lambda_day.png" rel="lightbox[5316]"><img class="alignnone size-full wp-image-5312" alt="lambda_day.png" src="http://blog.lambda3.com.br/wp-content/uploads//2013/04/lambda_day.png" width="1000" height="134" /></a></p>
<p>No último mês de Março foi realizada a primeira edição do Lambda Day. Dias 08 e 09 no Rio de Janeiro e São Paulo, respectivamente. Como não pude participar do evento do RJ, minha intenção aqui é falar um pouco sobre o evento realizado em São Paulo.</p>
<p>A idéia do Lambda Day surgiu há aproximadamente um ano atrás, e ainda não sabíamos exatamente como o evento deveria ser. A idéia foi sendo processada aos poucos, diversas discussões internas surgiram e depois de muito se refletir a respeito, a idéia finalmente saiu do papel e decidimos realizar esse evento para contar um pouco da história da empresa, tudo o que passamos nesses três anos de vida e compartilhar nossas experiências. Experiências boas e ruins, mas que fizeram a Lambda3 amadurecer, crescer e ter a oportunidade de apresentar tudo isso para a comunidade, através desse evento.<br />
Foi um evento pequeno, com apenas 50 vagas abertas ao público aqui em SP. No entanto, essas 50 vagas esgotaram-se em menos de 24 horas, o que indicaria que o evento seria um sucesso. E felizmente foi. Encontramos diversos membros da comunidade, amigos, clientes e parceiros. Pudemos conversar, trocar experiências, discutir e aprender com cada participante.</p>
<p><strong><span style="font-size: x-large;">Palestras</span></strong><br />
A missão dos palestrantes era entregar conteúdo de qualidade, à altura da Lambda3. Felizmente, acredito que conseguimos alcançar essa meta.<br />
Embora os temas tenham sido bastante variados (desde marketing de produtos digitais até programação funcional), os temas não foram escolhidos ao acaso. Em cada uma das palestras colocamos um pouco do que vivemos em diversos projetos e consultorias.<br />
Todos os palestrantes trabalham na Lambda3, e embora alguns deles sejam bastante experientes, todas as pessoas tiveram a oportunidade de participar. Eu, por exemplo, nunca tinha palestrado em nenhum evento e a ajuda dos mais experientes fez com que eu me sentisse bastante seguro para fazer isso.</p>
<p>Não vou citar cada palestra individualmente pois muito conteúdo foi apresentado. No entanto, aproveito para compartilhar os slides das paletras de São Paulo:</p>
<p><strong><a title="Keynote Lambda Day" href="http://www.slideshare.net/lambda3_br/keynote-lambda-day" target="_blank">Keynote Lambda Day</a></strong><br />
<iframe style="margin-bottom: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; border-bottom: #ccc 0px solid; border-left: #ccc 1px solid;" src="http://www.slideshare.net/slideshow/embed_code/19075046" height="356" width="427" allowfullscreen="allowfullscreen" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<p><strong> <a title="Marketing de Produtos Digitais" href="http://www.slideshare.net/lambda3_br/marketing-de-produtos-digitais-19088813" target="_blank">Marketing de Produtos Digitais</a> </strong><br />
<iframe style="border: 1px solid #CCC; border-width: 1px 1px 0; margin-bottom: 5px;" src="http://www.slideshare.net/slideshow/embed_code/19088813" height="356" width="427" allowfullscreen="" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<p><strong><a title="Web design responsivo" href="http://www.slideshare.net/dyegocosta/web-design-responsivo-17209244" target="_blank">Web Design Responsivo</a> </strong><br />
<iframe style="margin-bottom: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; border-bottom: #ccc 0px solid; border-left: #ccc 1px solid;" src="http://www.slideshare.net/slideshow/embed_code/17209244" height="356" width="427" allowfullscreen="allowfullscreen" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<p><strong><a title="Técnicas de Programação Funcional" href="http://www.slideshare.net/lambda3_br/tcnicas-de-programao-funcional-19079939" target="_blank">Técnicas de Programação Funcional</a> </strong><iframe style="margin-bottom: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; border-bottom: #ccc 0px solid; border-left: #ccc 1px solid;" src="http://www.slideshare.net/slideshow/embed_code/19079939" height="356" width="427" allowfullscreen="allowfullscreen" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<p><strong><a title="Backbone.js nas trincheiras" href="http://www.slideshare.net/lambda3_br/backbonejs-19074636" target="_blank">Backbone.js nas trincheiras</a> </strong><br />
<iframe style="margin-bottom: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; border-bottom: #ccc 0px solid; border-left: #ccc 1px solid;" src="http://www.slideshare.net/slideshow/embed_code/19074636" height="356" width="427" allowfullscreen="allowfullscreen" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe><br />
O código da aplicação de exemplo utilizada na palestra de Backbone.js está disponível no <a title="GitHub" href="https://github.com/Lambda3/lambdaday2013-backbonejs" target="_blank">GitHub</a>.</p>
<p><strong><a title="Novidades ALM Summit 2013" href="http://www.slideshare.net/lambda3_br/novidades-alm-summit-2013" target="_blank">Novidades ALM Summit 2013</a> </strong><br />
<iframe style="margin-bottom: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; border-bottom: #ccc 0px solid; border-left: #ccc 1px solid;" src="http://www.slideshare.net/slideshow/embed_code/19074888" height="356" width="427" allowfullscreen="allowfullscreen" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<p><strong><a title="Experiências, Erros e Acertos no Desenvolvimento de Projetos Ágeis" href="http://www.slideshare.net/lambda3_br/experincias-erros-e-acertos-no-desenvolvimento-de-projetos-geis-19080181" target="_blank">Experiências, Erros e Acertos no Desenvolvimento de Projetos Ágeis</a> </strong><br />
<iframe style="margin-bottom: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; border-bottom: #ccc 0px solid; border-left: #ccc 1px solid;" src="http://www.slideshare.net/slideshow/embed_code/19080181" height="356" width="427" allowfullscreen="" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<p><strong><a title="Lightning Talk - Jquery - Dicas e Truques" href="http://www.slideshare.net/lambda3_br/jquery-dicas-e-truques" target="_blank">Lightning Talk &#8211; Jquery &#8211; Dicas e Truques</a> </strong><br />
<iframe style="margin-bottom: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; border-bottom: #ccc 0px solid; border-left: #ccc 1px solid;" src="http://www.slideshare.net/slideshow/embed_code/19076998" height="356" width="427" allowfullscreen="allowfullscreen" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<p><strong><a href="http://www.slideshare.net/lambda3_br/source-control-19077017" target="_blank">Lightning Talk &#8211; Source Control</a></strong><br />
<iframe style="margin-bottom: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; border-bottom: #ccc 0px solid; border-left: #ccc 1px solid;" src="http://www.slideshare.net/slideshow/embed_code/19077017" height="356" width="427" allowfullscreen="allowfullscreen" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<p><strong><a href="http://www.slideshare.net/lambda3_br/como-voc-est-criando-os-seus-objetos" target="_blank">Lightning Talk &#8211; Como você está criando os seus objetos?</a></strong><br />
<iframe style="margin-bottom: 5px; border-top: #ccc 1px solid; border-right: #ccc 1px solid; border-bottom: #ccc 0px solid; border-left: #ccc 1px solid;" src="http://www.slideshare.net/slideshow/embed_code/19076971" height="356" width="427" allowfullscreen="allowfullscreen" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe></p>
<p><strong><span style="font-size: x-large;">Valor da inscrição<br />
</span></strong>Como informado no post do <a href="http://blog.lambda3.com.br/2013/02/lambda-day-2013/" target="_blank">anúncio do evento</a>, todo o dinheiro arrecadado com as inscrições em São Paulo (descontando-se a taxa de serviço do site de vendas que é de 10% do valor da inscrição) foi doado para a <a href="http://www.casadozezinho.org.br" target="_blank">Associação Educacional Casa do Zezinho</a>.</p>
<p><strong><span style="font-size: x-large;">Erros cometidos<br />
</span></strong>Sim, cometemos erros. Erros que conseguimos contornar durante o evento, mas que poderíamos ter evitado com um pouco mais de atenção. O principal problema foi o endereço errado no site do evento (a numeração do local estava incorreta), o que gerou atraso no evento de SP. Aproveito esse espaço para pedir desculpas à todas as pessoas que participaram e que foram, de alguma forma, afetadas.</p>
<p><strong><span style="font-size: x-large;">Feedbacks<br />
</span></strong>Felizmente, dado todos os feedbacks que recebemos durante e após o evento, acredito que conseguimos atingir o objetivo. Todas as palestras foram muito bem avaliadas, o que nos deixou muito mais confiantes para realizar o próximo Lambda Day.</p>
<blockquote><p>Eduardo Santos: &#8220;Quando ao Lambda Day, eu que tenho que agradecer pelo excelente trabalho. Tenha certeza de que o compartilhamento de conhecimento realizado por vocês influencia positivamente na formação profissional de muitas pessoas. Tanto na formação filosófica, quanto técnica.&#8221; (sic)</p></blockquote>
<blockquote><p>Jonas Abreu: &#8220;O evento foi um dos melhores que participei nos últimos anos.&#8221; (sic). <a href="http://www.vidageek.net/2013/03/11/lambda-day/" target="_blank">http://www.vidageek.net/2013/03/11/lambda-day/</a></p></blockquote>
<p><strong><span style="font-size: x-large;">Agradecimento<br />
</span></strong>Quero agradecer todos os participantes, todas as pessoas que foram ao evento no sábado de manhã, assistiram as palestras e interagiram conosco. A participação de vocês foi fundamental para o sucesso do Lambda Day.</p>
<p><a href="http://blog.lambda3.com.br/wp-content/uploads//2013/04/Participantes-Lambda-Day-SP.png" rel="lightbox"><img class="alignleft" style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="Participantes Lambda Day SP" alt="Participantes Lambda Day SP" src="http://blog.lambda3.com.br/wp-content/uploads//2013/04/Participantes-Lambda-Day-SP_thumb.png" width="720" height="258" border="0" /></a></p>
<p><em>Publicado originalmente em <a href="http://www.osmarlandin.net/index.php/2013/04/conteudo-do-lambda-day-sp-2013/" target="_blank">http://www.osmarlandin.net/index.php/2013/04/conteudo-do-lambda-day-sp-2013/</a> (18/04/2013)</em></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lambda3.com.br/2013/04/conteudo-do-lambda-day-sp-2013/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Lambda Day 2013</title>
		<link>http://blog.lambda3.com.br/2013/02/lambda-day-2013/</link>
		<comments>http://blog.lambda3.com.br/2013/02/lambda-day-2013/#comments</comments>
		<pubDate>Wed, 06 Feb 2013 19:36:23 +0000</pubDate>
		<dc:creator>Osmar Landin</dc:creator>
				<category><![CDATA[Desenvolvimento]]></category>

		<guid isPermaLink="false">http://blog.lambda3.com.br/?p=4921</guid>
		<description><![CDATA[É com grande satisfação que anunciamos o primeiro evento da Lambda3! O evento será realizado no RJ e em SP, nos dias 08 e 09 de março respectivamente, onde faremos alguns anúncios importantes. Teremos palestras sobre produtos digitais, design responsivo, F#, &#8230; <a href="http://blog.lambda3.com.br/2013/02/lambda-day-2013/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p style="text-align: center;"><a href="http://day.lambda3.com.br/"><img class=" wp-image-4924 aligncenter" style="border: 0px;" alt="lambda_day" src="http://blog.lambda3.com.br/wp-content/uploads//2013/02/lambda_day.png" width="1000" height="134" /></a></p>
<p>É com grande satisfação que anunciamos o primeiro evento da Lambda3!</p>
<p>O evento será realizado no RJ e em SP, nos dias 08 e 09 de março respectivamente, onde faremos alguns anúncios importantes. Teremos palestras sobre produtos digitais, design responsivo, F#, Scala, Javascript, Backbone, agilidade, ASP.Net Web API, orientação a objetos e ALM..</p>
<p>Qual o propósito desse evento? Compartilhar as experiências e resultados de nossos projetos e, como sempre, entregar conteúdo de qualidade para a comunidade.</p>
<p>Por esse ser um evento nosso, o único custo para participar é uma taxa de comprometimento  no valor de R$ 20,00 que será doada para instituições de caridade. Não será, sob hipótese nenhuma, utilizada pela Lambda3 para custear algo. Mesmo porque, quem já organizou algum evento sabe que este valor não paga nem o coffee-break.</p>
<p>Todo o valor arrecadado será posteriormente colocado neste blog, juntamente com os comprovantes de depósito para as instituições, que estão listadas na página do evento.</p>
<p>As inscrições são limitadas (apenas 50 vagas no RJ e em SP), portanto corra para garantir a sua vaga. Para maiores informações (locais, grades, palestrantres, etc) confira o site <a title="day.lambda3.com.br" href="http://day.lambda3.com.br">http://day.lambda3.com.br</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lambda3.com.br/2013/02/lambda-day-2013/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>ASP.NET MVC 3 – Template Definitions – Parte 02</title>
		<link>http://blog.lambda3.com.br/2012/08/asp-net-mvc-3-template-definitions-parte-02/</link>
		<comments>http://blog.lambda3.com.br/2012/08/asp-net-mvc-3-template-definitions-parte-02/#comments</comments>
		<pubDate>Sun, 26 Aug 2012 22:48:00 +0000</pubDate>
		<dc:creator>Osmar Landin</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[ASP.Net MVC]]></category>

		<guid isPermaLink="false">http://blog.lambda3.com.br/?p=3174</guid>
		<description><![CDATA[No último post eu mostrei como customizar a renderização de um campo DateTime do seu Model através do MVC Futures (para saber mais, clique aqui). Neste post vou mostrar como utilizar o mesmo mecanismo para renderizar tipos complexos. Modelo No &#8230; <a href="http://blog.lambda3.com.br/2012/08/asp-net-mvc-3-template-definitions-parte-02/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>No último post eu mostrei como customizar a renderização de um campo DateTime do seu Model através do MVC Futures (para saber mais, clique <a href="http://blog.lambda3.com.br/2012/07/asp-net-mvc-3-template-definitions-parte-01/">aqui</a>). Neste post vou mostrar como utilizar o mesmo mecanismo para renderizar tipos complexos.</p>
<p><strong>Modelo</strong></p>
<p>No modelo abaixo demonstrado temos duas classes bastante simples: ListaPresenca e Aluno, onde a classe ListaPresenca possui uma coleção de objetos do tipo Aluno:</p>
<p><a href="http://blog.lambda3.com.br/2012/08/asp-net-mvc-3-template-definitions-parte-02/modelo/" rel="attachment wp-att-3175"><img class="alignnone size-medium wp-image-3175" title="Modelo" alt="" src="http://blog.lambda3.com.br/wp-content/uploads//2012/08/modelo-300x112.png" width="300" height="112" /></a></p>
<p><strong>MVC Futures</strong></p>
<p>Por convenção, ao utilizar o helper Html.EditorFor, o ASP.NET MVC procura dentro da pasta Views\Shared\EditorTemplates algum arquivo .ascx que tenha o mesmo nome do tipo de dado que está sendo renderizado. Por exemplo, quando utilizamos o comando Html.EditorFor(m =&gt; m.NomeInstrutor), o framework vai procurar o template String.ascx e utilizá-lo para renderizar a propriedade NomeInstrutor, pois ela é do tipo String. Caso não exista nenhum .ascx com o nome do tipo a ser renderizado, o framework utiliza o template Object.ascx para renderizar.</p>
<p><strong>View</strong></p>
<p>Dado o cenário acima, a idéia é que nossa View renderize um formulário para atualizar os dados dos alunos de uma determinada turma, através da classe ListaPresenca. O código da View está demonstrado abaixo:</p>
<pre class="brush:html">@model TesteTemplate.Models.ListaPresenca

@{
ViewBag.Title = "Index";
}

&lt;h2&gt;Index&lt;/h2&gt;

&lt;script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"&gt;&lt;/script&gt;
&lt;script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"&gt;&lt;/script&gt;

@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
&lt;fieldset&gt;
&lt;legend&gt;ListaPresenca&lt;/legend&gt;

&lt;div class="editor-label"&gt;
@Html.LabelFor(model =&gt; model.NomeInstrutor)
&lt;/div&gt;
&lt;div class="editor-field"&gt;
@Html.EditorFor(model =&gt; model.NomeInstrutor)
@Html.ValidationMessageFor(model =&gt; model.NomeInstrutor)
&lt;/div&gt;
&lt;div class="editor-field"&gt;
@Html.EditorFor(model =&gt; model.Alunos, "CollectionAlunos")
&lt;/div&gt;
&lt;p&gt;
&lt;input type="submit" value="Save" /&gt;
&lt;/p&gt;
&lt;/fieldset&gt;
}</pre>
<p>Na linha 25 estamos dizendo ao ASP.NET MVC para utilizar o template CollectionAlunos.ascx para renderizar a propriedade Alunos da classe ListaPresenca. Esse template ainda não existe em nosso projeto, portanto será utilizado o template Object.ascx. Para que isso funcione, basta criarmos o CollectionAlunos.ascx dentro da pasta Views\Shared\EditorTemplates de nosso projeto. O código do template (bem simples) será algo mais ou menos assim:</p>
<pre class="brush:html">&lt;%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;%
if (Model != null)
{
%&gt;
&lt;tr&gt;
&lt;th&gt;Nome&lt;/th&gt;
&lt;th&gt;Endereço&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;%
string oldPrefix = ViewData.TemplateInfo.HtmlFieldPrefix;
int index = 0;

ViewData.TemplateInfo.HtmlFieldPrefix = String.Empty;

foreach (Object item in (IEnumerable)Model) {
string fieldName = String.Format(System.Globalization.CultureInfo.InvariantCulture, "{0}[{1}]", oldPrefix, index++);
ViewContext.Writer.Write(Html.EditorFor(m =&gt; item, null, fieldName));
}

ViewData.TemplateInfo.HtmlFieldPrefix = oldPrefix;
}
%&gt;
&lt;/tbody&gt;
&lt;/table&gt;</pre>
<p>Na linha 22, estamos utilizando o comando Html.EditorFor(m =&gt; item, null, fieldName). Este item que está sendo passado para o Helper é um objeto do tipo Aluno, como vocês podem ver na imagem abaixo:</p>
<p><a href="http://blog.lambda3.com.br/2012/08/asp-net-mvc-3-template-definitions-parte-02/tipo/" rel="attachment wp-att-3188"><img class="alignnone size-medium wp-image-3188" title="Tipo Aluno" alt="" src="http://blog.lambda3.com.br/wp-content/uploads//2012/08/tipo-300x36.png" width="300" height="36" /></a></p>
<p>No entanto, não estamos dizendo para o framework qual controle .ascx ele deve utilizar (estamos passando null no segundo parâmetro). Por convenção, nesse caso, ele assume que deve ser utilizado o Aluno.ascx ou Object.ascx. Vamos então criar o template Aluno.ascx dentro da pasta Views\Shared\EditorTemplates:</p>
<pre class="brush:html">&lt;%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl&lt;TesteTemplate.Models.Aluno&gt;" %&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;%
ViewContext.Writer.Write(Html.EditorFor(m =&gt; m.Nome));
%&gt;
&lt;/td&gt;
&lt;td&gt;
&lt;%
ViewContext.Writer.Write(Html.EditorFor(m =&gt; m.Endereco));
%&gt;
&lt;/td&gt;
&lt;/tr&gt;</pre>
<p>Feito isso, o resultado será algo do tipo:</p>
<p><a href="http://blog.lambda3.com.br/2012/08/asp-net-mvc-3-template-definitions-parte-02/pagina-3/" rel="attachment wp-att-3198"><img class="alignnone size-medium wp-image-3198" title="Pagina" alt="" src="http://blog.lambda3.com.br/wp-content/uploads//2012/08/Pagina-300x169.png" width="300" height="169" /></a></p>
<p>Quando clicamos no botão Save, realizamos um Post. No controller, ao verificar o objeto ListaPresenca, podemos ver que o mesmo foi devidamente populado através do Model Binding do ASP.NET MVC:</p>
<p><a href="http://blog.lambda3.com.br/2012/08/asp-net-mvc-3-template-definitions-parte-02/resultado-do-post/" rel="attachment wp-att-3194"><img class="alignnone size-full wp-image-3194" title="Resultado do Post" alt="" src="http://blog.lambda3.com.br/wp-content/uploads//2012/08/Resultado-do-Post.png" width="273" height="226" /></a></p>
<p>Quando isso é útil? Quando temos um objeto complexo que será renderizado em várias Views do mesmo software. Ao invés de duplicamos código para fazer a renderização desse tipo em cada uma das Views, basta criar um template para renderizá-lo e utilizar o helper Html.EditorFor.</p>
<p>Espero que tenham gostado da dica, até a próxima.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lambda3.com.br/2012/08/asp-net-mvc-3-template-definitions-parte-02/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>ASP.NET MVC 3 &#8211; Template Definitions &#8211; Parte 01</title>
		<link>http://blog.lambda3.com.br/2012/07/asp-net-mvc-3-template-definitions-parte-01/</link>
		<comments>http://blog.lambda3.com.br/2012/07/asp-net-mvc-3-template-definitions-parte-01/#comments</comments>
		<pubDate>Fri, 20 Jul 2012 18:03:55 +0000</pubDate>
		<dc:creator>Osmar Landin</dc:creator>
				<category><![CDATA[Microsoft]]></category>
		<category><![CDATA[ASP.Net MVC]]></category>

		<guid isPermaLink="false">http://blog.lambda3.com.br/?p=3148</guid>
		<description><![CDATA[Olá pessoal, tudo bem? Este é meu primeiro post relacionado ao ASP.NET MVC e já vou começar com uma pergunta simples: O que acontece quando usamos a instrução abaixo dentro de uma View? @Html.EditorFor(model =&#62; model.Nome) Todos já devem ter &#8230; <a href="http://blog.lambda3.com.br/2012/07/asp-net-mvc-3-template-definitions-parte-01/">Continuar lendo <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Olá pessoal, tudo bem?</p>
<p>Este é meu primeiro post relacionado ao ASP.NET MVC e já vou começar com uma pergunta simples:</p>
<p>O que acontece quando usamos a instrução abaixo dentro de uma View?</p>
<pre class="brush:c-sharp">@Html.EditorFor(model =&gt; model.Nome)</pre>
<p>Todos já devem ter utilizado o helper Html.EditorFor e sabem que esse helper cria um input text na página. Certo?</p>
<p>Mas como o ASP.NET MVC faz isso?</p>
<p>Ele utiliza templates que estão compilados dentro do assembly System.Web.Mvc.</p>
<p><strong>ASP.NET MVC Futures</strong></p>
<p>O ASP.NET MVC Futures é um zip composto por controles ASCX que são exatamente os mesmos templates utilizados pelo ASP.NET MVC para renderizar o HTML através dos helpers Html.EditorFor e Html.DisplayFor.</p>
<p>Tomando como base o exemplo anterior, o template utilizado pelo ASP.NET MVC para renderizar o HTML da propriedade Nome do meu modelo está demonstrado logo abaixo:</p>
<pre class="brush:html">&lt;%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %&gt;
&lt;%= Html.TextBox("", ViewData.TemplateInfo.FormattedModelValue, new { @class = "text-box single-line" }) %&gt;</pre>
<p>Ok. Então o MVC Futures serve apenas para eu ver como o helper renderiza meu HTML? Não! Você pode customizar isso. Se você editar esse template, você pode customizar a forma como tudo será renderizado.</p>
<p><strong>Usando o ASP.NET MVC Futures</strong></p>
<p>Baixe o pacote no <a href="http://bit.ly/mvc_futures">CodePlex</a> e descompacte-o. Dentro do zip você vai encontar uma pasta chamada DefaultTemplates, e dentro dela mais duas pastas chamadas EditorTemplates e DisplayTemplates. A pasta EditorTemplates possui os templaes utilizados pelo helper de edição Html.EditorFor. Já a pasta DisplayTemplates possui os templates utilizados pelo helper de exibição Html.DisplayFor. Copie as pastas EditorTemplates e DisplayTemplates para a pasta Views\Shared de seu projeto. O framework do ASP.NET MVC procura, dentro dessa pasta, se existe algum template customizado. Se encontrar, usa esse template para renderizar. Caso não encontre, utiliza o template já compilado internamente. Por isso essas customizações devem estar dentro da pasta Views\Shared.</p>
<p>Quando você utiliza a instrução Html.EditorFor(m =&gt; m.Nome), o helper vai procurar um template baseado no tipo do dado que você está querendo renderizar. Como a propriedade Nome do meu modelo é uma String, o helper vai utilizar o template String.ascx para renderizar o input text na View.</p>
<p>Com isso, podemos customizar qualquer coisa. Podemos, por exemplo, já renderizar todos os input text com as classes CSS corretas. Basta editar o template.</p>
<p>Imaginem que, em várias classes do seu modelo, existam várias propriedades do tipo DateTime e você já quer renderizar um input text e utilizar o DatePicker do JQuery UI em todos esses campos de data.Como fazer isso? Uma das formas é incluir o o input text na View e adicionar o DatePicker para cada um dos campos. Mas nós podemos automatizar isso através dos templates. Basta criar um template responsável por renderizar campos do tipo DateTime.</p>
<p><strong>Criando um novo template</strong></p>
<p>Na pasta EditorTemplates, crie um novo arquivo chamado DateTime.ascx e adicione o código abaixo:</p>
<pre class="brush:c-sharp">&lt;%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl&lt;System.DateTime?&gt;" %&gt;
&lt;%= Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "text-box single-line datePicker" }) %&gt;</pre>
<p>Neste exemplo eu usei praticamente a mesma forma de renderização de um campo String com uma pequena diferença: adicionei uma classe CSS chamada datePicker.</p>
<p><strong>Adicionando JQuery</strong></p>
<p>Vá na master page _Layout.cshtml e adicione as referências para o JQuery, o JQuery UI e o CSS jquery.ui.all.css. Seu código ficará mais ou menos assim:</p>
<pre class="brush:html">&lt;script type="text/javascript" src="../../Scripts/jquery-1.6.2.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="../../Scripts/jquery-ui-1.8.11.js"&gt;&lt;/script&gt;
&lt;link rel="stylesheet" type="text/css" href="../../Content/themes/base/jquery.ui.all.css" /&gt;</pre>
<p>Agora, crie um script para adicionar o DatePicker do JQuery UI em todos os campos que tenham a classe CSS datePicker:</p>
<pre class="brush:javascript">$(function () {
   $(".datePicker").datepicker();
});</pre>
<p>Pronto! Agora em toda a sua aplicação, quando você utilizar o helper Html.EditorFor e sua propriedade for do tipo DateTime, o DatePicker do JQuery UI será embutido automaticamente.</p>
<p><a href="http://blog.lambda3.com.br/2012/07/asp-net-mvc-3-template-definitions-parte-01/post/" rel="attachment wp-att-3150"><img class="alignnone size-medium wp-image-3150" title="DateTime" alt="" src="http://blog.lambda3.com.br/wp-content/uploads//2012/07/Post-300x200.png" width="300" height="200" /></a></p>
<p>No próximo post vou mostrar como renderizar tipos complexos. Até lá!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lambda3.com.br/2012/07/asp-net-mvc-3-template-definitions-parte-01/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
