﻿<?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>Michel Banagouro</title>
	<atom:link href="http://mbanagouro.net/site/feed/" rel="self" type="application/rss+xml" />
	<link>http://mbanagouro.net/site</link>
	<description>&#124; ASP .NET MVC, C#, jQuery.</description>
	<lastBuildDate>Mon, 15 Oct 2012 14:42:19 +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>Introdução ao ASP .NET MVC</title>
		<link>http://mbanagouro.net/site/2012/02/09/introducao-ao-asp-net-mvc/</link>
		<comments>http://mbanagouro.net/site/2012/02/09/introducao-ao-asp-net-mvc/#comments</comments>
		<pubDate>Thu, 09 Feb 2012 15:33:37 +0000</pubDate>
		<dc:creator>Michel Banagouro</dc:creator>
				<category><![CDATA[ASP .NET MVC]]></category>
		<category><![CDATA[ASP .NET MVC 3]]></category>

		<guid isPermaLink="false">http://mbanagouro.net/site/?p=996</guid>
		<description><![CDATA[Conheça sobre as origens do ASP .NET MVC Framework e como ele pode transformar suas aplicações em aplicações Web de alto nível e de acordo com as Web Standards.]]></description>
				<content:encoded><![CDATA[<p>Desde o seu lançamento até a versão 3.5, o ASP .NET era baseado em um padrão arquitetural chamado de <strong><a title="Padrão Page Controller" href="http://martinfowler.com/eaaCatalog/pageController.html" target="_blank">Page Controller</a></strong>. Esse padrão determina que as páginas (Default.aspx, por exemplo) são responsáveis por suas próprias ações, tais como manipulação de eventos, processamento da lógica de negócio, renderização do conteúdo visual, armazenamento de estado (ViewState), etc. Esse padrão tornou possível criar aplicações Web da mesma forma como eram criadas as aplicações RAD desktop (Delphi, por exemplo) da época, ou seja, através de formulários, eventos, componentes prontos e configuráveis, e isso tudo sem precisar ter muito conhecimento de HTML, CSS e Javascript. Muitos desenvolvedores desktops que tinham interesse em trabalhar com Web se sentiram confortáveis em trabalhar com este modelo já que era muito semelhante com o que já faziam. Esse modelo de desenvolvimento ficou bastante conhecido como <strong>WebForms</strong>.</p>
<h3>Web nos dias de hoje</h3>
<p>Nos últimos anos a Web evoluiu de forma bastante acelerada e com isso as aplicações Web se tornaram mais rápidas, leves e acessadas por uma grande variedade de dispositivos (PCs, Smarthphones, Tablets) e browsers (Internet Explorer, Firefox, Google Chrome, Opera, Safari, etc). O uso de uma padronização no desenvolvimento web (Web Standards) era necessário para garantir que o usuário tivesse a mesma experiência de navegação quando acessado um mesmo website de qualquer dispositivo ou browser.</p>
<p>Além da evolução Web, novas práticas como a metodologia ágil e o desenvolvimento orientado a testes ganharam um grande espaço nas listas de discussões como itens extremamente importantes a serem considerados na construção de qualquer projeto de software.</p>
<p>Infelizmente, o modelo WebForms não acompanhou de maneira satisfatória essa evolução e diante desse novo cenário inúmeras limitações começaram a aparecer:</p>
<ul>
<li>À medida que a complexidade das páginas crescia, começavam a ficar extremamente “pesadas” com o uso do ViewState para armazenar o estado da página entre as requisições.</li>
<li>Difícil controle sobre o HTML gerado, já que os componentes e controles são responsáveis por esse processo.</li>
<li>Dificuldade de trabalhar com frameworks Javascript, como o jQuery.</li>
<li>Apesar do código HTML ser separado do código de servidor(Code-Behind), os dois ainda possui uma forte dependência, dificultando o trabalho paralelo de desenvolvedores e designers e impossibilitando a escrita de testes unitários.</li>
<li>E muitas outras&#8230;</li>
</ul>
<p>O ASP .NET começava a perder seu espaço para novas tecnologias, como o Ruby on Rails. Mais do que nunca, a plataforma precisava se de um novo modelo de desenvolvimento&#8230;</p>
<h3>ASP .NET MVC Framework</h3>
<p>O ASP .NET MVC é a resposta da Microsoft em respeito aos padrões atuais de desenvolvimento Web. Ele não é uma evolução ou atualização do modelo WebForms, mas sim um novo modelo construído sobre o Runtime do ASP .NET e disponível para que você tenha uma opção a mais na hora de escolher a melhor solução que se adeque ao seu problema.</p>
<div id="attachment_999" class="wp-caption aligncenter" style="width: 310px"><a href="http://mbanagouro.net/site/wp-content/uploads/2012/02/arquitetura-aspnet.png" rel="lightbox[996]" title="Plataforma ASP .NET"><img class="lazy size-medium wp-image-999" title="Plataforma ASP .NET" src="http://mbanagouro.net/site/wp-content/plugins/jquery-image-lazy-loading/images/grey.gif" data-original="http://mbanagouro.net/site/wp-content/uploads/2012/02/arquitetura-aspnet-300x203.png" alt="Plataforma ASP .NET" width="300" height="203" /><noscript rel="lightbox[996]" title="Plataforma ASP .NET"><img class="size-medium wp-image-999" title="Plataforma ASP .NET" src="http://mbanagouro.net/site/wp-content/uploads/2012/02/arquitetura-aspnet-300x203.png" alt="Plataforma ASP .NET" width="300" height="203" /></noscript></a><p class="wp-caption-text">Figura 1 - Plataforma ASP .NET</p></div>
<p>O ASP .NET MVC é baseado no padrão arquitetural <strong><a title="Padrão Model-View-Controller" href="http://martinfowler.com/eaaCatalog/modelViewController.html" target="_blank">MVC (Model-View-Controller)</a></strong> criado na década de 1970 por Trygve Reenskaug. O padrão MVC fornece uma maneira de separar as responsabilidades de manutenção e apresentação dos dados de uma aplicação em 03 partes: Modelos (Models), Controladores (Controllers) e Visão (Views).</p>
<ul>
<li><strong>Controllers</strong>: São responsáveis por capturar as requisições (requests) enviados pelo usuário. É ele quem interpreta as ações dos usuários, consome os dados do Modelo e decide qual View será apresentada ao usuário. Em uma aplicação Web as ações do usuário podem ser desde cliques em botões ou links, envio de formulários, etc.</li>
<li><strong>Models</strong>: Responsável por manter o estado persistente dos dados, permitindo que os controladores tenham acesso as funcionalidades de manipulação desses dados encapsulados pelo próprio modelo.</li>
<li><strong>Views</strong>: Responsável por obter os dados do Modelo (ou não) e renderizá-los em forma de conteúdo visual ao usuário, podendo ser um conteúdo HTML, texto, arquivo, objeto JSON, etc.</li>
</ul>
<p>A figura 2 demonstra a forma como esses componentes interagem entre si e os seus limites.</p>
<div id="attachment_1000" class="wp-caption aligncenter" style="width: 310px"><a href="http://mbanagouro.net/site/wp-content/uploads/2012/02/mvc-pipeline.png" rel="lightbox[996]" title="Pipeline de processamento do padrão MVC"><img class="lazy size-medium wp-image-1000" title="Pipeline de processamento do padrão MVC" src="http://mbanagouro.net/site/wp-content/plugins/jquery-image-lazy-loading/images/grey.gif" data-original="http://mbanagouro.net/site/wp-content/uploads/2012/02/mvc-pipeline-300x240.png" alt="Pipeline de processamento do padrão MVC" width="300" height="240" /><noscript rel="lightbox[996]" title="Pipeline de processamento do padrão MVC"><img class="size-medium wp-image-1000" title="Pipeline de processamento do padrão MVC" src="http://mbanagouro.net/site/wp-content/uploads/2012/02/mvc-pipeline-300x240.png" alt="Pipeline de processamento do padrão MVC" width="300" height="240" /></noscript></a><p class="wp-caption-text">Figura 2 - Pipeline de processamento do padrão MVC</p></div>
<p>Repare que as requisições (request) são capturadas e interpretadas pelo Controller, e não mais por uma página. Caso o Controller tenha a necessidade de alterar ou obter alguma informação do Model, ele o fará. O seu próximo passo é decidir qual View será enviada. Ao final, a View irá renderizar o conteúdo visual da resposta (response) para o usuário da maneira que achar melhor.</p>
<p>Existem várias tecnologias que se utilizam desse padrão, como o já falado Ruby on Rails, e há alguns frameworks que podem ser usados no próprio ASP .NET. Mas o que temos disponível agora é uma implementação deste padrão pela própria Microsoft, integrada como um novo modelo de desenvolvimento sobre a plataforma ASP .NET.</p>
<p>Mas não se engane se acha que o padrão MVC é a única novidade deste novo modelo. Vários recursos e funcionalidades foram criados a fim de nos auxiliar de forma extremamente simples os vários cenários da etapa de desenvolvimento de um projeto.</p>
<h3>O que ganhamos com esse padrão?</h3>
<p>O desenvolvedor volta a ter liberdade no desenvolvimento e o obriga a ter profundo conhecimento em HTML, CSS, Javascript e sobre o protocolo HTTP. Assim como era necessário na época do ASP tradicional, e como outras linguagens como o PHP. A grande diferença é que essas linguagens mais antigas não se utilizavam do padrão MVC, o que acabava deixando a aplicações muito complexas e de difícil manutenção pela falta de separação dessas responsabilidades.</p>
<p>Os dois modelos (WebForms e MVC) possuem suas vantagens e desvantagens. Mas se você busca construir qualquer tipo de aplicação Web, seguindo os padrões Web atuais, permitindo que desenvolvedores e designers trabalhem em conjunto e de forma paralela, que seja escalável, testável e de fácil manutenção, o ASP .NET MVC é o modelo certo para você.</p>
<h3>Conclusão</h3>
<p>Aprender a trabalhar com o ASP .NET MVC não é uma tarefa trivial pois exige do desenvolvedor uma mudança de pensamento em como desenvolver uma aplicação com este aspecto arquitetural. Você só conseguirá ver as diferenças e vantagens deste novo modelo quando começar a compreender a maneira como as coisas funcionam, mas para isso seja alcançado você tem que colocar a mão na massa. Comece a criar aplicações simples como uma agenda de contatos, por exemplo.</p>
<p>Eu já trabalhei bastante com ASP .NET WebForms, mas hoje eu não abro mão de criar minhas aplicações com o ASP .NET MVC, é muito melhor, pois a liberdade, a agilidade e a facilidade que tenho hoje são maiores do que eram na época do WebForms.</p>
<p>Nos próximos posts, irei mostrar como criar uma aplicação simples ASP .NET MVC e apresentar os recursos e funcionalidades que vão além do padrão MVC.</p>
<p>Abraços e até o próximo post!</p>
]]></content:encoded>
			<wfw:commentRss>http://mbanagouro.net/site/2012/02/09/introducao-ao-asp-net-mvc/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Série &#8211; Fundamentos do ASP .NET MVC</title>
		<link>http://mbanagouro.net/site/2012/02/08/serie-asp-net-mvc-fundamentos/</link>
		<comments>http://mbanagouro.net/site/2012/02/08/serie-asp-net-mvc-fundamentos/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 02:35:56 +0000</pubDate>
		<dc:creator>Michel Banagouro</dc:creator>
				<category><![CDATA[ASP .NET MVC]]></category>

		<guid isPermaLink="false">http://mbanagouro.net/site/?p=983</guid>
		<description><![CDATA[Neste post você irá encontrar um índice de artigos relacionado a série sobre os Fundamentos do ASP .NET MVC.]]></description>
				<content:encoded><![CDATA[<p>Olá pessoal!</p>
<p>Este post tem a única missão de apresentar para vocês a nova série de posts e artigos sobre os conceitos básicos e fundamentais do <strong>ASP .NET MVC!</strong></p>
<p>O objetivo dessa série é apresentar os conceitos e funcionalidades essenciais para que você consiga entender e compreender como o ASP .NET MVC funciona e como ele pode facilitar seu desenvolvimento web em vários aspectos.</p>
<p>Minha idéia geral em relação aos artigos não é de apresentar nada superficialmente, assim como também não irei mostrar nada muito aprofundado. A intenção é apresentar o necessário pra estimular seu interesse em estudar mais e mais sobre essa &#8220;nova maneira&#8221; de desenvolver para a Web usando a plataforma ASP .NET.</p>
<p>Usarei esse post como um índice dos artigos que estarei escrevendo aos poucos. Confira a lista de posts que estou preparando:</p>
<ol>
<li><a title="Introdução ao ASP .NET MVC" href="http://mbanagouro.net/site/2012/02/09/introducao-ao-asp-net-mvc/" target="_blank">Introdução ao ASP .NET MVC</a></li>
<li>Criando a primeira aplicação ASP .NET MVC</li>
<li>Rotas</li>
<li>Rotas: Customização</li>
<li>Rotas: Restrições</li>
<li>Controllers</li>
<li>Controllers: Model Binding</li>
<li>Controllers: Action Results</li>
<li>Controllers: Action Filters</li>
<li>Views</li>
<li>Views: Razor View Engine</li>
<li>Views: Razor Layout (Master Page)</li>
<li>Views: Razor Section</li>
<li>Views: Razor Helpers</li>
<li>Views: Html.Partial e Html.Action</li>
<li>Model</li>
<li>Model: Validation</li>
<li>Model: Convenções e Boas práticas</li>
<li>Ajax</li>
<li>Ajax.ActionLink</li>
<li>Ajax.ActionForm</li>
<li>Ajax com jQuery</li>
</ol>
<p>Alguma sugestão de assunto para acrescentar? Manda aí nos comentários!</p>
<p><span style="color: #ff0000;"><strong>*OBS: Este post será constantemente atualizado a medida que os artigos forem saindo.</strong></span></p>
]]></content:encoded>
			<wfw:commentRss>http://mbanagouro.net/site/2012/02/08/serie-asp-net-mvc-fundamentos/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>ASP .NET MVC &#8211; Múltiplos botões submit no mesmo formulário</title>
		<link>http://mbanagouro.net/site/2012/01/12/asp-net-mvc-multiplos-botoes-submit-no-mesmo-formulario/</link>
		<comments>http://mbanagouro.net/site/2012/01/12/asp-net-mvc-multiplos-botoes-submit-no-mesmo-formulario/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 01:47:37 +0000</pubDate>
		<dc:creator>Michel Banagouro</dc:creator>
				<category><![CDATA[ASP .NET MVC]]></category>
		<category><![CDATA[Action Filters]]></category>
		<category><![CDATA[ASP .NET MVC 3]]></category>
		<category><![CDATA[Selector Filters]]></category>

		<guid isPermaLink="false">http://mbanagouro.net/site/?p=969</guid>
		<description><![CDATA[Como fazer para que em um único formulário diferentes botões submit executem diferentes actions? Veja como resolver este problema neste post.]]></description>
				<content:encoded><![CDATA[<p>Considere o seguinte cenário:</p>
<p><strong>HomeController.cs:</strong></p>
<pre class="brush: csharp; title: ; notranslate">

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Index_Cadastrar()
    {
        ViewBag.Mensagem = &quot;Você pressionou o botão Cadastrar&quot;;
        return View();
    }

    [HttpPost]
    public ActionResult Index_Cancelar()
    {
        ViewBag.Mensagem = &quot;Você pressionou o botão Cancelar Cadastro&quot;;
        return View();
    }
}

</pre>
<p><strong>Index.cshtml:</strong></p>
<pre class="brush: xml; title: ; notranslate">

&lt;form action=&quot;@Url.Action(&quot;Index&quot;)&quot; method=&quot;post&quot;&gt;
    &lt;label&gt;Nome Completo&lt;/label&gt;
    &lt;br /&gt;
    &lt;input type=&quot;text&quot; name=&quot;Nome&quot; value=&quot;&quot; /&gt;
    &lt;br /&gt;
    &lt;label&gt;Email&lt;/label&gt;
    &lt;br /&gt;
    &lt;input type=&quot;text&quot; name=&quot;Email&quot; value=&quot;&quot; /&gt;
    &lt;br /&gt;
    &lt;input type=&quot;submit&quot; name=&quot;Cadastrar&quot; value=&quot;Cadastrar&quot; /&gt;
    &lt;input type=&quot;submit&quot; name=&quot;Cancelar Cadastro&quot; value=&quot;Cancelar Cadastro&quot; /&gt;

    &lt;p&gt;@ViewBag.Mensagem&lt;/p&gt;
&lt;/form&gt;

</pre>
<p style="text-align: justify;">Pelo fato dos dois (02) botões submit estarem contido no mesmo formulário, independentemente de qual deles seja pressionado (<strong>Cadastrar</strong> ou <strong>Cancelar Cadastro</strong>), o formulário acima SEMPRE fará uma requisição para a action <strong>Index</strong> do controller <strong>Home</strong>. Como fazer então para que diferentes actions sejam executadas de acordo com contexto de cada botão? Ou seja, como fazer com que os botões Cadastrar e Cancelar executem respectivamente as action <strong>Index_Cadastrar</strong> e <strong>Index_Cancelar</strong>?</p>
<p style="text-align: justify;">Eis a solução:</p>
<p style="text-align: justify;">O ASP .NET MVC nos fornece um recurso chamado de <strong>Action Filter</strong> (filtros de ação). Basicamente, como o próprio nome já diz, um Action Filter é usado para “filtrar” as requisições que são enviadas para uma determinada action.<br />
Existem dois tipos de filtros: os <strong>Action Filters</strong> propriamente ditos e os <strong>Selector Filters</strong>. Mas qual a diferença?<br />
Os Action Filters são usados para adicionar operações que podem ocorrer antes e depois da execução de uma determinada action.</p>
<p style="text-align: justify;">Já os Selector Filters são usados para definir e validar a forma como uma determinada action será chamada.<br />
Para o nosso caso, como não existe nada pronto no ASP .NET MVC que resolva de imediato o nosso problema, precisaremos cria-lo. E para isso implementaremos um novo Selector Filter que irá “validar” a chamada de uma action baseado no botão submit que foi pressionado. Segue abaixo o nosso novo filtro:</p>
<pre class="brush: csharp; title: ; notranslate">

public enum SubmitRequirement
{
    Equal,
    StartsWith
}

public class SubmitAttribute : ActionMethodSelectorAttribute
{
    private readonly string _submitButtonName;
    private readonly SubmitRequirement _requirement;

    public SubmitAttribute(string submitButtonName):
        this(SubmitRequirement.Equal, submitButtonName)
    {
    }

    public SubmitAttribute(SubmitRequirement requirement, string _submitButtonName)
    {
        this._submitButtonName = _submitButtonName;
        this._requirement = requirement;
    }

    public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
    {
        string buttonName = _submitButtonName;

        try
        {
            string value = &quot;&quot;;
            switch (this._requirement)
            {
                case SubmitRequirement.Equal:
                    {
                        value = controllerContext.HttpContext.Request.Form[buttonName];
                    }
                    break;
                case SubmitRequirement.StartsWith:
                    {
                        foreach (var formValue in controllerContext.HttpContext.Request.Form.AllKeys)
                        {
                            if (formValue.StartsWith(buttonName, StringComparison.InvariantCultureIgnoreCase))
                            {
                                value = controllerContext.HttpContext.Request.Form[formValue];
                                break;
                            }
                        }
                    }
                    break;
            }
            if (!String.IsNullOrEmpty(value))
                return true;
        }
        catch (Exception exc)
        {
            Debug.WriteLine(exc.Message);
        }

        return false;
    }
}

</pre>
<p style="text-align: justify;">Repare que para implementar um novo Selector Filter temos que herdar da classe <strong>ActionMethodSelectorAttribute</strong> e implementar o método <strong>IsValidForRequest</strong> que irá retornar True se a requisição for válida e False de for inválida. Depois disso a lógica é simples: Se o nome do botão submit que estiver vindo pela requisição “bater” com o nome informado para o filtro, ele irá validar a requisição e irá chamar a action correspondente.</p>
<p style="text-align: justify;">Veja como ficou a aplicação do nosso filtro em nossas actions:</p>
<pre class="brush: csharp; title: ; notranslate">

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost, ActionName(&quot;Index&quot;)]
    [Submit(&quot;cadastrar&quot;)]
    public ActionResult Index_Cadastrar()
    {
        ViewBag.Mensagem = &quot;Você pressionou o botão Cadastrar&quot;;
        return View();
    }

    [HttpPost, ActionName(&quot;Index&quot;)]
    [Submit(SubmitRequirement.StartsWith, &quot;cancelar&quot;)]
    public ActionResult Index_Cancelar()
    {
        ViewBag.Mensagem = &quot;Você pressionou o botão Cancelar Cadastro&quot;;
        return View();
    }
}

</pre>
<p style="text-align: justify;">Você deve ter reparado em duas (02) coisas.</p>
<ol style="text-align: justify;">
<li>A utilização do filtro <strong>ActionName</strong> (Ele também é um Selector Filter!) que diz para o ASP .NET MVC que aquela Action não se chama Index_Cadastrar e sim Index, e isso serve para a Index_Cancelar também. Lembra quando eu disse que independentemente do botão submit que clicarmos no nosso formulário ele sempre irá chamar a action Index? Então, como as duas actions se chamam Index, o ASP .NET MVC irá chamar as duas! É ai que entra o nosso segundo filtro!</li>
<li>Com o nosso novo filtro, dizemos qual action deve ser chamada com base no nome do botão que foi clicado em nossa view. Ou seja, ele irá validar e “selecionar” a action correta para atender aquela requisição. Entendeu porque eles se chamam Selector Filters (filtros de seleção)?<br />
Repare que na nossa implementação eu posso informar exatamente o nome do botão que irá chamar aquela action como passando apenas o início do nome do botão por meio do enumerador <strong>SubmitRequirement</strong>!</li>
</ol>
<p style="text-align: justify;">Agora é só compilar e testar:</p>
<div id="attachment_972" class="wp-caption aligncenter" style="width: 310px"><a href="http://mbanagouro.net/site/wp-content/uploads/2012/01/teste1.png" rel="lightbox[969]" title="Teste 1 - Múltiplos botões submit no mesmo formulário"><img class="lazy size-medium wp-image-972" title="Teste 1 - Múltiplos botões submit no mesmo formulário" src="http://mbanagouro.net/site/wp-content/plugins/jquery-image-lazy-loading/images/grey.gif" data-original="http://mbanagouro.net/site/wp-content/uploads/2012/01/teste1-300x220.png" alt="Testando o clique do botão Cadastrar" width="300" height="220" /><noscript rel="lightbox[969]" title="Teste 1 - Múltiplos botões submit no mesmo formulário"><img class="size-medium wp-image-972" title="Teste 1 - Múltiplos botões submit no mesmo formulário" src="http://mbanagouro.net/site/wp-content/uploads/2012/01/teste1-300x220.png" alt="Testando o clique do botão Cadastrar" width="300" height="220" /></noscript></a><p class="wp-caption-text">Testando o clique do botão Cadastrar</p></div>
<div id="attachment_971" class="wp-caption aligncenter" style="width: 310px"><a href="http://mbanagouro.net/site/wp-content/uploads/2012/01/teste2.png" rel="lightbox[969]" title="Teste 2 - Múltiplos botões submit no mesmo formulário"><img class="lazy size-medium wp-image-971" title="Teste 2 - Múltiplos botões submit no mesmo formulário" src="http://mbanagouro.net/site/wp-content/plugins/jquery-image-lazy-loading/images/grey.gif" data-original="http://mbanagouro.net/site/wp-content/uploads/2012/01/teste2-300x220.png" alt="Testando o clique do botão Cancelar" width="300" height="220" /><noscript rel="lightbox[969]" title="Teste 2 - Múltiplos botões submit no mesmo formulário"><img class="size-medium wp-image-971" title="Teste 2 - Múltiplos botões submit no mesmo formulário" src="http://mbanagouro.net/site/wp-content/uploads/2012/01/teste2-300x220.png" alt="Testando o clique do botão Cancelar" width="300" height="220" /></noscript></a><p class="wp-caption-text">Testando o clique do botão Cancelar</p></div>
<p>Abraço e até a próxima.</p>
<p>Baixe o exemplo deste post: <a href="http://mbanagouro.net/site/wp-content/uploads/2012/01/Demo-SubmitAttribute.zip">Demo-SubmitAttribute.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mbanagouro.net/site/2012/01/12/asp-net-mvc-multiplos-botoes-submit-no-mesmo-formulario/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>ASP .NET MVC 4 Developer Preview</title>
		<link>http://mbanagouro.net/site/2011/09/15/asp-net-mvc-4-developer-preview/</link>
		<comments>http://mbanagouro.net/site/2011/09/15/asp-net-mvc-4-developer-preview/#comments</comments>
		<pubDate>Thu, 15 Sep 2011 00:29:20 +0000</pubDate>
		<dc:creator>Michel Banagouro</dc:creator>
				<category><![CDATA[ASP .NET MVC]]></category>
		<category><![CDATA[ASP .NET MVC 4]]></category>
		<category><![CDATA[jQuery Mobile]]></category>

		<guid isPermaLink="false">http://mbanagouro.net/site/?p=950</guid>
		<description><![CDATA[Hoje, durante o keynote do Build Windows, Scott Guthrie anunciou a disponibilidade do ASP .NET MVC 4 Developer Preview. Veja neste post as novidades dessa versão para desenvolvedores.]]></description>
				<content:encoded><![CDATA[<p>Hoje, durante o keynote do <a title="Build Windows" href="http://www.buildwindows.com/">Build Windows</a>, <a title="Scott Guthrie's Blog" href="http://weblogs.asp.net/scottgu">Scott Guthrie</a> anunciou a disponibilidade do <a title="ASP .NET MVC 4 Developer Preview" href="http://www.asp.net/mvc/mvc4" target="_blank">ASP .NET MVC 4 Developer Preview</a>. Preste bastante atenção, essa versão não é um <em>Beta Release</em> e sim uma versão para os desenvolvedores instalarem e darem uma espiada nas novas features e melhorias que estão sendo adicionadas. Apesar de ainda meio cru, essa versão está com bastante coisa legal já. Algumas novidades incluem:</p>
<ul>
<li>Atualização dos scripts e no layout dos templates de projeto.</li>
<li>Novo template: Mobile Project Template.</li>
<li>Muitas novidades para suporte a aplicações mobile.</li>
<li>Aprimorado o suporte a controllers assíncronos.</li>
<li>Muitas outras novidades você poderá ver nas <a title="ASP .NET MVC 4 Release Notes" href="http://www.asp.net/learn/whitepapers/mvc4-release-notes" target="_blank">notas desse release</a>.</li>
</ul>
<div>Para achar mais informações sobre esse release acesso a página do <a title="ASP .NET MVC 4 Developer Preview" href="http://www.asp.net/mvc/mvc4" target="_blank">ASP .NET MVC 4</a>.</div>
<div>
<div id="attachment_951" class="wp-caption aligncenter" style="width: 508px"><a href="http://mbanagouro.net/site/wp-content/uploads/2011/09/aspnetmvc4-newtemplate.png" rel="lightbox[950]" title="ASP .NET MVC 4 Novo Template"><img class="lazy size-full wp-image-951" title="ASP .NET MVC 4 Novo Template" src="http://mbanagouro.net/site/wp-content/plugins/jquery-image-lazy-loading/images/grey.gif" data-original="http://mbanagouro.net/site/wp-content/uploads/2011/09/aspnetmvc4-newtemplate.png" alt="ASP .NET MVC 4 Novo Template" width="498" height="381" /><noscript rel="lightbox[950]" title="ASP .NET MVC 4 Novo Template"><img class="size-full wp-image-951" title="ASP .NET MVC 4 Novo Template" src="http://mbanagouro.net/site/wp-content/uploads/2011/09/aspnetmvc4-newtemplate.png" alt="ASP .NET MVC 4 Novo Template" width="498" height="381" /></noscript></a><p class="wp-caption-text">ASP .NET MVC 4 - Redesign no template dos projetos.</p></div>
<p>&nbsp;</p>
<div id="attachment_952" class="wp-caption aligncenter" style="width: 318px"><a href="http://mbanagouro.net/site/wp-content/uploads/2011/09/aspnetmvc4-templatemobile.png" rel="lightbox[950]" title="ASP .NET MVC 4 - Novo template rodando em mobile."><img class="lazy size-full wp-image-952" title="ASP .NET MVC 4 - Novo template rodando em mobile." src="http://mbanagouro.net/site/wp-content/plugins/jquery-image-lazy-loading/images/grey.gif" data-original="http://mbanagouro.net/site/wp-content/uploads/2011/09/aspnetmvc4-templatemobile.png" alt="ASP .NET MVC 4 - Novo template rodando em mobile." width="308" height="540" /><noscript rel="lightbox[950]" title="ASP .NET MVC 4 - Novo template rodando em mobile."><img class="size-full wp-image-952" title="ASP .NET MVC 4 - Novo template rodando em mobile." src="http://mbanagouro.net/site/wp-content/uploads/2011/09/aspnetmvc4-templatemobile.png" alt="ASP .NET MVC 4 - Novo template rodando em mobile." width="308" height="540" /></noscript></a><p class="wp-caption-text">ASP .NET MVC 4 - Novo template rodando em mobile.</p></div>
<p>&nbsp;</p>
<div id="attachment_953" class="wp-caption aligncenter" style="width: 329px"><a href="http://mbanagouro.net/site/wp-content/uploads/2011/09/image004.png" rel="lightbox[950]" title="ASP .NET MVC 4 - Template com jQuery Mobile."><img class="lazy size-full wp-image-953" title="ASP .NET MVC 4 - Template com jQuery Mobile." src="http://mbanagouro.net/site/wp-content/plugins/jquery-image-lazy-loading/images/grey.gif" data-original="http://mbanagouro.net/site/wp-content/uploads/2011/09/image004.png" alt="ASP .NET MVC 4 - Template com jQuery Mobile." width="319" height="289" /><noscript rel="lightbox[950]" title="ASP .NET MVC 4 - Template com jQuery Mobile."><img class="size-full wp-image-953" title="ASP .NET MVC 4 - Template com jQuery Mobile." src="http://mbanagouro.net/site/wp-content/uploads/2011/09/image004.png" alt="ASP .NET MVC 4 - Template com jQuery Mobile." width="319" height="289" /></noscript></a><p class="wp-caption-text">ASP .NET MVC 4 - Template com jQuery Mobile.</p></div>
<p>Abraços!</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://mbanagouro.net/site/2011/09/15/asp-net-mvc-4-developer-preview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Consultando CEP com ASP .NET MVC 3 e jQuery CEP</title>
		<link>http://mbanagouro.net/site/2011/09/09/consultando-cep-com-asp-net-mvc-3-e-jquery-cep/</link>
		<comments>http://mbanagouro.net/site/2011/09/09/consultando-cep-com-asp-net-mvc-3-e-jquery-cep/#comments</comments>
		<pubDate>Fri, 09 Sep 2011 03:42:36 +0000</pubDate>
		<dc:creator>Michel Banagouro</dc:creator>
				<category><![CDATA[ASP .NET MVC]]></category>
		<category><![CDATA[JQuery]]></category>
		<category><![CDATA[ASP .NET MVC 3]]></category>
		<category><![CDATA[jQuery CEP]]></category>

		<guid isPermaLink="false">http://mbanagouro.net/site/?p=898</guid>
		<description><![CDATA[O jQuery CEP é um plugin jQuery que tem objetivo de realizar consultas a base de CEP do correio para retornar os dados do endereço. Veja neste post como utilizá-lo com ASP .NET MVC 3.]]></description>
				<content:encoded><![CDATA[<p>O jQuery CEP é um plugin jQuery que tem objetivo de realizar consultas a base de CEP do correio para retornar os dados do endereço. O jQuery CEP basicamente realiza uma chamada Ajax ao WebService de CEP disponibilizado pelo site do república virtual (<a href="http://republicavirtual.com.br/cep/" target="_blank">http://republicavirtual.com.br/cep/</a>), trata o seu retorno e devolve os dados do endereço buscado em formato JSON.</p>
<p>O código fonte do plugin está publicado no <a title="GitHub" href="http://github.com/" target="_blank">GitHub</a> no seguinte endereço:</p>
<p><a title="jQuery CEP" href="https://github.com/mbanagouro/jquery.cep" target="_blank">https://github.com/mbanagouro/jquery.cep</a></p>
<h5 style="text-align: left;"><span class="Apple-style-span" style="font-size: 13px; font-weight: normal;">Para usar a biblioteca em uma aplicação ASP .NET MVC 3 é muito simples, você só precisa acessar o gerenciador de pacotes do NuGet e procurar por<strong> <a title="jQuery CEP" href="http://nuget.org/List/Packages/jQuery.CEP" target="_blank">jQuery CEP</a></strong>, ou simplesmente digitar a linha de comando abaixo no console do <strong>Package Manager Console</strong>:</span></h5>
<p><br/><br />
<a href="http://mbanagouro.net/site/wp-content/uploads/2011/09/jquery-cep-nuget.png" rel="lightbox[898]" title="jQuery CEP via NuGet"><img class="lazy aligncenter size-full wp-image-911" title="jQuery CEP via NuGet" src="http://mbanagouro.net/site/wp-content/plugins/jquery-image-lazy-loading/images/grey.gif" data-original="http://mbanagouro.net/site/wp-content/uploads/2011/09/jquery-cep-nuget.png" alt="jQuery CEP via NuGet" width="434" height="82" /><noscript rel="lightbox[898]" title="jQuery CEP via NuGet"><img class="aligncenter size-full wp-image-911" title="jQuery CEP via NuGet" src="http://mbanagouro.net/site/wp-content/uploads/2011/09/jquery-cep-nuget.png" alt="jQuery CEP via NuGet" width="434" height="82" /></noscript></a><br />
<br/><br />
Existem 2 cenários básicos de utilizar o plugin. O primeiro é realizando a chamada ao método <strong>$.cep</strong> onde deve ser passado 2 parâmetros, onde o <strong>1º é o número do cep</strong> e o <strong>2º é um JSON com os callbacks</strong> de retorno. Para capturar o retorno dos dados do endereço é necessário simplesmente informar uma função para o callback <strong>success</strong> recebendo um apenas um parâmetro no qual será passado para a função com os dados retornados.</p>
<pre class="brush: jscript; title: ; notranslate">

//Chamando a função jQuery CEP
$.cep('86010140', {
    success: function (data) {
        document.writeln(data.tipoLogradouro + ' ' + data.logradouro + '&lt;br/&gt;');
        document.writeln(data.bairro + '&lt;br/&gt;');
        document.writeln(data.estado + ' / ' + data.cidade + '&lt;br/&gt;');
    }
});

</pre>
<p>O segundo cenário é selecionando o input do CEP e chamar a função <strong>$.cep</strong> sobre o conjunto de elementos passando como parâmetro o JSON com os callbacks de retorno.</p>
<pre class="brush: jscript; title: ; notranslate">

//Selecionando o elemento pelo ID e chamando a função jQuery CEP
$('#input-cep').cep({
    success: function (data) {
        document.writeln(data.tipoLogradouro + ' ' + data.logradouro + '&lt;br/&gt;');
        document.writeln(data.bairro + '&lt;br/&gt;');
        document.writeln(data.estado + ' / ' + data.cidade + '&lt;br/&gt;');
    }
});

</pre>
<p>Neste caso a função <strong>$.cep</strong> irá percorrer os elementos selecionados pela função jQuery e recuperar o valor de cada campo realizando a chamada do CEP.</p>
<p>Agora em um exemplo completo, criei um projeto <strong>ASP .NET MVC 3</strong> e implementei o 2º cenário em uma página simples, veja como ficou:</p>
<pre class="brush: xml; title: ; notranslate">

@{ Layout = null; }
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Demo jQuery CEP&lt;/title&gt;
    &lt;script src=&quot;@Url.Content(&quot;~/Scripts/jquery-1.6.3.min.js&quot;)&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
    &lt;script src=&quot;@Url.Content(&quot;~/Scripts/jquery.cep-1.0.min.js&quot;)&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;
        jQuery(function () {

            $('#buscar-cep').click(function () {
                $('#cep').cep({
                    success: function (data) {
                        $('#logradouro').val(data.tipoLogradouro + ' ' + data.logradouro);
                        $('#bairro').val(data.bairro);
                        $('#estado').val(data.estado);
                        $('#cidade').val(data.cidade);
                    }
                });
            });

        });
    &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;input type=&quot;text&quot; id=&quot;cep&quot; name=&quot;cep&quot; value=&quot;&quot; maxlength=&quot;8&quot; /&gt;&lt;br /&gt;
&lt;button id=&quot;buscar-cep&quot;&gt;Buscar&lt;/button&gt;&lt;br /&gt;&lt;br /&gt;

Logradouro&lt;br /&gt;
&lt;input type=&quot;text&quot; id=&quot;logradouro&quot; name=&quot;logradouro&quot; value=&quot;&quot; /&gt;&lt;br /&gt;
Bairro&lt;br /&gt;
&lt;input type=&quot;text&quot; id=&quot;bairro&quot; name=&quot;bairro&quot; value=&quot;&quot; /&gt;&lt;br /&gt;
Estado&lt;br /&gt;
&lt;input type=&quot;text&quot; id=&quot;estado&quot; name=&quot;estado&quot; value=&quot;&quot; /&gt;&lt;br /&gt;
Cidade&lt;br /&gt;
&lt;input type=&quot;text&quot; id=&quot;cidade&quot; name=&quot;cidade&quot; value=&quot;&quot; /&gt;&lt;br /&gt;

&lt;/body&gt;
&lt;/html&gt;

</pre>
<p>Como eu disse anteriomente, o parâmetro JSON passado serve alguns callbacks no qual são executados durante a busca do CEP. Os callbacks disponíveis são:</p>
<ul>
<li><strong>load:</strong> É chamado antes de realizar a consulta do CEP.</li>
<li><strong>complete:</strong> É chamado quando a consulta ao WebService é finalizada.</li>
<li><strong>error:</strong> É chamado quando ocorre algum erro na chamada ou o CEP não retorna dados válidos. Recebe um parâmetro com a mensagem do erro que ocorreu.</li>
<li><strong>success</strong>: É chamado quando o retorno do endereço é realizado com sucesso. Recebe um parâmetro com os dados do endereço no formato JSON.</li>
</ul>
<p>Com isso em mente podemos ter mais controle sobre o processo de busca e dar um feedback visual para o usuário demonstrando que uma busca está sendo realizada. No exemplo de código dado acima fiz alguns incrementos para manipular os callbacks citados.</p>
<pre class="brush: xml; title: ; notranslate">

@{ Layout = null; }
&lt;!DOCTYPE html&gt;
&lt;html&gt;
&lt;head&gt;
    &lt;title&gt;Demo jQuery CEP&lt;/title&gt;
    &lt;script src=&quot;@Url.Content(&quot;~/Scripts/jquery-1.6.3.min.js&quot;)&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
    &lt;script src=&quot;@Url.Content(&quot;~/Scripts/jquery.cep-1.0.min.js&quot;)&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
    &lt;script type=&quot;text/javascript&quot;&gt;
        jQuery(function () {

            $('#buscar-cep').click(function () {
                $('#cep').cep({
                    load: function () {
                        //Exibe a div loading
                        $('#loading').show();
                    },
                    complete: function () {
                        //Esconde a div loading
                        $('#loading').hide();
                    },
                    error: function (msg) {
                        //Exibe em alert a mensagem de erro retornada
                        alert(msg);
                    },
                    success: function (data) {
                        $('#logradouro').val(data.tipoLogradouro + ' ' + data.logradouro);
                        $('#bairro').val(data.bairro);
                        $('#estado').val(data.estado);
                        $('#cidade').val(data.cidade);
                    }
                });
            });

        });
    &lt;/script&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;input type=&quot;text&quot; id=&quot;cep&quot; name=&quot;cep&quot; value=&quot;&quot; maxlength=&quot;8&quot; /&gt;&lt;br /&gt;
&lt;label id=&quot;loading&quot; style=&quot;display:none&quot;&gt;Buscando...&lt;/label&gt;&lt;br /&gt;

&lt;button id=&quot;buscar-cep&quot;&gt;Buscar&lt;/button&gt;&lt;br /&gt;&lt;br /&gt;

Logradouro&lt;br /&gt;
&lt;input type=&quot;text&quot; id=&quot;logradouro&quot; name=&quot;logradouro&quot; value=&quot;&quot; /&gt;&lt;br /&gt;
Bairro&lt;br /&gt;
&lt;input type=&quot;text&quot; id=&quot;bairro&quot; name=&quot;bairro&quot; value=&quot;&quot; /&gt;&lt;br /&gt;
Estado&lt;br /&gt;
&lt;input type=&quot;text&quot; id=&quot;estado&quot; name=&quot;estado&quot; value=&quot;&quot; /&gt;&lt;br /&gt;
Cidade&lt;br /&gt;
&lt;input type=&quot;text&quot; id=&quot;cidade&quot; name=&quot;cidade&quot; value=&quot;&quot; /&gt;&lt;br /&gt;

&lt;/body&gt;
&lt;/html&gt;

</pre>
<p><a href="http://mbanagouro.net/site/wp-content/uploads/2011/09/jquery-cep-process.png" rel="lightbox[898]" title="Feedback na busca com jQuery CEP"><img class="lazy aligncenter size-medium wp-image-923" title="Feedback na busca com jQuery CEP" src="http://mbanagouro.net/site/wp-content/plugins/jquery-image-lazy-loading/images/grey.gif" data-original="http://mbanagouro.net/site/wp-content/uploads/2011/09/jquery-cep-process-300x199.png" alt="Feedback na busca com jQuery CEP" width="300" height="199" /><noscript rel="lightbox[898]" title="Feedback na busca com jQuery CEP"><img class="aligncenter size-medium wp-image-923" title="Feedback na busca com jQuery CEP" src="http://mbanagouro.net/site/wp-content/uploads/2011/09/jquery-cep-process-300x199.png" alt="Feedback na busca com jQuery CEP" width="300" height="199" /></noscript></a></p>
<p><a href="http://mbanagouro.net/site/wp-content/uploads/2011/09/jquery-cep-find.png" rel="lightbox[898]" title="Retorno dos dados com jQuery CEP"><img class="lazy aligncenter size-medium wp-image-924" title="Retorno dos dados com jQuery CEP" src="http://mbanagouro.net/site/wp-content/plugins/jquery-image-lazy-loading/images/grey.gif" data-original="http://mbanagouro.net/site/wp-content/uploads/2011/09/jquery-cep-find-300x199.png" alt="Retorno dos dados com jQuery CEP" width="300" height="199" /><noscript rel="lightbox[898]" title="Retorno dos dados com jQuery CEP"><img class="aligncenter size-medium wp-image-924" title="Retorno dos dados com jQuery CEP" src="http://mbanagouro.net/site/wp-content/uploads/2011/09/jquery-cep-find-300x199.png" alt="Retorno dos dados com jQuery CEP" width="300" height="199" /></noscript></a></p>
<p><a href="http://mbanagouro.net/site/wp-content/uploads/2011/09/jquery-cep-erro.png" rel="lightbox[898]" title="Erro no retorno da busca do jQuery CEP"><img class="lazy aligncenter size-medium wp-image-925" title="Erro no retorno da busca do jQuery CEP" src="http://mbanagouro.net/site/wp-content/plugins/jquery-image-lazy-loading/images/grey.gif" data-original="http://mbanagouro.net/site/wp-content/uploads/2011/09/jquery-cep-erro-300x199.png" alt="Erro no retorno da busca do jQuery CEP" width="300" height="199" /><noscript rel="lightbox[898]" title="Erro no retorno da busca do jQuery CEP"><img class="aligncenter size-medium wp-image-925" title="Erro no retorno da busca do jQuery CEP" src="http://mbanagouro.net/site/wp-content/uploads/2011/09/jquery-cep-erro-300x199.png" alt="Erro no retorno da busca do jQuery CEP" width="300" height="199" /></noscript></a></p>
<p>Bons códigos!</p>
<p>Baixe aqui o demo deste post: <a href="http://mbanagouro.net/site/wp-content/uploads/2011/09/DemoJqueryCep.zip">DemoJqueryCep.zip</a></p>
]]></content:encoded>
			<wfw:commentRss>http://mbanagouro.net/site/2011/09/09/consultando-cep-com-asp-net-mvc-3-e-jquery-cep/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Aplicando máscara em campos com valores monetário com jQuery</title>
		<link>http://mbanagouro.net/site/2011/08/31/aplicando-mascara-em-campos-com-valores-monetario-em-campos-com-jquery/</link>
		<comments>http://mbanagouro.net/site/2011/08/31/aplicando-mascara-em-campos-com-valores-monetario-em-campos-com-jquery/#comments</comments>
		<pubDate>Wed, 31 Aug 2011 01:36:29 +0000</pubDate>
		<dc:creator>Michel Banagouro</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[JQuery]]></category>

		<guid isPermaLink="false">http://mbanagouro.net/site/?p=888</guid>
		<description><![CDATA[O jQuery Price Format é um plugin específico para aplicar máscaras em campos com valores monetários. Veja neste post como usar esse poderoso plugin.]]></description>
				<content:encoded><![CDATA[<p>Recentemente fiz um post neste blog ensinando como <a title="Aplicando máscaras em campos com jQuery" href="http://mbanagouro.net/site/2011/05/11/aplicando-mascaras-em-campos-com-jquery/" target="_blank">aplicar máscaras em campos com jQuery</a>. Na maioria das situações o plugin apresentado resolve o problema com perfeição, mas em casos como a formatação de valores monetários precisam ser tratados de forma específica.</p>
<p>O <a title="jQuery Price Format" href="http://www.jquerypriceformat.com/" target="_blank">jQuery Price Format</a> é um plugin que atende esse caso e é bastante simples de usar e altamente customizável. Vamos para os exemplos:</p>
<p>Para utilizá-lo faça a referência dos arquivos necessários na tag head da sua página html. Neste caso só precisamos do <a title="jQuery" href="http://jquery.com/" target="_blank">jQuery</a> e do próprio <a title="jQuery Price Format" href="http://www.jquerypriceformat.com/" target="_blank">jQuery Price Format</a>.</p>
<pre class="brush: xml; title: ; notranslate">

&lt;head&gt;
    &lt;title&gt; título do site &lt;/title&gt;
    ...
    &lt;script type=&quot;text/javascript&quot; src=&quot;jquery-1.6.min.js&quot;&gt;&lt;/script&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;jquery.price_format.1.5.js&quot;/&gt;&lt;/script&gt;
&lt;/head&gt;

</pre>
<p>Para utilizar o plugin basta usar o seletor do jQuery para &#8220;selecionar&#8221; os inputs que você deseja aplicar a máscara e chamar a função priceFormat(). A função priceFormat() recebe como parâmetro um JSON onde é possível passar algumas propriedades que permitem customizar a máscara de formatação.</p>
<pre class="brush: jscript; title: ; notranslate">

$('input.money').priceFormat({ centsSeparator: ',', thousandsSeparator: '.' });

</pre>
<p>No exemplo acima, eu estou selecionando todos os input que possuem a class money e aplico a máscara definindo que o separador de centavos (centsSeparator) será com vírgula e separador de milhar (thousandsSeparator) será com ponto.</p>
<p>Abaixo confira outras maneiras de utilizar o plugin:</p>
<pre class="brush: xml; title: ; notranslate">

&lt;!DOCTYPE html&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; &gt;
&lt;head&gt;
&lt;title&gt;Máscara com jQuery em valores montários&lt;/title&gt;

&lt;script type=&quot;text/javascript&quot; src=&quot;jquery-1.6.min.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;jquery.price_format.1.5.js&quot;/&gt;&lt;/script&gt;

&lt;script type=&quot;text/javascript&quot;&gt;
jQuery(function () {
			$('#exemplo1').priceFormat();

			$('#exemplo2').priceFormat({
				prefix: 'R$ ',
				centsSeparator: ',',
				thousandsSeparator: '.'
			});

			$('#exemplo3').priceFormat({
				prefix: '',
				thousandsSeparator: ''
			});

			$('#exemplo4').priceFormat({
				limit: 5,
				centsLimit: 3
			});

			$('#exemplo5').priceFormat({
				clearPrefix: true
			});

			$('#exemplo6').priceFormat({
				allowNegative: true
			});
		});
&lt;/script&gt;

&lt;/head&gt;
&lt;body&gt;
&lt;h1&gt;Máscara com jQuery em valores montários&lt;/h1&gt;

	&lt;h2&gt;Exemplo 1 - Básico&lt;/h2&gt;
	Resultado: &lt;input type=&quot;text&quot; id=&quot;exemplo1&quot; name=&quot;basic&quot; value=&quot;123456&quot; /&gt;

	&lt;h2&gt;Exemplo 2 - Customização&lt;/h2&gt;
	Resultado: &lt;input type=&quot;text&quot; id=&quot;exemplo2&quot; name=&quot;customize&quot; value=&quot;123456&quot; /&gt;

	&lt;h2&gt;Exemplo 3 - Pulando algumas opções&lt;/h2&gt;
	Resultado: &lt;input type=&quot;text&quot; id=&quot;exemplo3&quot; name=&quot;customize&quot; value=&quot;123456&quot; /&gt;

	&lt;h2&gt;Exemplo 4 - Trabalhando com limites&lt;/h2&gt;
	Resultado: &lt;input type=&quot;text&quot; id=&quot;exemplo4&quot; name=&quot;customize&quot; value=&quot;12345&quot; /&gt;

	&lt;h2&gt;Exemplo 5 - Limpando prefixo ao sair do campo&lt;/h2&gt;
	Resultado: &lt;input type=&quot;text&quot; id=&quot;exemplo5&quot; name=&quot;customize&quot; value=&quot;123456&quot; /&gt;

	&lt;h2&gt;Exemplo 6 - Permitindo negativo&lt;/h2&gt;
	Resultado: &lt;input type=&quot;text&quot; id=&quot;exemplo6&quot; name=&quot;customize&quot; value=&quot;-1231&quot; /&gt;

&lt;/body&gt;
&lt;/html&gt;

</pre>
<p>Abraço e até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://mbanagouro.net/site/2011/08/31/aplicando-mascara-em-campos-com-valores-monetario-em-campos-com-jquery/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>2º Curso de ASP .NET MVC em Londrina [Finalizado]</title>
		<link>http://mbanagouro.net/site/2011/06/30/2-curso-de-asp-net-mvc-em-londrina/</link>
		<comments>http://mbanagouro.net/site/2011/06/30/2-curso-de-asp-net-mvc-em-londrina/#comments</comments>
		<pubDate>Thu, 30 Jun 2011 16:33:23 +0000</pubDate>
		<dc:creator>Michel Banagouro</dc:creator>
				<category><![CDATA[ASP .NET MVC]]></category>
		<category><![CDATA[Cursos]]></category>

		<guid isPermaLink="false">http://mbanagouro.net/site/?p=859</guid>
		<description><![CDATA[2º Curso de ASP .NET MVC em Londrina]]></description>
				<content:encoded><![CDATA[<p>No mês de <strong>Julho (07/2011)</strong> irei realizar um curso de ASP .NET MVC na PUC em Londrina. O curso será bastante prático com vários exemplos, dicas, melhores práticas e um projetinho básico que será desenvolvido em sala por todos. As vagas são limitadas (10 alunos).</p>
<p><strong>Pré-Requisitos</strong></p>
<ul>
<li>Básico sobre HTML e CSS.</li>
<li>Orientação a Objetos.</li>
</ul>
<p><strong>Informações sobre o curso</strong></p>
<p><strong>Data:</strong> 11/07/2011 à 22/07/2011<br />
<strong>Horário: </strong>19h às 22h30<br />
<strong>Carga Horária:</strong> 40hrs (aproximadamente)<br />
<span style="color: #ff0000;"><strong>Valor:</strong> 2x de R$293,00 (R$586,00)</span></p>
<p><strong>Local:</strong> Pontifícia Universidade Católica do Paraná (PUC)<br />
<strong>Cidade:</strong> Londrina / PR<br />
<strong>Logradouro:</strong> Av. Jockei Club, 485<br />
<strong>Bairro:</strong> Hípica<br />
<strong>CEP:</strong> 86067-000</p>
<p><strong>Conteúdo</strong></p>
<ul>
<li><strong>ASP .NET MVC 3</strong>
<ul>
<li><strong>Visão Geral</strong></li>
<li>Criando a primeira aplicação MVC</li>
<li><strong>Routes</strong></li>
<li>Criando novas rotas</li>
<li>Usando parâmetros em rotas</li>
<li>Parâmetros opcionais e padrões nas rotas</li>
<li>Restrições nos parâmetros das rotas</li>
<li>Ignorando rotas</li>
<li><strong>Controllers</strong></li>
<li>ActionResults</li>
<li>Model Binder</li>
<li>Extensão de Controllers</li>
<li>ActionFilters</li>
<li><strong>Views</strong></li>
<li>Razor</li>
<li>Layout</li>
<li>Sections</li>
<li>Helpers</li>
<li>Partial Views</li>
<li><strong>Model</strong></li>
<li>ViewModel</li>
<li><strong>Ajax</strong></li>
</ul>
</li>
<li><strong>Entity Framework (Básico)</strong></li>
<li><strong>jQuery (Básico)</strong></li>
<li><strong>Projeto Final</strong></li>
</ul>
<p>Qualquer dúvida entre em contato através da área de contato do site.</p>
]]></content:encoded>
			<wfw:commentRss>http://mbanagouro.net/site/2011/06/30/2-curso-de-asp-net-mvc-em-londrina/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>1º Curso de ASP .NET MVC em Londrina [Finalizado]</title>
		<link>http://mbanagouro.net/site/2011/06/01/curso-de-asp-net-mvc/</link>
		<comments>http://mbanagouro.net/site/2011/06/01/curso-de-asp-net-mvc/#comments</comments>
		<pubDate>Wed, 01 Jun 2011 16:23:14 +0000</pubDate>
		<dc:creator>Michel Banagouro</dc:creator>
				<category><![CDATA[Cursos]]></category>
		<category><![CDATA[ASP .NET MVC]]></category>

		<guid isPermaLink="false">http://mbanagouro.net/site/?p=849</guid>
		<description><![CDATA[Neste último sábado (28/05/2011) ministrei o último dia do curso de ASP .NET MVC em Londrina]]></description>
				<content:encoded><![CDATA[<p>Neste último sábado (28/05/2011) ministrei o último dia do curso de ASP .NET MVC em Londrina. O curso teve duração de 5 sábados e foi montado com foco total na necessidade dos alunos.</p>
<p>O conteúdo do curso basicamente foi:</p>
<ul>
<li><strong>ASP .NET MVC 3, do básico ao avançado.</strong></li>
<li><strong>jQuery (Básico)</strong></li>
<li><strong>Entity Framework (Básico)</strong></li>
<li><strong>Boas práticas de desenvolvimento: Manutenibilidade, Desempenho, etc.</strong></li>
<li><strong>Desenvolvimento de um projeto de E-Commerce.</strong></li>
</ul>
<p>Foi bastante coisa e tudo isso foi possível graças a qualidade técnica que o pessoal já tinha com desenvolvimento. Além do conteúdo, respondi várias dúvidas e mostrei várias dicas, bibliotecas e plugins que me ajudam no dia a dia no desenvolvimento com o ASP .NET MVC.</p>
<p>Quero agradecer o pessoal de Maringá (Mauro, Daniel e Érico) por ter entrado em contato comigo e me solicitaram para montar esse curso. Foi o primeiro de MVC que eu ministrei e pelo feedback deles gostaram bastante!</p>
<p>Obrigado mais uma vez e espero ministrar outros cursos. Quem tiver interesse também é só entrar em contato!</p>
<div id="attachment_851" class="wp-caption aligncenter" style="width: 310px"><a href="http://mbanagouro.net/site/wp-content/uploads/2011/06/curso-aspnetmvc.jpg" rel="lightbox[849]" title="curso-aspnetmvc"><img class="lazy size-medium wp-image-851" title="curso-aspnetmvc" src="http://mbanagouro.net/site/wp-content/plugins/jquery-image-lazy-loading/images/grey.gif" data-original="http://mbanagouro.net/site/wp-content/uploads/2011/06/curso-aspnetmvc-300x225.jpg" alt="Curso de ASP .NET MVC" width="300" height="225" /><noscript rel="lightbox[849]" title="curso-aspnetmvc"><img class="size-medium wp-image-851" title="curso-aspnetmvc" src="http://mbanagouro.net/site/wp-content/uploads/2011/06/curso-aspnetmvc-300x225.jpg" alt="Curso de ASP .NET MVC" width="300" height="225" /></noscript></a><p class="wp-caption-text">Curso de ASP .NET MVC - Daniel, Mauro, Érico e Eu</p></div>
]]></content:encoded>
			<wfw:commentRss>http://mbanagouro.net/site/2011/06/01/curso-de-asp-net-mvc/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Utilizando a API do migre.me no C#</title>
		<link>http://mbanagouro.net/site/2011/05/18/utilizando-a-api-do-migre-me-no-c/</link>
		<comments>http://mbanagouro.net/site/2011/05/18/utilizando-a-api-do-migre-me-no-c/#comments</comments>
		<pubDate>Wed, 18 May 2011 00:53:28 +0000</pubDate>
		<dc:creator>Michel Banagouro</dc:creator>
				<category><![CDATA[C#]]></category>

		<guid isPermaLink="false">http://mbanagouro.net/site/?p=829</guid>
		<description><![CDATA[Veja neste post como utilizar a API do migre.me para encurtar endereços de URL através da linguagem C#.]]></description>
				<content:encoded><![CDATA[<p>O <a title="migre.me" href="http://migre.me/" target="_blank">migre.me</a> é um serviço de encurtador de URL criado para facilitar a divulgação de links pela web, principalmente pelo Twitter já que ele possui apenas 140 caracteres disponíveis por mensagem. Mais do que encurtar, o <a title="migre.me" href="http://migre.me/" target="_blank">migre.me</a> também contabiliza os cliques e retweets feitos na sua URL, permitindo que você consiga monitorar o alcance da sua divulgação.</p>
<p>Uma excelente sacada do <a title="migre.me" href="http://migre.me/" target="_blank">migre.me</a> é disponibilizar uma API para que nós desenvolvedores possamos usufruir do serviço de encurtação de URL dentro das nossas aplicações usando qualquer linguagem. Usar a API não é nada complexo, simplesmente devemos chamar a URL da API passando o endereço que queremos encurtar, obter o XML de retorno e extrair a informação desejada.</p>
<p>Para ver como é simples eu até desenvolvi uma classe que encapsula essa lógica de acesso e retorna o resultado esperado:</p>
<pre class="brush: csharp; title: ; notranslate">

using System;
using System.IO;
using System.Linq;
using System.Net;
using System.Xml.Linq;

namespace MyApp
{
    public static class MigreMe
    {
        public static string EncurtarUrl(string url)
        {
            string retorno = String.Empty;
            // url da API do migre.me
            string urlMigreMe = string.Format(&quot;http://migre.me/api.xml?url={0}&quot;, url);

            WebClient client = new WebClient();
            // uso o cliente web para fazer uma requisição a url e obter o xml de retorno
            Stream stream = client.OpenRead(urlMigreMe);

            // carrego o xml
            XDocument xml = XDocument.Load(stream);
            // Busco com o LINQ o elemento &quot;migre&quot; do xml
            XElement elemento = xml.Descendants(&quot;migre&quot;).FirstOrDefault(x =&gt; x.Name == &quot;migre&quot;);
            if (elemento != null)
            {
                retorno = elemento.Value;
            }

            return retorno;
        }
    }
}

</pre>
<p>Para usá-la basta chamar o método <strong>EncurtarUrl() </strong>passando como parâmetro a URL desejada. Veja um exemplo do uso dessa classe em um projeto <strong>Console Application</strong>:</p>
<pre class="brush: csharp; title: ; notranslate">

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MyApp
{
    class Program
    {
        static void Main(string[] args)
        {
            var resultado = MigreMe.EncurtarUrl(&quot;http://www.mbanagouro.net/&quot;);
            Console.WriteLine(resultado);
        }
    }
}

</pre>
<div id="attachment_831" class="wp-caption aligncenter" style="width: 310px"><a href="http://mbanagouro.net/site/wp-content/uploads/2011/05/resultado-migreme.png" rel="lightbox[829]" title="URL encurtada pela classe MigreMe"><img class="lazy size-medium wp-image-831" title="URL encurtada pela classe MigreMe" src="http://mbanagouro.net/site/wp-content/plugins/jquery-image-lazy-loading/images/grey.gif" data-original="http://mbanagouro.net/site/wp-content/uploads/2011/05/resultado-migreme-300x151.png" alt="URL encurtada pela classe MigreMe" width="300" height="151" /><noscript rel="lightbox[829]" title="URL encurtada pela classe MigreMe"><img class="size-medium wp-image-831" title="URL encurtada pela classe MigreMe" src="http://mbanagouro.net/site/wp-content/uploads/2011/05/resultado-migreme-300x151.png" alt="URL encurtada pela classe MigreMe" width="300" height="151" /></noscript></a><p class="wp-caption-text">URL encurtada pela classe MigreMe</p></div>
<p>Fique a vontade para usar essa classe em suas aplicações desktop ou web.</p>
<p>Abraço e até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://mbanagouro.net/site/2011/05/18/utilizando-a-api-do-migre-me-no-c/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Aplicando máscaras em campos com jQuery</title>
		<link>http://mbanagouro.net/site/2011/05/11/aplicando-mascaras-em-campos-com-jquery/</link>
		<comments>http://mbanagouro.net/site/2011/05/11/aplicando-mascaras-em-campos-com-jquery/#comments</comments>
		<pubDate>Wed, 11 May 2011 13:44:23 +0000</pubDate>
		<dc:creator>Michel Banagouro</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://mbanagouro.net/site/?p=811</guid>
		<description><![CDATA[O Masked Input é um plugin em jQuery que torna o processo de aplicar máscara em campos uma tarefa extremamente fácil. Veja neste post como aplicar máscaras nos campos de forma global!]]></description>
				<content:encoded><![CDATA[<p>Aplicar máscara de digitação em campos de texto é uma tarefa freqüente pra quem trabalha com desenvolvimento, seja web ou desktop. As máscaras forçam o usuário a digitar certas informações como CPF, CNPJ, datas e etc  com o <strong>tamanho</strong> e <strong>formato</strong> corretos.</p>
<p>O <a title="Masked Input" href="http://digitalbush.com/projects/masked-input-plugin/" target="_blank">Masked Input</a> é um plugin jQuery que torna esse processo extremamente simples. Para utilizá-lo é necessário somente do jQuery e o próprio Masked Input.</p>
<ul>
<li><a title="jQuery 1.6" href="http://code.jquery.com/jquery-1.6.min.js" target="_blank">jQuery 1.6</a></li>
<li><a title="Masked Input" href="http://cloud.github.com/downloads/digitalBush/jquery.maskedinput/jquery.maskedinput-1.3.min.js" target="_blank">Masked Input v1.3</a></li>
</ul>
<p><em>* Até a publicação deste post os plugins acima estavam em suas últimas versões. Veja se já não existem uma nova versão para cada um deles.</em></p>
<p>Para utilizá-lo faça a referência dos arquivos na tag head da sua página html.</p>
<pre class="brush: xml; title: ; notranslate">

&lt;head&gt;
    &lt;title&gt; título do site &lt;/title&gt;
    ...
    &lt;script type=&quot;text/javascript&quot; src=&quot;jquery-1.6.min.js&quot;&gt;&lt;/script&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;jquery.maskedinput-1.3.min.js&quot;/&gt;&lt;/script&gt;
&lt;/head&gt;

</pre>
<p>A regra que devemos seguir para aplicar as máscaras nos campos são as seguintes:</p>
<p><strong>a</strong> – Representa qualquer letra (A-Z, a-z).<br />
<strong>9</strong> – Representa qualquer número (0-9).<br />
<strong>*</strong> – Representa qualquer carácter alfanumérico (A-Z, a-z, 0-9).</p>
<p>Veja como podemos aplicar as máscaras com essas definições:</p>
<pre class="brush: xml; title: ; notranslate">

&lt;!DOCTYPE html&gt;
&lt;html xmlns=&quot;http://www.w3.org/1999/xhtml&quot; &gt;
&lt;head&gt;
    &lt;title&gt;Máscara com jQuery&lt;/title&gt;

    &lt;script type=&quot;text/javascript&quot; src=&quot;jquery-1.6.min.js&quot;&gt;&lt;/script&gt;
    &lt;script type=&quot;text/javascript&quot; src=&quot;jquery.maskedinput-1.3.min.js&quot;/&gt;&lt;/script&gt;
    
    &lt;script type=&quot;text/javascript&quot;&gt;
        jQuery(function () {

            $(&quot;.telefone&quot;).mask(&quot;9999-9999&quot;);
            $(&quot;.cpf&quot;).mask(&quot;999.999.999-99&quot;);
            $(&quot;.cep&quot;).mask(&quot;99999-999&quot;);
            $(&quot;.data&quot;).mask(&quot;99/99/9999&quot;);

        });
    &lt;/script&gt;

&lt;/head&gt;
&lt;body&gt;
    &lt;h1&gt;Máscara com jQuery&lt;/h1&gt;

    Telefone: &lt;input type=&quot;text&quot; class=&quot;telefone&quot; name=&quot;telefone&quot; value=&quot;&quot; /&gt;
    &lt;br /&gt;
    CPF: &lt;input type=&quot;text&quot; class=&quot;cpf&quot; name=&quot;cpf&quot; value=&quot;&quot; /&gt;
    &lt;br /&gt;
    CEP: &lt;input type=&quot;text&quot; class=&quot;cep&quot; name=&quot;cep&quot; value=&quot;&quot; /&gt;
    &lt;br /&gt;
    Data: &lt;input type=&quot;text&quot; class=&quot;data&quot; name=&quot;data&quot; value=&quot;&quot; /&gt;
    &lt;br /&gt;
&lt;/body&gt;
&lt;/html&gt;

</pre>
<p>Por meio do jQuery eu defini que todo input que tiver a classe <strong>telefone</strong>, seja aplicado a máscara <strong>&#8220;(99) 9999-9999&#8243;</strong>. E assim também fiz com as classes <strong>cpf</strong>, <strong>cep </strong>e <strong>data</strong>. Essa abordagem me permite definir as máscaras aos campos de forma global, só precisando aplicar as classes nos inputs necessários. Uma <strong>boa dica </strong>é você definir essa configuração em um arquivo JavaScript separado e referência-lo nas páginas que você precisar. Geralmente costumo criar um arquivo geral chamado <strong>scripts.js</strong> que irá executar várias instruções nas páginas.</p>
<p>Espero que tenham gostado dessa dica.</p>
<p>Abraço e até a próxima!</p>
]]></content:encoded>
			<wfw:commentRss>http://mbanagouro.net/site/2011/05/11/aplicando-mascaras-em-campos-com-jquery/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
	</channel>
</rss>
