<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:series="http://organizeseries.com/" version="2.0">

<channel>
	<title>Cleyton Ferrari</title>
	
	<link>http://cleytonferrari.com</link>
	<description>Sempre em busca do conhecimento</description>
	<lastBuildDate>Mon, 01 Apr 2013 12:43:03 +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>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/cleytonferrari" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="cleytonferrari" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Vídeo-Aula ASP.Net MVC na prática – Parte 7</title>
		<link>http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-7/</link>
		<comments>http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-7/#comments</comments>
		<pubDate>Mon, 01 Apr 2013 12:37:38 +0000</pubDate>
		<dc:creator>Cleyton Ferrari</dc:creator>
				<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Vídeo-Aula]]></category>

		<guid isPermaLink="false">http://cleytonferrari.com/?p=536</guid>
		<description><![CDATA[<p>Este post é a parte 7 de 7 partes da série ASP.Net MVCEsta é a sétima parte da série ASP .Net MVC na prática, que ira abordar os conceitos e práticas que norteiam o desenvolvimento de aplicativos baseado no padrão MVC utilizando o ASP .Net Lembre-se: você pode baixar o código desta vídeo-aula no meu [...]</p><p>O post <a href="http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-7/">Vídeo-Aula ASP.Net MVC na prática &#8211; Parte 7</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">Este post é a parte 7 de 7 partes da série <a href="http://cleytonferrari.com/series/asp-net-mvc/" class="series-38" title="ASP.Net MVC">ASP.Net MVC</a></div><p>Esta é a sétima parte da série ASP .Net MVC na prática, que ira abordar os conceitos e práticas que norteiam o desenvolvimento de aplicativos baseado no padrão MVC utilizando o ASP .Net<span id="more-536"></span></p>
<p><strong>Lembre-se:</strong> você pode baixar o código desta vídeo-aula no meu repositório do GitHub, <a href="https://github.com/cleytonferrari/ASPNETmvcNaPratica">https://github.com/cleytonferrari/ASPNETmvcNaPratica</a></p>
<p>Nesta sétima vídeo-aula sobre <a href="http://cleytonferrari.com/series/asp-net-mvc/">ASP .Net MVC</a> é abordado:</p>
<ul>
<li>Áreas</li>
<li>Criando controller com o mesmo nome</li>
</ul>
<p>Durante o decorrer desta vídeo-aula sobre <a title="Vídeo-Aula ASP .Net MVC na prática – Parte 1" href="http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-1/">ASP .NET MVC</a> você verá como criar Áreas e como usa-las para separar fisica e logicamente seu site/aplicativo, entenderá como corrigir o erro de controllers com o mesmo nome e aprenderá a criar links que aponte para as novas áreas.</p>
<p>Ao final desta vídeo-aula você será capaz de criar separações físicas para áreas administrativas ou de conteúdo em seu site ou aplicativo.</p>
<p><iframe src="http://www.youtube.com/embed/TSFFoHIn3tA?rel=0" height="315" width="560" frameborder="0"></iframe></p>
<p><strong>Para saber mais:</strong></p>
<ul>
<li><a title="" href="http://cleytonferrari.com/category/asp-net/">ASP .NET</a></li>
</ul>
<p>Lembre-se você pode participar da nossa comunidade no Facebook acessando <a title="" href="https://www.facebook.com/groups/tiselvagem/">https://www.facebook.com/groups/tiselvagem/</a></p>
<p>O post <a href="http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-7/">Vídeo-Aula ASP.Net MVC na prática &#8211; Parte 7</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-7/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<series:name><![CDATA[ASP.Net MVC]]></series:name>
	</item>
		<item>
		<title>Domínio Fake, Alias de domínio e Binding de domínios no IISExpress</title>
		<link>http://cleytonferrari.com/dominio-fake-alias-de-dominio-e-binding-de-dominios-no-iisexpress/</link>
		<comments>http://cleytonferrari.com/dominio-fake-alias-de-dominio-e-binding-de-dominios-no-iisexpress/#comments</comments>
		<pubDate>Sun, 24 Feb 2013 15:45:36 +0000</pubDate>
		<dc:creator>Cleyton Ferrari</dc:creator>
				<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[IISExpress]]></category>

		<guid isPermaLink="false">http://cleytonferrari.com/?p=512</guid>
		<description><![CDATA[<p>Já precisou criar uns domínios fake para teste em sua máquina de desenvolvimento? Ou melhor criar alias para domínios de teste. Na verdade o nome correto é Binding Domain, ou ligações de domínios, vamos ver como é simples criar nossos binding para domínios. A motivação deste post: Aqui na empresa estamos criando um sistema para [...]</p><p>O post <a href="http://cleytonferrari.com/dominio-fake-alias-de-dominio-e-binding-de-dominios-no-iisexpress/">Domínio Fake, Alias de domínio e Binding de domínios no IISExpress</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Já precisou criar uns domínios fake para teste em sua máquina de desenvolvimento? Ou melhor criar alias para domínios de teste. Na verdade o nome correto é Binding Domain, ou ligações de domínios, vamos ver como é simples criar nossos binding para domínios.<br />
<span id="more-512"></span><br />
<em><strong>A motivação deste post:</strong></em> Aqui na empresa estamos criando um sistema para gerenciamento de prestações de contas para Câmaras Municipais, ai resolvemos criar um único sistema que basta trocar o template baseado no domínio que solicita, ou seja, baseado no domínio que é usado fornecemos os dados e o template do mesmo.</p>
<h1 style="font-size:25px">Criando o projeto para teste do Binding de Dominio</h1>
<p>Para este exemplo foi criado um projeto em <a href="http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-1/" title="Vídeo-Aula ASP.Net MVC na prática – Parte 1">ASP .Net MVC</a> chamado “MeusAliasDeUrl”, como template Basic, e adicionado um controller Home e uma View Index, como mostra o código abaixo.</p>
<p><strong>HomeController.cs</strong></p>
<pre class="brush: csharp; title: ; notranslate">
using System.Web.Mvc;
using MeusAliasDeUrl.Models;

namespace MeusAliasDeUrl.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            ViewBag.Host = GetHost.Pegar();
            return View();
        }
    }
}
</pre>
<p><strong>Index.cshtml</strong></p>
<pre class="brush: xml; title: ; notranslate">
@ {
    ViewBag.Title = &quot;Exemplo de Bindig de Dominio&quot;;
}
&lt;h2&gt;@ ViewBag.Host&lt;/h2&gt;
</pre>
<p>Também foi criado um classe com o método que retorna qual domínio está solicitando a requisição, como mostra a classe abaixo.</p>
<p><strong>GetHost.cs</strong></p>
<pre class="brush: csharp; title: ; notranslate">
using System.Web;

namespace MeusAliasDeUrl.Models
{
    public class GetHost
    {
        public static string Pegar()
        {
            var url = HttpContext.Current.Request.Url.Host;   
            return url;
        }
    }
}
</pre>
<h2 style="font-size:20px">Configurando o Binding no IISExpress</h2>
<p>Para configurar o alias para o nossos domínios fakes basta abrir o arquivo &#8220;applicationhost.config&#8221; que fica na pasta &#8220;Documents/IISExpress/config&#8221; do seu usuário do Windows.<br />
No meu caso o caminho completo você pode ver abaixo.</p>
<pre class="brush: csharp; title: ; notranslate">
c:\Users\Cleyton\Documents\IISExpress\config\applicationhost.config
</pre>
<p>Uma vez aberto o arquivo &#8220;applicationhost.config&#8221; basta procurar o nome do seu projeto dentro do arquivo, neste caso o projeto chama &#8220;MeusAliasDeUrl&#8221;, você vai encontrar as configurações deste seu projeto, procure a tag &#8220;binding&#8221; baseado no atributo já existente para &#8220;localhost&#8221;, crie quantos mais forem necessários, no meu caso, eu criei mais 3 domínios fakes.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;site name=&quot;MeusAliasDeUrl&quot; id=&quot;55&quot;&gt;
    &lt;application path=&quot;/&quot; applicationPool=&quot;Clr4IntegratedAppPool&quot;&gt;
         &lt;virtualDirectory path=&quot;/&quot; physicalPath=&quot;C:\Users\Cleyton\Documents\Visual Studio 2012\Projects\MeusAliasDeUrl\MeusAliasDeUrl&quot; /&gt;
    &lt;/application&gt;
    &lt;bindings&gt;
        &lt;binding protocol=&quot;http&quot; bindingInformation=&quot;*:16529:localhost&quot; /&gt;
        &lt;binding protocol=&quot;http&quot; bindingInformation=&quot;*:16529:dominiofake.com&quot; /&gt;
        &lt;binding protocol=&quot;http&quot; bindingInformation=&quot;*:16529:camaraaltoparaiso.com&quot; /&gt;
        &lt;binding protocol=&quot;http&quot; bindingInformation=&quot;*:16529:camaraariquemes.com&quot; /&gt;
    &lt;/bindings&gt;
&lt;/site&gt;
</pre>
<p>Veja como é simples! Lembre-se de manter a porta padrão que o IISExpress gerou para o seu site, no meu caso foi a porta 16529, é logico que caso queira simular sua aplicação para que ela responda por outra porta basta trocar o numero da porta!</p>
<h2 style="font-size:20px">Configurando o Host da máquina local</h2>
<p>Agora precisamos apontar nossos bindings de domínios para o ip da nossa máquina local, para isso precisamos editar o arquivos &#8220;c:\Windows\System32\Drivers\etc\hosts&#8221; lembre-se de <strong>abrir o editor como administrador</strong>, caso contrário você não conseguirá salvar as alterações neste arquivo.<br />
Veja como ficou o meu arquivo Hosts.</p>
<pre class="brush: plain; title: ; notranslate">
...
127.0.0.1       dominiofake.com
127.0.0.1       camaraaltoparaiso.com
127.0.0.1       camaraariquemes.com
...
</pre>
<h2 style="font-size:20px">Testando os bidings de domínios</h2>
<p>Agora basta rodar nossa aplicação em <a href="http://cleytonferrari.com/series/asp-net-mvc/" title="Série sobre ASP .Net MVC">ASP .Net MVC</a>, lembre-se de <strong>executar o Visual Studio como Administrador</strong>, caso contrário ele não terá permissão para acessar os nosso bindings.</p>
<p>Ao executar o Visual Studio ira chamar por padrão a url &#8220;http://localhost:16529&#8243;, basta digitar os outros domínios fakes no browser para testar a nossa aplicação.</p>
<p><a href="http://cleytonferrari.com/wp-content/uploads/2013/02/dominios.png"><img src="http://cleytonferrari.com/wp-content/uploads/2013/02/dominios-300x167.png" alt="dominios" width="300" height="167" class="aligncenter size-medium wp-image-514" /></a></p>
<p>Espero que tenham gostado desta dica ela é bastante útil quando você quer testar como sua aplicação vai se comportar com um domínio real, ou se quiser enganar algum serviço para teste, como por exemplo, ao testar aplicativos que se autenticam via Twitter por exemplo, ele não aceita o domínio localhost, ai você pode usar esta técnica de binding de domínios para testar na sua máquina a autenticação do twitter sem ter que publicar sua aplicação primeiro.<br />
Até a próxima pessoal.</p>
<p>O post <a href="http://cleytonferrari.com/dominio-fake-alias-de-dominio-e-binding-de-dominios-no-iisexpress/">Domínio Fake, Alias de domínio e Binding de domínios no IISExpress</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://cleytonferrari.com/dominio-fake-alias-de-dominio-e-binding-de-dominios-no-iisexpress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Arquivos CSV com C# no ASP .Net MVC 4</title>
		<link>http://cleytonferrari.com/arquivos-csv-com-c-no-asp-net-mvc-4/</link>
		<comments>http://cleytonferrari.com/arquivos-csv-com-c-no-asp-net-mvc-4/#comments</comments>
		<pubDate>Wed, 20 Feb 2013 02:54:43 +0000</pubDate>
		<dc:creator>Cleyton Ferrari</dc:creator>
				<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[CSharp]]></category>

		<guid isPermaLink="false">http://cleytonferrari.com/?p=501</guid>
		<description><![CDATA[<p>Existem várias formas de armazenar seus dados, uma delas é utilizar arquivos CSV, que são arquivos de textos que usam algum separador para seus campos, vamos ver como consumir esses arquivos em nossa aplicação em ASP .Net MVC. Veja uma demonstração da aplicação utilizado como exemplo em http://cid.apphb.com/ A motivação deste post veio da necessidade [...]</p><p>O post <a href="http://cleytonferrari.com/arquivos-csv-com-c-no-asp-net-mvc-4/">Arquivos CSV com C# no ASP .Net MVC 4</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Existem várias formas de armazenar seus dados, uma delas é utilizar arquivos CSV, que são arquivos de textos que usam algum separador para seus campos, vamos ver como consumir esses arquivos em nossa aplicação em ASP .Net MVC.<br />
<span id="more-501"></span><br />
Veja uma demonstração da aplicação utilizado como exemplo em <a href="http://cid.apphb.com/">http://cid.apphb.com/</a></p>
<p>A motivação deste post veio da necessidade de importar os dados do <a href="http://www.datasus.gov.br/cid10/V2008/cid10.htm" title="Cid datasus">CID (Cadastro internacional de Doenças) do DataSUS</a>, eles fornecem os arquivos em CSV com o cadastro das Doenças catalogadas em Capítulos, Grupos, Categorias e Subcategorias, veja abaixo um pequeno trecho de um dos arquivos:</p>
<pre class="brush: jscript; title: ; notranslate">
NUMCAP;CATINIC;CATFIM;DESCRICAO;DESCRABREV;
1;A00;B99;Capítulo I - Algumas doenças infecciosas e parasitárias;I.  Algumas doenças infecciosas e parasitárias;
2;C00;D48;Capítulo II - Neoplasias [tumores];II.  Neoplasias (tumores);
3;D50;D89;Capítulo III  - Doenças do sangue e dos órgãos hematopoéticos e alguns transtornos imunitários;III. Doenças sangue órgãos hemat e transt imunitár;
4;E00;E90;Capítulo IV - Doenças endócrinas, nutricionais e metabólicas;IV.  Doenças endócrinas nutricionais e metabólicas;
</pre>
<p>Reparem como funciona a estrutura dos arquivos CSV, na primeira linha temos o nome dos campos (colunas) e as demais linhas são os dados, para estes arquivos foi utilizado o &#8220;;&#8221; como separador.<br />
Todos os demais arquivos seguem esta mesma estrutura, sabendo disto temos como fazer um parse neste arquivos e depois manipula-los em memória.</p>
<h1 style="font-size:25px">Lendo o arquivos CSV em C#</h1>
<p>Você pode armazenar estes arquivos para a leitura em uma pasta, ou dentro do próprio projeto usando o resources, neste caso utilizei os resources.<br />
Antes de continuar precisamos instalar um pacote do nuget chamado <a href="http://nuget.org/packages/CsvHelper/" title="CsvHelper">CsvHelper</a>.</p>
<pre class="brush: csharp; title: ; notranslate">
PM&gt; Install-Package CsvHelper
</pre>
<p>Uma vez instalado foi criado uma classe genérica para a leitura destes arquivos</p>
<pre class="brush: csharp; title: ; notranslate">
using System.Collections.Generic;
using System.IO;
using CsvHelper;
using CsvHelper.Configuration;

namespace Repositorio
{
    public class LerCsv&lt;T&gt; where T : class
    {
        public IEnumerable&lt;T&gt; Ler(string csv)
        {
            if (csv == null) return null;
            var configuracaoCsv = new CsvConfiguration { Delimiter = &quot;;&quot; };
            var csvReader = new CsvReader(new StringReader(csv), configuracaoCsv);
            return csvReader.GetRecords&lt;T&gt;();
        }
    }
}
</pre>
<p>Dentro desta classe foi criado um método Ler que recebe como parâmetro o conteúdo do arquivo CSV e retorna uma Lista de objetos que representam as linhas deste arquivo.<br />
Uma vez criado o método genérico que fara a leitura do conteúdo do arquivo CSV qualquer objeto que for passado para este método será utilizado como estrutura que representa o arquivo CSV, para exemplificar reparem o código da classe que representa o arquivo de capítulos.csv, chamada ViewModelCapitulo.cs</p>
<pre class="brush: csharp; title: ; notranslate">
public class ViewModelCapitulo
    {
        //NUMCAP: número do capítulo (em numeração arábica); se igual a zero, indica o capítulo que contém os códigos não oficialmente pertinentes à CID-10;
        [CsvField(Name = &quot;NUMCAP&quot;)]
        public string NumeroCapitulo { get; set; }

        //CATINIC: código da primeira categoria do capítulo;
        [CsvField(Name = &quot;CATINIC&quot;)]
        public string CategoriaInicial { get; set; }

        [CsvField(Ignore = true)]
        public int CategoriaInicialCodigo
        {
            get { return Ferramentas.TrocaLetraPorNumero(CategoriaInicial); }
        }

        //CATFIM: código da última categoria do capítulo;
        [CsvField(Name = &quot;CATFIM&quot;)]
        public string CategoriaFinal { get; set; }

        [CsvField(Ignore = true)]
        public int CategoriaFinalCodigo
        {
            get { return Ferramentas.TrocaLetraPorNumero(CategoriaFinal); }
        }

        //DESCRICAO: descrição (nome) do capítulo; e
        [CsvField(Name = &quot;DESCRICAO&quot;)]
        public string Descricao { get; set; }

        //DESCRABREV: descrição (nome) abreviado do capítulo, com até 50 caracteres.
        [CsvField(Name = &quot;DESCRABREV&quot;)]
        public string DescricaoAbreviada { get; set; }
    }
</pre>
<p>Reparem que a mesma estrutura (colunas) do arquivo csv foi representada na classe usando data annotations que vem com o CsvHelper (CsvField), no exemplo a propriedade da classe &#8220;NumeroCapitulo&#8221; representa a coluna &#8220;NUNCAP&#8221; do arquivo CSV, o que significa que o valor da coluna NUNCAP será carregada para a propriedade NumeroCapitulo.<br />
As demais propriedades seguem o mesmo modelo, exceto é claro a propriedade &#8220;CategoriaInicialCodigo&#8221; que não representa nenhuma coluna do arquivo CSV de capítulos, uma vez que foi utilizado o data annotation &#8220;[CsvField(Ignore = true)]&#8220;.</p>
<h2 style="font-size:20px">Listando os dados de um arquivo CSV em C#</h2>
<p>Uma vez criado as classes que serão utilizadas como base para os nossos arquivos CSV, precisamos utiliza-las através do nosso método &#8220;Ler&#8221; da classe &#8220;LerCsv.cs&#8221; como mostra o código da classe abaixo.</p>
<pre class="brush: csharp; title: ; notranslate">
using System.Collections.Generic;

namespace Repositorio
{
    public class Repositorio
    {
        public IEnumerable&lt;ViewModelCapitulo&gt; ListarCapitulos()
        {
            var recurso = Properties.Resources.CID_10_CAPITULOS;
            return new LerCsv&lt;ViewModelCapitulo&gt;().Ler(recurso);
        }

        public IEnumerable&lt;ViewModelGrupo&gt; ListarGrupos()
        {
            var recurso = Properties.Resources.CID_10_GRUPOS;
            return new LerCsv&lt;ViewModelGrupo&gt;().Ler(recurso);
        }

        public IEnumerable&lt;ViewModelCategoria&gt; ListarCategorias()
        {
            var recurso = Properties.Resources.CID_10_CATEGORIAS;
            return new LerCsv&lt;ViewModelCategoria&gt;().Ler(recurso);
        }

        public IEnumerable&lt;ViewModelSubCategoria&gt; ListarSubCategorias()
        {
            var recurso = Properties.Resources.CID_10_SUBCATEGORIAS;
            return new LerCsv&lt;ViewModelSubCategoria&gt;().Ler(recurso);
        }

        public IEnumerable&lt;ViewModelGrupoCid0&gt; ListarGruposCid0()
        {
            var recurso = Properties.Resources.CID_O_GRUPOS;
            return new LerCsv&lt;ViewModelGrupoCid0&gt;().Ler(recurso);
        }

        public IEnumerable&lt;ViewModelCategoriaCid0&gt; ListarCateogiasCid0()
        {
            var recurso = Properties.Resources.CID_O_CATEGORIAS;
            return new LerCsv&lt;ViewModelCategoriaCid0&gt;().Ler(recurso);
        }
    }
}
</pre>
<p>Reparem o método &#8220;ListarCapitulos&#8221; ele nos retorna uma lista (IEnumerable) de objetos da classe ViewModelCapitulo.cs, para isso foi utilizado um arquivo CSV no resources chamado &#8220;CID_10_CAPITULOS&#8221;, e o valor deste arquivo (uma string) foi passada para a nossa classe genérica &#8220;LerCsv<ViewModelCapitulo>&#8221; através do método &#8220;Ler(recurso)&#8221; o mesmo se segue para os demais arquivos CSV e métodos.</p>
<h2 style="font-size:20px">Mostrando os dados do arquivo CSV no ASP .Net MVC</h2>
<p>Agora que temos nossa estrutura toda montada, baste chamar os métodos de nossa classe repositório dentro das actions de nossos controller em ASP .Net MVC, como mostra o código do controller Home;</p>
<pre class="brush: csharp; title: ; notranslate">
using System.Linq;
using System.Web.Mvc;
using Repositorio;

namespace UI.Web.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            var repositorio = new Repositorio.Repositorio();
            var capitulos = repositorio.ListarCapitulos().ToList();
            return View(capitulos);
        }

        public ActionResult Capitulo(string id)
        {
            var repositorio = new Repositorio.Repositorio();
            var capitulo = repositorio.ListarCapitulos().FirstOrDefault(x =&gt; x.NumeroCapitulo == id);
            ViewBag.capitulo = capitulo;
            var grupos = repositorio.ListarGrupos().Where(x =&gt;
                x.CategoriaInicialCodigo &gt;= capitulo.CategoriaInicialCodigo &amp;&amp;
                x.CategoriaFinalCodigo &lt;= capitulo.CategoriaFinalCodigo
                ).ToList();
            return View(grupos);
        }

        public ActionResult Grupo(string categoriaInicial, string categoriaFinal)
        {
            var repositorio = new Repositorio.Repositorio();
            var grupo = repositorio.ListarGrupos().FirstOrDefault(x =&gt; x.CategoriaInicial == categoriaInicial &amp;&amp; x.CategoriaFinal == categoriaFinal);
            ViewBag.grupo = grupo;
            var capitulo = repositorio.ListarCapitulos().FirstOrDefault(x =&gt;
                    grupo.CategoriaInicialCodigo &gt;= x.CategoriaInicialCodigo &amp;&amp;
                    grupo.CategoriaFinalCodigo &lt;= x.CategoriaFinalCodigo
                    );

            ViewBag.capitulo = capitulo;

            var categorias = repositorio.ListarCategorias().Where(x =&gt;
                x.CodigoDaCategoriaCodigo &gt;= grupo.CategoriaInicialCodigo &amp;&amp;
                x.CodigoDaCategoriaCodigo &lt;= grupo.CategoriaFinalCodigo
                ).ToList();

            return View(categorias);
        }

        public ActionResult Categoria(string codigoDaCategoria)
        {
            var repositorio = new Repositorio.Repositorio();

            var categoria = repositorio.ListarCategorias().FirstOrDefault(x =&gt; x.CodigoDaCategoria == codigoDaCategoria);

            var subCategorias = repositorio.ListarSubCategorias().Where(x =&gt;
               x.CodigoDaCategoria == codigoDaCategoria).ToList();

            categoria.ListaDeSubCategorias = subCategorias;

            var grupo = repositorio.ListarGrupos().FirstOrDefault(x =&gt; categoria.CodigoDaCategoriaCodigo &gt;= x.CategoriaInicialCodigo &amp;&amp; categoria.CodigoDaCategoriaCodigo &lt;= x.CategoriaFinalCodigo);
            ViewBag.grupo = grupo;

            var capitulo = repositorio.ListarCapitulos().FirstOrDefault(x =&gt;
                    grupo.CategoriaInicialCodigo &gt;= x.CategoriaInicialCodigo &amp;&amp;
                    grupo.CategoriaFinalCodigo &lt;= x.CategoriaFinalCodigo
                    );

            ViewBag.capitulo = capitulo;

            return View(categoria);
        }

        public ActionResult Detalhe(string codigo)
        {
            var repositorio = new Repositorio.Repositorio();
            var subcategoria = repositorio.ListarSubCategorias().FirstOrDefault(x =&gt; x.CodigoDaSubCategoria == codigo);
            
            return View(subcategoria);
        }

        public ActionResult Busca (string busca)
        {

            busca = Ferramentas.SubstituiAcentos(busca);
            var repositorio = new Repositorio.Repositorio();
            var subCategorias = repositorio.ListarSubCategorias().Where(x =&gt; x.DescricaoSemAcentos.ToLower().Contains(busca.ToLower())).ToList();
            ViewBag.busca = busca;
            return View(subCategorias);
        }
    }
}
</pre>
<p>Reparem a action Index e veja como foi simples listar todos os dados do capítulos de doenças utilizando a estrutura montada, bastou chamar o método &#8220;ListarCapitulos&#8221; da classe repositório e passar os valores para a View &#8220;Index.cshtml&#8221;, veja seu código.</p>
<pre class="brush: xml; title: ; notranslate">
@model List&lt;Repositorio.ViewModelCapitulo&gt;
@{
    ViewBag.Title = &quot;W7SAUDE&quot;;
}
&lt;h2&gt;Busca CID&lt;/h2&gt;
&lt;div class=&quot;span12&quot; style=&quot;margin-left: 0&quot;&gt;
    @Html.Partial(&quot;_formBusca&quot;)
    &lt;div class=&quot;span9&quot;&gt;
        @foreach (var capitulo in Model)
        {
            &lt;div class=&quot;span6&quot; style=&quot;margin-left: 0; height: 110px; padding: 5px;&quot;&gt;
                @{
            var titulo = capitulo.Descricao.Split('-');
            titulo[0] = titulo[0].Trim();
            titulo[1] = titulo[1].Trim();
                }
                &lt;h2&gt;&lt;a href=&quot;~/Home/Capitulo/@capitulo.NumeroCapitulo&quot;&gt;@titulo[0]&lt;/a&gt;&lt;/h2&gt;
                &lt;p&gt;@titulo[1]&lt;/p&gt;
            &lt;/div&gt;
        }
    &lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Veja como manipular arquivos CSV se torna fácil utilizando o CsvHelper e uma classe genérica para fazer o trabalho de mapeamento para objetos. </p>
<p>Aproveite e veja o exemplo deste código rodando em <a href="http://cid.apphb.com/" title="Exemplo de uso do CSV">http://cid.apphb.com/</a>, ou baixe este código completo no <a href="https://github.com/cleytonferrari" title="Git Hub Cleyton Ferrari">meu GitHub</a> no repositório <a href="https://github.com/cleytonferrari/CidDataSus" title="Repositório CidDataSus">CidDataSus</a>.<br />
Até breve pessoal!</p>
<p>O post <a href="http://cleytonferrari.com/arquivos-csv-com-c-no-asp-net-mvc-4/">Arquivos CSV com C# no ASP .Net MVC 4</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://cleytonferrari.com/arquivos-csv-com-c-no-asp-net-mvc-4/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Validação de Data e Moeda (ASP.Net MVC + JQuery Validation) em Português</title>
		<link>http://cleytonferrari.com/validacao-de-data-e-moeda-asp-net-mvc-jquery-validation-em-portugues/</link>
		<comments>http://cleytonferrari.com/validacao-de-data-e-moeda-asp-net-mvc-jquery-validation-em-portugues/#comments</comments>
		<pubDate>Thu, 31 Jan 2013 15:27:42 +0000</pubDate>
		<dc:creator>Cleyton Ferrari</dc:creator>
				<category><![CDATA[Sem categoria]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[MVC]]></category>

		<guid isPermaLink="false">http://cleytonferrari.com/?p=479</guid>
		<description><![CDATA[<p>Sempre vejo na internet um monte de solução para a validação de data e moeda em Português (PT-Br) uma mais complicada que a outra. Já se perguntou: isso deveria ser simples? e é super simples, veja como agora. Validando data e moeda em ASP.Net MVC Para exemplificar eu criei um projeto &#8220;ASP.Net MVC 4 Web [...]</p><p>O post <a href="http://cleytonferrari.com/validacao-de-data-e-moeda-asp-net-mvc-jquery-validation-em-portugues/">Validação de Data e Moeda (ASP.Net MVC + JQuery Validation) em Português</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Sempre vejo na internet um monte de solução para a validação de data e moeda em Português (PT-Br) uma mais complicada que a outra. Já se perguntou: isso deveria ser simples? e é super simples, veja como agora.<br />
<span id="more-479"></span></p>
<h1 style="font-size:25px">Validando data e moeda em ASP.Net MVC</h1>
<p>Para exemplificar eu criei um projeto &#8220;ASP.Net MVC 4 Web Application&#8221; e usei o template &#8220;Basic&#8221;, uma vez criado o projeto foi feito os seguintes passos:</p>
<h2 style="font-size:20px">1. Globalizando o ASP.Net MVC para PT-Br</h2>
<p>É pouco divulgado, mais existe uma <a href="http://nuget.org/packages/Microsoft.AspNet.Mvc.pt-br" title="Recursos Português-BR do Microsoft ASP.NET MVC 4 ">versão do MVC (Microsoft.AspNet.Mvc) em Português</a>, feita pelo pessoal do time do ASP .Net MVC da Microsoft e esta versão traduz para você as mensagens de erro para o português.<br />
Sua instalação é bem simplificada feita usando o pacato de nuget &#8220;Microsoft.AspNet.Mvc.pt-br&#8221;, para instalar digite o seguinte comando no Package Manager Console (Tools/Library Package Manager/Package Manager Console):</p>
<pre class="brush: csharp; title: ; notranslate">
PM&gt; Install-Package Microsoft.AspNet.Mvc.pt-br
</pre>
<p>Isto irá instalar o MVC em Português, e atualizar as suas dependências.</p>
<h2 style="font-size:20px">2. Globalizando jQuery Validation para PT-Br</h2>
<p>O <a href="http://docs.jquery.com/Plugins/Validation" title="Plugins/Validation">jQuery Valitation</a> é o responsável pela validação do lado do cliente, para globalizar ele para PT-Br precisamos criar um novo arquivo na pasta &#8220;Scripts&#8221; chamado &#8220;methods_pt.js&#8221; com o seguinte conteúdo:</p>
<pre class="brush: jscript; title: ; notranslate">
/*
 * Localized default methods for the jQuery validation plugin.
 * Locale: PT_BR
 */
jQuery.extend(jQuery.validator.methods, {
    date: function (value, element) {
        return this.optional(element) || /^\d\d?\/\d\d?\/\d\d\d?\d?$/.test(value);
    },
    number: function (value, element) {
        return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value);
    }
});
</pre>
<p>Com isso o jQuery Validation passa a validar data no formato &#8220;dd/mm/yyyy&#8221; e moeda agora usa o separador &#8220;,&#8221; para as casas decimais e não mais o &#8220;.&#8221; como é o padrão americano.</p>
<h2 style="font-size:20px">3. Atualizando o Bundle do jQueryval</h2>
<p>Agora podemos atualizar o Bundle do JQuery Validation &#8220;jQueryval&#8221;, para isso precisamos abrir o arquivo &#8220;BundleConfig.cs&#8221; que esta na pasta do seu projeto &#8220;App_Start&#8221; e alterar o bundle &#8220;jqueryval&#8221; e adicionar o arquivo &#8220;methods_pt.js&#8221; criado anteriormente.</p>
<pre class="brush: csharp; title: ; notranslate">
bundles.Add(new ScriptBundle(&quot;~/bundles/jqueryval&quot;).Include(
                        &quot;~/Scripts/jquery.unobtrusive*&quot;,
                        &quot;~/Scripts/jquery.validate*&quot;,
                        &quot;~/Scripts/methods_pt.js&quot;));
</pre>
<p>Pronto agora é só usar!</p>
<h2 style="font-size:20px">4. Testando a validação em Português</h2>
<p>Para efeito de teste eu crie um model chamado &#8220;Produto.cs&#8221; com o seguinte código:</p>
<pre class="brush: csharp; title: ; notranslate">
public class Produto
{
    public string Nome { get; set; }
    public DateTime Validade { get; set; }
    public decimal Valor { get; set; }
}
</pre>
<p>Agora foi só criar um controle &#8220;Home&#8221; com uma action &#8220;Index&#8221; e gerar um scafolld para &#8220;Create&#8221;, veja o código do controle e da view abaixo:</p>
<p>HomeController.cs</p>
<pre class="brush: csharp; title: ; notranslate">
using System.Web.Mvc;
using ValidandoDataeMoeda.Models;

namespace ValidandoDataeMoeda.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Index(Produto produto)
        {
            return View(produto);
        }
    }
}
</pre>
<p>e o código da View, Index.cshtml</p>
<pre class="brush: xml; title: ; notranslate">
@model ValidandoDataeMoeda.Models.Produto

@{
    ViewBag.Title = &quot;Index&quot;;
}

&lt;h2&gt;Validando Data e Moeda em ASP.Net MVC 4&lt;/h2&gt;

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)

    &lt;fieldset&gt;
        &lt;legend&gt;Produto&lt;/legend&gt;

        &lt;div class=&quot;editor-label&quot;&gt;
            @Html.LabelFor(model =&gt; model.Nome)
        &lt;/div&gt;
        &lt;div class=&quot;editor-field&quot;&gt;
            @Html.EditorFor(model =&gt; model.Nome)
            @Html.ValidationMessageFor(model =&gt; model.Nome)
        &lt;/div&gt;

        &lt;div class=&quot;editor-label&quot;&gt;
            @Html.LabelFor(model =&gt; model.Validade)
        &lt;/div&gt;
        &lt;div class=&quot;editor-field&quot;&gt;
            @Html.EditorFor(model =&gt; model.Validade)
            @Html.ValidationMessageFor(model =&gt; model.Validade)
        &lt;/div&gt;

        &lt;div class=&quot;editor-label&quot;&gt;
            @Html.LabelFor(model =&gt; model.Valor)
        &lt;/div&gt;
        &lt;div class=&quot;editor-field&quot;&gt;
            @Html.EditorFor(model =&gt; model.Valor)
            @Html.ValidationMessageFor(model =&gt; model.Valor)
        &lt;/div&gt;

        &lt;p&gt;
            &lt;input type=&quot;submit&quot; value=&quot;Create&quot; /&gt;
        &lt;/p&gt;
    &lt;/fieldset&gt;
}

@section Scripts {
    @Scripts.Render(&quot;~/bundles/jqueryval&quot;)
}
</pre>
<p>Como de costume você pode <a href="https://github.com/cleytonferrari/DataMoedaEmMVC4" title="">baixar o código</a> no meu <a href="https://github.com/cleytonferrari" title="">GitHub</a>.</p>
<p>Bom pessoal era isso! e ajudem a divulgar se possível!</p>
<p>O post <a href="http://cleytonferrari.com/validacao-de-data-e-moeda-asp-net-mvc-jquery-validation-em-portugues/">Validação de Data e Moeda (ASP.Net MVC + JQuery Validation) em Português</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://cleytonferrari.com/validacao-de-data-e-moeda-asp-net-mvc-jquery-validation-em-portugues/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Vídeo-Aula ASP.Net MVC na prática – Parte 6</title>
		<link>http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-6/</link>
		<comments>http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-6/#comments</comments>
		<pubDate>Sat, 12 Jan 2013 19:50:04 +0000</pubDate>
		<dc:creator>Cleyton Ferrari</dc:creator>
				<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Vídeo-Aula]]></category>

		<guid isPermaLink="false">http://cleytonferrari.com/?p=448</guid>
		<description><![CDATA[<p>Este post é a parte 6 de 7 partes da série ASP.Net MVCEsta é a sexta parte da série ASP .Net MVC na prática, que ira abordar os conceitos e práticas que norteiam o desenvolvimento de aplicativos baseado no padrão MVC utilizando o ASP .Net Lembre-se: você pode baixar o código desta vídeo-aula no meu [...]</p><p>O post <a href="http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-6/">Vídeo-Aula ASP.Net MVC na prática &#8211; Parte 6</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">Este post é a parte 6 de 7 partes da série <a href="http://cleytonferrari.com/series/asp-net-mvc/" class="series-38" title="ASP.Net MVC">ASP.Net MVC</a></div><p>Esta é a sexta parte da série ASP .Net MVC na prática, que ira abordar os conceitos e práticas que norteiam o desenvolvimento de aplicativos baseado no padrão MVC utilizando o ASP .Net<span id="more-448"></span></p>
<p><strong>Lembre-se:</strong> você pode baixar o código desta vídeo-aula no meu repositório do GitHub, <a href="https://github.com/cleytonferrari/ASPNETmvcNaPratica">https://github.com/cleytonferrari/ASPNETmvcNaPratica</a></p>
<p>Nesta sexta vídeo-aula sobre <a href="http://cleytonferrari.com/series/asp-net-mvc/">ASP .Net MVC</a> é abordado:</p>
<ul>
<li>Layout</li>
<li>Render Page</li>
<li>Render Section</li>
<li>Partial View</li>
<li>Twitter Bootstrap</li>
</ul>
<p>Durante o decorrer desta vídeo-aula sobre <a title="Vídeo-Aula ASP .Net MVC na prática – Parte 1" href="http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-1/">ASP .NET MVC</a> você verá como criar Layouts para o seu site usando RenderPage(), RenderSection() e Html.Partial, também verá como instalar e configurar o Twitter Bootstrap no seu site e criar o seu primeiro Layout usando todos esses recursos juntos.</p>
<p>Veja como é simples separar e organizar seus arquivos HTML e reutilizar o seu código usando os recursos/helpers do ASP .Net MVC em seus Layouts web.</p>
<p>Ao final desta vídeo-aula você será capaz de criar Layouts para sites utilizando os recursos do ASP .NET MVC 4 e saberá como começar a usar o Twitter Bootstrap. Será capaz de instalar via Nuget os pacotes necessários do Twitter Bootstrap.</p>
<p><iframe src="http://www.youtube.com/embed/8-5a9c0690I?rel=0" height="315" width="560" frameborder="0"></iframe></p>
<p><strong>Para saber mais:</strong></p>
<ul>
<li><a title="" href="http://cleytonferrari.com/category/asp-net/">ASP .NET</a></li>
</ul>
<p>Lembre-se você pode participar da nossa comunidade no Facebook acessando <a title="" href="https://www.facebook.com/groups/tiselvagem/">https://www.facebook.com/groups/tiselvagem/</a></p>
<p>O post <a href="http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-6/">Vídeo-Aula ASP.Net MVC na prática &#8211; Parte 6</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-6/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	
		<series:name><![CDATA[ASP.Net MVC]]></series:name>
	</item>
		<item>
		<title>Rotativa W7 gerando relatórios em PDF no ASP.Net MVC</title>
		<link>http://cleytonferrari.com/gerando-relatorios-em-pdf-com-rotativa-w7/</link>
		<comments>http://cleytonferrari.com/gerando-relatorios-em-pdf-com-rotativa-w7/#comments</comments>
		<pubDate>Wed, 26 Dec 2012 21:53:32 +0000</pubDate>
		<dc:creator>Cleyton Ferrari</dc:creator>
				<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[Rotativa W7]]></category>

		<guid isPermaLink="false">http://cleytonferrari.com/?p=428</guid>
		<description><![CDATA[<p>Neste post iremos descobrir como gerar relatórios em PDF no ASP.Net MVC 4 de forma rápida e simples utilizando o Rotativa W7. Rotativa é um biblioteca baseada no wkhtmltopdf que converte HTML para PDF usando o motor WebKit (usado pelo Chrome e Safari), como o próprio autor do Rotativa diz, o legal disso é que [...]</p><p>O post <a href="http://cleytonferrari.com/gerando-relatorios-em-pdf-com-rotativa-w7/">Rotativa W7 gerando relatórios em PDF no ASP.Net MVC</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Neste post iremos descobrir como gerar relatórios em PDF no ASP.Net MVC 4 de forma rápida e simples utilizando o Rotativa W7.<br />
<span id="more-428"></span><br />
Rotativa é um biblioteca baseada no <a href="http://code.google.com/p/wkhtmltopdf/" title="wkhtmltopdf">wkhtmltopdf</a> que converte HTML para PDF usando o motor WebKit (usado pelo Chrome e Safari), como o próprio <a href="http://letsfollowtheyellowbrickroad.blogspot.com.br/2012/02/rotativa-how-to-print-pdf-in-aspnet-mvc.html">autor do Rotativa</a> diz, o legal disso é que posso usar o meu conhecimento de HTML/CSS para gerar meus PDFs.</p>
<p>A <a href="https://github.com/webgio/Rotativa" title="Rotativa">versão original do Rotativa</a> não suporta acentuação, dai surgiu o Rotativa W7, &#8220;forkado&#8221; da versão original do Rotativa o nosso amigo <a href="https://github.com/emersonsoares/Rotativa" title="Rotativa W7">Emerson Soares fez esta correção</a> e submeteu para o Nuget com o nome de <a href="http://nuget.org/packages/RotativaW7" title="Rotativa W7">RotativaW7</a>.</p>
<p>Só lembrando que o código mostrado aqui se encontra no meu GitHub em <a href="https://github.com/cleytonferrari/RelatorioPDF-RotativaW7">https://github.com/cleytonferrari/RelatorioPDF-RotativaW7</a>, você também pode testar este exemplo em <a href="http://rotativaw7.apphb.com/" title="Exemplo de uso do Rotativa W7">http://rotativaw7.apphb.com/</a></p>
<h1>Como usar Rotativa W7</h1>
<p>O uso do RotativaW7 é bem simples, para demonstrar criei um projeto em <a href="http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-1/" title="Vídeo-Aula ASP.Net MVC na prática – Parte 1">ASP.Net MVC 4</a>, e em seguida adicionei o pacote do <a href="http://nuget.org/packages/RotativaW7" title="Pacote do Nuget Rotativa W7">nuget do Rotativa W7</a></p>
<pre class="brush: csharp; title: ; notranslate">
PM&gt; Install-Package RotativaW7
</pre>
<p>Adicione um controller Home e outro Relatório, para o segundo crie um view chamada Modelo.cshtml;</p>
<pre class="brush: xml; title: ; notranslate">
@model RelatorioPDF.Models.Usuario
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;pt-br&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot; /&gt;
    &lt;title&gt;Exemplo de Relatório em PDF&lt;/title&gt;

    &lt;!-- css --&gt;
    &lt;link href=&quot;~/Content/estilos-relatorio.css&quot; rel=&quot;stylesheet&quot; /&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;div id=&quot;container&quot;&gt;
        &lt;div id=&quot;cabecalho&quot;&gt;
            &lt;div id=&quot;nome&quot;&gt;
                &lt;h1&gt;RECIBO DE DISPENSAÇÃO&lt;/h1&gt;
            &lt;/div&gt;
            &lt;div id=&quot;unidade&quot;&gt;
                &lt;h2&gt;Meu Sistema&lt;/h2&gt;
                &lt;h3&gt;Hospital São Paulo&lt;/h3&gt;
                &lt;h4&gt;Farmácia&lt;/h4&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        &lt;div id=&quot;corpo&quot;&gt;
            &lt;div class=&quot;linha&quot;&gt;
                &lt;p&gt;
                    Dispensado:&lt;br /&gt;
                    &lt;span&gt;10/10/2012&lt;/span&gt;
                &lt;/p&gt;
                &lt;p&gt;
                    Cartão do SUS:&lt;br /&gt;
                    &lt;span&gt;123.1232.123.123&lt;/span&gt;
                &lt;/p&gt;
                &lt;p&gt;
                    Usuario:&lt;br /&gt;
                    &lt;span class=&quot;bold&quot;&gt;João da Silva Gonçalves&lt;/span&gt;
                &lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;linha&quot;&gt;
                &lt;p&gt;
                    Prescritor:&lt;br /&gt;
                    &lt;span&gt;Jonas São João&lt;/span&gt;
                &lt;/p&gt;
                &lt;p&gt;
                    Nº Registro:&lt;br /&gt;
                    &lt;span&gt;12323132&lt;/span&gt;
                &lt;/p&gt;
                &lt;p&gt;
                    Origem da Receita:&lt;br /&gt;
                    &lt;span&gt;10/10/012&lt;/span&gt;
                &lt;/p&gt;
            &lt;/div&gt;
            &lt;div class=&quot;linha&quot;&gt;
                &lt;p&gt;Produtos Dispensados:&lt;/p&gt;
                &lt;table&gt;
                    &lt;thead&gt;
                        &lt;tr&gt;
                            &lt;th&gt;Produto&lt;/th&gt;
                            &lt;th&gt;Atendido?&lt;/th&gt;
                            &lt;th&gt;Und&lt;/th&gt;
                            &lt;th class=&quot;aling-right&quot;&gt;Dispensado&lt;/th&gt;
                            &lt;th class=&quot;aling-right&quot;&gt;Unitário R$&lt;/th&gt;
                            &lt;th class=&quot;aling-right&quot;&gt;Total R$&lt;/th&gt;
                        &lt;/tr&gt;
                    &lt;/thead&gt;

                    &lt;tbody&gt;

                        &lt;tr class=&quot;odd&quot;&gt;
                            &lt;td class=&quot;bold&quot; width=&quot;45%&quot;&gt;Anador&lt;/td&gt;
                            &lt;td&gt;Sim&lt;/td&gt;
                            &lt;td class=&quot;fonte10&quot;&gt;FRS&lt;/td&gt;
                            &lt;td class=&quot;aling-right&quot;&gt;10&lt;/td&gt;
                            &lt;td class=&quot;aling-right&quot; width=&quot;100px;&quot;&gt;1,2345&lt;/td&gt;
                            &lt;td class=&quot;aling-right&quot; style=&quot;min-width: 100px&quot;&gt;12,23&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr class=&quot;odd&quot;&gt;
                            &lt;td colspan=&quot;6&quot; class=&quot;italico&quot;&gt;Possologia: 1 dose, 3 vez por dia, durante 5 dias&lt;/td&gt;
                        &lt;/tr&gt;

                        &lt;tr class=&quot;&quot;&gt;
                            &lt;td class=&quot;bold&quot; width=&quot;45%&quot;&gt;Dipirona&lt;/td&gt;
                            &lt;td&gt;Sim&lt;/td&gt;
                            &lt;td class=&quot;fonte10&quot;&gt;FRS&lt;/td&gt;
                            &lt;td class=&quot;aling-right&quot;&gt;10&lt;/td&gt;
                            &lt;td class=&quot;aling-right&quot; width=&quot;100px;&quot;&gt;1,2345&lt;/td&gt;
                            &lt;td class=&quot;aling-right&quot; style=&quot;min-width: 100px&quot;&gt;12,23&lt;/td&gt;
                        &lt;/tr&gt;
                        &lt;tr class=&quot;&quot;&gt;
                            &lt;td colspan=&quot;6&quot; class=&quot;italico&quot;&gt;Possologia: 1 dose, 3 vez por dia, durante 5 dias&lt;/td&gt;
                        &lt;/tr&gt;

                    &lt;/tbody&gt;
                    &lt;tfoot&gt;
                        &lt;tr&gt;
                            &lt;td colspan=&quot;5&quot; class=&quot;bold&quot;&gt;Total&lt;/td&gt;
                            &lt;td class=&quot;aling-right&quot;&gt;R$ 12,23&lt;/td&gt;
                        &lt;/tr&gt;
                    &lt;/tfoot&gt;
                &lt;/table&gt;
            &lt;/div&gt;
            &lt;div class=&quot;linha&quot;&gt;
                &lt;p&gt;
                    Observação:&lt;br /&gt;
                    &lt;span&gt;Paciente com fortes dores de cabeça&lt;/span&gt;
                &lt;/p&gt;
            &lt;/div&gt;
        &lt;/div&gt;
        &lt;div id=&quot;rodape&quot;&gt;
            &lt;p&gt;Usuário: &lt;span&gt;Cleyton Ferrari&lt;/span&gt; Emitido: &lt;span&gt;26/10/2012&lt;/span&gt; CleytonFerrari.com&lt;/p&gt;
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Crie um HTML e CSS bem simples mas que demonstra todo o poder do motor de renderização do Rotativa;</p>
<p>Agora vem a parte mais fácil, basta criar as actions dentro dos controllers da mesma forma como você já vem criando para mostrar suas views, só que ao invés de retornar uma <strong>View()</strong> você retorna <strong>ViewAsPdf()</strong>;</p>
<pre class="brush: csharp; title: ; notranslate">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using RelatorioPDF.Models;
using Rotativa;
using Rotativa.Options;

namespace RelatorioPDF.Controllers
{
    public class RelatoriosController : Controller
    {
        /*
         * Retorna a view simples em HTML, usada como modelo para gerar o PDF
         */
        public ActionResult ModeloHTML()
        {
            return View(&quot;Modelo&quot;);
        }

        /*
         * Retorna um PDF diretamente no browser com as configurações padrões
         * ViewName é setado somente para utilizar o próprio Modelo anterior
         * Caso não queira setar o ViewName, você deve gerar a view com o mesmo nome da action
         */
        public ActionResult PDFPadrao()
        {
            var pdf = new ViewAsPdf
                          {
                              ViewName = &quot;Modelo&quot;
                          };
            return pdf;
        }

        /*
         * Configura algumas propriedades do PDF, inclusive o nome do arquivo gerado,
         * Porem agora ele baixa o pdf ao invés de mostrar no browser
         */
        public ActionResult PDFConfigurado()
        {
            var pdf = new ViewAsPdf
            {
                ViewName = &quot;Modelo&quot;,
                FileName = &quot;NomeDoArquivoPDF.pdf&quot;,
                PageSize = Size.A4,
                IsGrayScale = true,
                PageMargins = new Margins{Bottom = 5, Left = 5, Right = 5, Top = 5},
            };
            return pdf;
        }

        /*
         * Pode passar um modelo para a view que vai ser utilizada para gerar o PDF
         */
        public ActionResult PDFComModel()
        {
            var modelo = new Usuario
                             {
                                 Nome = &quot;Cleyton Ferrari&quot;, 
                                 Site = &quot;http://cleytonferrari.com&quot;
                             };

            var pdf = new ViewAsPdf
            {
                ViewName = &quot;Modelo&quot;,
                Model = modelo
            };

            return pdf;
        }
        
    }
}
</pre>
<p>A criação de relatórios em PDF principalmente em aplicativos de negócios é uma necessidade, principalmente para impressão e com o Rotativa fica bem mais simples seu uso uma vez que você pode utilizar seus conhecimento em HTML/CSS para gerar os layout e passar modelos (viewModel) para as suas views e gerar relatórios bem complexos em PDF com uma simples troca no retorno da action.</p>
<p>Fica a dica e até a próxima.</p>
<p><strong>Para saber mais veja:</strong><br />
<a href="http://letsfollowtheyellowbrickroad.blogspot.com.br/2012/02/rotativa-how-to-print-pdf-in-aspnet-mvc.html">Rotativa, how to print PDF in ASP.Net MVC</a></p>
<p>O post <a href="http://cleytonferrari.com/gerando-relatorios-em-pdf-com-rotativa-w7/">Rotativa W7 gerando relatórios em PDF no ASP.Net MVC</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://cleytonferrari.com/gerando-relatorios-em-pdf-com-rotativa-w7/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Como foi o Community Zone 2012</title>
		<link>http://cleytonferrari.com/community-zone-2012/</link>
		<comments>http://cleytonferrari.com/community-zone-2012/#comments</comments>
		<pubDate>Wed, 19 Sep 2012 20:30:24 +0000</pubDate>
		<dc:creator>Cleyton Ferrari</dc:creator>
				<category><![CDATA[Eventos]]></category>

		<guid isPermaLink="false">http://cleytonferrari.com/?p=407</guid>
		<description><![CDATA[<p>Olá pessoal, hoje vou falar um pouco sobre o Community Zone 2012, um evento feito pela Microsoft para reunir algumas pessoas que se destacaram na comunidade durante o ultimo ano, tinhamos lá MVPs, MTACs e MSP, alem é claro de alguns clientes. O legal deste ano no Community Zone 2012 é que concidiu com o [...]</p><p>O post <a href="http://cleytonferrari.com/community-zone-2012/">Como foi o Community Zone 2012</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Olá pessoal, hoje vou falar um pouco sobre o Community Zone 2012, um evento feito pela Microsoft para reunir algumas pessoas que se destacaram na comunidade durante o ultimo ano, tinhamos lá MVPs, MTACs e MSP, alem é claro de alguns clientes.<span id="more-407"></span><br />
<br />
O legal deste ano no Community Zone 2012 é que concidiu com o lançamento do <a href="http://www.microsoft.com/en-us/server-cloud/windows-server/">Windows Server 2012</a> no Brasil.<br />
<br />
O evento foi em Bragança Paulista no <a href="http://www.hotelvillasantoagostinho.com.br/">hotel fazenda Santo Agostinho</a> entre os dias 14 a 16/09, o hotel possui uma ótima infraestrutura e a alimentação então show de bola, fui muito bem tratado lá, muito bem mesmo.<br />
<br />
O legal de participar deste tipo de evento é que você fica cara a cara com o time de produtos da Microsoft e isso te da a oportunidade de trocar muitas figurinhas e de conhecer muita gente. Neste evento tive a opotunidade de conhecer o MVP Bruno Sonnino, não tenho muito o que falar deste cara, ele foi simplesmente o cara que escreveu o melhor livro que já li de programação, o livro que me ensinou a programar, Delphi 6 Desenvolvendo Aplicações, lá por volta de 2001, Bruno é um sr. muito simpatico e atencioso e pude bater um papo legal com ele, mais não fica só nisto, conheci tambem uns Baianos (tudo bem tinha gente de Fortaleza tambem) mais pra resumir eles eram todos Baianos ahahaha, conheci o Washington (MTAC) um baiano muito avacalhado, mais no fundo é gente boa, aprendi muito com ele, me ajudou a cadastrar a minha empresa em alguns programas Microsoft que eu não conhecia, trocamos muito conhecimento, o segundo Waner outro baiano (mentira o cara é de Fortaleza), cara super gente boa, trocamos muitas ideias e acabei descobrindo o MIC e o S2B, e fui apresentado por ele ao responsável pelo programa S2B o Cristian que pude trocar boas ideias e quem sabe sai um MIC ou um S2B em Rondônia, o Waner tem um defeito de roncar muito, mas fora isto é super gente fina (na verdade super gente gorda), o terceiro João Felipe(MSP de Salvador) um jovem com muitas expectativas e que com certeza serão alcançadas até o próximo Community Zone.<br />
<br />
E pude rever <a title="Elemar Junior" href="http://elemarjr.net/">Elemar Jr</a>, <a title="Andre Dias" href="https://twitter.com/AndreDiasBR">Andre Dias</a>, <a title="Carlos dos Santos" href="http://carloscds.net/">Carlos dos Santos</a>, <a href="https://twitter.com/ClaudenirAndrad">Claudenir Andrade</a>, <a href="https://twitter.com/MairaIantas">Maira Iantas</a> e o legal destes reencontros é que sempre rola um bom papo de dev. é claro, pude trocar uma ideia com o Elemar Jr sobre um evento que estamos organizando na <a href="http://faar.edu.br/">FAAr</a> e ele se dispôs a vir pra Rondônia palestrar pra galera daqui e isso é muito massa!<br />
<br />
Gostei bastante do local escolhido, segundo o pessoal veterano este foi o melhor Community Zone que já teve, legal que o pessoal esteja sempre se superando mesmo! Hahah, as palestras foram ótimas e esclarecedoras, e o engraçado que este foi o primeiro evento que vou que não teve uma linha de código! E isso foi bom? Acredito que sim, afinal passaram muitos conceitos, principalmente na parte de APPs que eu não sabia e que é bem dificil de encontrar por ai material sobre isso, acho que foi uma escolha acertada, já que código se ve e se tem bastante conhecimento por ai, mais a teoria é difícil de ver!<br />
<br />
Não gostei muito da parte que a cerveja acabava as 21hs, isso não gostei mesmo ahaha, também podiam ter feito algumas dinâmicas com o pessoal que estavam ali pele primeira vez, como no meu caso, tipo a ideia do sorteio dos quartos foi super legal, pude conhecer mais pessoas, se tivesse uma especie de sorteios pra fazer dinamicas, as pessoas seriam obrigados a desfazer as panelinhas que sempre acaba acontecendo, fica a dica para os próximos Community Zone.<br />
<br />
Queria agradecer ao <a href="http://www.fabiohara.com.br/">Fabio Hara</a> e a <a href="https://twitter.com/femsaraujo">Fernanda Araújo</a> pelo convite e parabeniza-los pelo excelente evento, e um agradecimento especial a Fernanda que foi muito atenciosa com a gente e claro que fiz muitos pedidos a ela, afinal em Rondônia temos muito pouco a oferecer a comunidade e ela se prontificou em nos ajudar!<br />
<br />
Obrigado pessoal mesmo e espero poder participar dos próximos.</p>
<p>O post <a href="http://cleytonferrari.com/community-zone-2012/">Como foi o Community Zone 2012</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://cleytonferrari.com/community-zone-2012/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vídeo-Aula ASP.Net MVC na prática – Parte 5</title>
		<link>http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-5/</link>
		<comments>http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-5/#comments</comments>
		<pubDate>Wed, 29 Aug 2012 06:44:10 +0000</pubDate>
		<dc:creator>Cleyton Ferrari</dc:creator>
				<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[razor]]></category>
		<category><![CDATA[Vídeo-Aula]]></category>

		<guid isPermaLink="false">http://cleytonferrari.com/?p=397</guid>
		<description><![CDATA[<p>Este post é a parte 5 de 7 partes da série ASP.Net MVCEsta é a quinta parte da série ASP.Net MVC na prática, que ira abordar os conceitos e práticas que norteiam o desenvolvimento de aplicativos baseado no padrão MVC utilizando o ASP.Net Lembre-se: você pode baixar o código desta vídeo-aula no meu repositório do [...]</p><p>O post <a href="http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-5/">Vídeo-Aula ASP.Net MVC na prática &#8211; Parte 5</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">Este post é a parte 5 de 7 partes da série <a href="http://cleytonferrari.com/series/asp-net-mvc/" class="series-38" title="ASP.Net MVC">ASP.Net MVC</a></div><p>Esta é a quinta parte da série ASP.Net MVC na prática, que ira abordar os conceitos e práticas que norteiam o desenvolvimento de aplicativos baseado no padrão MVC utilizando o ASP.Net<span id="more-397"></span></p>
<p><strong>Lembre-se:</strong> você pode baixar o código desta vídeo-aula no meu repositório do GitHub, <a href="https://github.com/cleytonferrari/ASPNETmvcNaPratica">https://github.com/cleytonferrari/ASPNETmvcNaPratica</a></p>
<p>Nesta quinta vídeo-aula sobre <a href="http://cleytonferrari.com/series/asp-net-mvc/">ASP.Net MVC</a> é abordado:</p>
<ul>
<li>Bundling</li>
<li>Minification</li>
</ul>
<p>Durante o decorrer desta vídeo-aula sobre <a title="Vídeo-Aula ASP.Net MVC na prática – Parte 1" href="http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-1/">ASP.NET MVC</a> você verá como otimizar o seu site utilizando técnicas de agrupamentos de arquivos de CSS e JavaScripts os Bundles e verá também como o recurso de Minifications adicionado no ASP.NET MVC 4 ajuda a reduzir o tamanho dos arquivos de CSS e JS do seu site.</p>
<p>Veja também como ordenar os Bundles, adicionar diretórios inteiros de uma unica vez nos seus Bundles e como excluir arquivos da lista de agrupamento dos seus Bundles.</p>
<p>Ao final desta vídeo-aula você será capaz de criar Bundles e Minificações de códigos utilizando o ASP.NET MVC 4 e saberá as vantens que isso trás para o seu projeto Web.</p>
<p><iframe src="http://www.youtube.com/embed/5GstYSmvjoY?rel=0" frameborder="0" width="560" height="315"></iframe></p>
<p><strong>Para saber mais:</strong></p>
<ul>
<li><a title="" href="http://cleytonferrari.com/category/asp-net/">ASP.NET</a></li>
</ul>
<p>O post <a href="http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-5/">Vídeo-Aula ASP.Net MVC na prática &#8211; Parte 5</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-5/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<series:name><![CDATA[ASP.Net MVC]]></series:name>
	</item>
		<item>
		<title>Grupo de Usuários em SignalR</title>
		<link>http://cleytonferrari.com/grupo-de-usuarios-em-signalr/</link>
		<comments>http://cleytonferrari.com/grupo-de-usuarios-em-signalr/#comments</comments>
		<pubDate>Fri, 03 Aug 2012 16:33:41 +0000</pubDate>
		<dc:creator>Cleyton Ferrari</dc:creator>
				<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[SignalR]]></category>

		<guid isPermaLink="false">http://cleytonferrari.com/?p=385</guid>
		<description><![CDATA[<p>Olá pessoal, neste segundo post sobre SignalR vamos falar sobre como enviar mensagens ao chamador (caller) e como destinar mensagem somente a um grupo de usuários. Para quem não viu o primeiro post sobre SignalR, ele é uma biblioteca Async para .NET para ajudar a criar aplicativos web interativos em tempo real e multiusuário. Para [...]</p><p>O post <a href="http://cleytonferrari.com/grupo-de-usuarios-em-signalr/">Grupo de Usuários em SignalR</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></description>
				<content:encoded><![CDATA[<p>Olá pessoal, neste segundo post sobre SignalR vamos falar sobre como enviar mensagens ao chamador (caller) e como destinar mensagem somente a um grupo de usuários.<br />
<span id="more-385"></span><br />
Para quem não viu o <a title="Web em tempo Real com SignalR" href="http://cleytonferrari.com/web-em-tempo-real-com-signalr/">primeiro post sobre SignalR</a>, ele <em>é uma biblioteca Async para .NET para ajudar a criar aplicativos web interativos em tempo real e multiusuário</em>.<br />
Para começar vamos utilizar o <a title="GitHub Cleyton Ferrari" href="https://github.com/cleytonferrari/ChatSignalR/tree/master/C%C3%B3digo/Parte01">exemplo do post anterior</a>, onde fizemos um <a title="Web em tempo Real com SignalR" href="http://cleytonferrari.com/web-em-tempo-real-com-signalr/">chat simples utilizando o SignalR</a>, neste post vamos adicionar uma opção para o usuário escolher um grupo, e as mensagens serão enviadas somente a este grupo, e ele recebera somente mensagens do grupo ao qual ele pertence.<br />
Com o projeto aberto, vamos alterar a class Hub do nosso projeto, no caso <strong>Chat.cs</strong> e deixa-la como mostro no código a seguir:</p>
<pre class="brush: csharp; title: ; notranslate">
public class Chat : Hub
{
    //Deve ter um metodo EnviarMensagem no JavaScript
    public void EnviarMensagem(string mensagem, string grupo)
    {
        mensagem = &quot;&lt;em&gt;&quot; + DateTime.Now.ToString(&quot;HH:mm:ss&quot;) + &quot;h [&quot; + grupo + &quot;]&lt;/em&gt; &quot; + mensagem;
        //Chama um metodo implementado no cliente via JavaScritp
        Clients[grupo].adicionarMensagem(mensagem);
    }

    public void AdicionaGrupo(string grupo)
    {
        //(caller)Manda uma chamada de método somente para quem requisitou o
        //adicionarGrupo
        Caller.adicionarMensagem(&quot;Entrou no grupo: &quot; + grupo);
        Groups.Add(Context.ConnectionId, grupo);
    }

    public void RemoveGrupo(string grupo)
    {
        Caller.adicionarMensagem(&quot;Saiu do grupo:&quot; + grupo);
        Groups.Remove(Context.ConnectionId, grupo);
    }
}
</pre>
<p>Como você pode perceber, adicionamos dois novos métodos <strong>AdicionaGrupo</strong> e <strong>RemoveGrupo</strong>, no primeiro método <em><strong>AdicionaGrupo</strong></em> recebemos uma string <em>grupo</em> como parâmetro, que vai representar o nome do nosso grupo, este método é bem simples, usamos o objeto <strong><em>Caller</em></strong> para invocar o método <em><strong>adicionarMensagem</strong></em> do nosso JavaScript, porem ele irá invocar o <strong><em>adicionarMensagem</em></strong> somente do usuário que fez a requisição, ao contrário do objeto <strong>Clients</strong> que dispara a mensagem para todos os usuários que estão assinando nosso Hub, já a segunda linha do nosso método criamos um Grupo no nosso Hub, invocando o método <strong>Add</strong> do <strong>Groups</strong>, para isso devemos passar o ID da conexão do usuário (<em>Context.ConnectionId</em>) e o nome do grupo que queremos adiciona-lo.<br />
Já no segundo método, <em><strong>RemoverGrupo</strong></em>, fazemos justamente o contrário do primeiro que é remover o usuário do grupo passado como parâmetro.<br />
Reparem também que trocamos o código do nosso primeiro método da class <strong><em>Chat.cs</em></strong>, adicionamos o <strong>[grupo]</strong> na frente do <em><strong>Clients</strong></em>, para que o SignalR possa enviar as mensagens a todos que pertencem a determinado grupo, caso não adicionemos o grupo na frente do <strong>Clients</strong>, o SignalR ira enviar a mensagem a todos que estiverem assinando nosso Hub.</p>
<p>Agora que implementamos a nossa classe Hub, vamos para a implementação da parte em JavaScritp, neste nosso exemplo ele fica dentro do arquivo <strong>Index.cshtml</strong></p>
<pre class="brush: jscript; title: ; notranslate">
&lt;script type=&quot;text/javascript&quot;&gt;
$(function () {
    // Cria um proxy da nossa classe Chat do Servidor
    var chat = $.connection.chat;
    var grupoAtual = 'todos';

    chat.adicionarMensagem = function (message) {
        $('#mensagens').append('&lt;li&gt;' + message + '&lt;/li&gt;');
    };

    $(&quot;#btnEnviar&quot;).click(function () {
        // Chama o metodo da classe Chat do servidor
        chat.enviarMensagem($('#msg').val(), $('#grupo').val());
    });

    $('#grupo').change(function () {
        chat.removeGrupo(grupoAtual);
        grupoAtual = $('#grupo').val();
        chat.adicionaGrupo(grupoAtual);
    });

    // Inicia a conexão
    $.connection.hub.start(function () {
        chat.adicionaGrupo(grupoAtual);
    });

});
&lt;/script&gt;
</pre>
<p>Começamos adicionando no inicio do arquivo o <strong>grupoAtual</strong> do usuário, para que ele já comece com um grupo selecionado. Foi adicionado o evento <strong>change</strong> ao <strong><em>Select</em> <em>#grupo</em></strong>, para que ele chame o método <strong>removeGrupo</strong> do nosso Hub, passando o <strong>grupoAtual</strong>, e logo após isso ele adicione o novo grupo do usuário, chamando o <strong>adicionaGrupo</strong>, passando como parâmetro o valor selecionado no <em><strong>Select #grupo</strong></em>.</p>
<p>Para concluir vamos adicionar o HTML neste mesmo arquivo (<em>index.cshtml</em>), para que ele exiba algumas opções de grupo.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;label&gt;
    grupo:
    &lt;select id=&quot;grupo&quot; &gt;
       &lt;option value=&quot;todos&quot;&gt;Todos&lt;/option&gt;
       &lt;option value=&quot;adm&quot;&gt;Administradores&lt;/option&gt;
       &lt;option value=&quot;usuario&quot;&gt;Usuarios&lt;/option&gt;
    &lt;/select&gt;
 &lt;/label&gt;
</pre>
<p>Com isso acabamos nossa implementação, que é bem simples por sinal, mas já demonstra o poder do SignalR em gerenciar os grupos e o chamador, para que você possa testar, abra três instancias do browser, escolha um grupo para o primeiro, e para as outras duas instâncias escolha o mesmo grupo, e escreva uma mensagem em cada uma delas, você vera uma tela semelhante a mostrada na imagem inicial deste post.<br />
Você pode baixar o exemplo do primeiro post e deste post acessando o <a href="https://github.com/cleytonferrari/ChatSignalR/">meu GitHub</a>.</p>
<p>Bom era isso pessoal e sucesso a todos!</p>
<p>O post <a href="http://cleytonferrari.com/grupo-de-usuarios-em-signalr/">Grupo de Usuários em SignalR</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://cleytonferrari.com/grupo-de-usuarios-em-signalr/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vídeo-Aula ASP.Net MVC na prática – Parte 4</title>
		<link>http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-4/</link>
		<comments>http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-4/#comments</comments>
		<pubDate>Sun, 22 Jul 2012 06:52:28 +0000</pubDate>
		<dc:creator>Cleyton Ferrari</dc:creator>
				<category><![CDATA[ASP.Net]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[MVC]]></category>
		<category><![CDATA[razor]]></category>
		<category><![CDATA[Vídeo-Aula]]></category>

		<guid isPermaLink="false">http://cleytonferrari.com/?p=376</guid>
		<description><![CDATA[<p>Este post é a parte 4 de 7 partes da série ASP.Net MVCEsta é a quarta parte da série ASP.Net MVC na prática, que ira abordar os conceitos e práticas que norteiam o desenvolvimento de aplicativos baseado no padrão MVC utilizando o ASP.Net Lembre-se: você pode baixar o código desta vídeo-aula no meu repositório do [...]</p><p>O post <a href="http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-4/">Vídeo-Aula ASP.Net MVC na prática &#8211; Parte 4</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></description>
				<content:encoded><![CDATA[<div class="seriesmeta">Este post é a parte 4 de 7 partes da série <a href="http://cleytonferrari.com/series/asp-net-mvc/" class="series-38" title="ASP.Net MVC">ASP.Net MVC</a></div><p>Esta é a quarta parte da série ASP.Net MVC na prática, que ira abordar os conceitos e práticas que norteiam o desenvolvimento de aplicativos baseado no padrão MVC utilizando o ASP.Net<span id="more-376"></span></p>
<p><strong>Lembre-se:</strong> você pode baixar o código desta vídeo-aula no meu repositório do GitHub, <a href="https://github.com/cleytonferrari/ASPNETmvcNaPratica">https://github.com/cleytonferrari/ASPNETmvcNaPratica</a></p>
<p>Nesta quarta vídeo-aula sobre <a href="http://cleytonferrari.com/series/asp-net-mvc/">ASP.Net MVC</a> é abordado:</p>
<ul>
<li>Rotas</li>
<li>Criando suas rotas</li>
</ul>
<p>Durante o decorrer desta vídeo-aula sobre <a title="Vídeo-Aula ASP.Net MVC na prática – Parte 1" href="http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-1/">ASP.NET MVC</a> você verá como criar uma listagem de notícias com categorias e aplicar a está listagem rotas personalizadas para exibição de categorias, rotas personalizadas para exibição de titulo da noticia com categoria na URL e rotas para listagem de todas as notícias.</p>
<p>Veja também como aplicar rotas em seus aplicativos MVC e como isso pode ajudar o SEO do seu site.</p>
<p>Ao final desta vídeo-aula você será capaz de criar rotas personalizadas no ASP.NET MVC com um ou vários parâmetros de URL.</p>
<p><iframe src="http://www.youtube.com/embed/23hhkvRIXHs?rel=0" frameborder="0" width="560" height="315"></iframe></p>
<p><strong>Para saber mais:</strong></p>
<ul>
<li><a title="" href="http://cleytonferrari.com/category/asp-net/">ASP.NET</a></li>
</ul>
<p>O post <a href="http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-4/">Vídeo-Aula ASP.Net MVC na prática &#8211; Parte 4</a> apareceu primeiro em <a href="http://cleytonferrari.com">Cleyton Ferrari</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://cleytonferrari.com/video-aula-asp-net-mvc-na-pratica-parte-4/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<series:name><![CDATA[ASP.Net MVC]]></series:name>
	</item>
	</channel>
</rss>
