<?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/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Desenvolvimento web</title>
	<atom:link href="http://ricardomvargas.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://ricardomvargas.wordpress.com</link>
	<description>Artigos e tutoriais voltados para o desenvolvimento web</description>
	<lastBuildDate>Mon, 31 Jan 2011 15:05:09 +0000</lastBuildDate>
	<language>pt-br</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='ricardomvargas.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>Desenvolvimento web</title>
		<link>http://ricardomvargas.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://ricardomvargas.wordpress.com/osd.xml" title="Desenvolvimento web" />
	<atom:link rel='hub' href='http://ricardomvargas.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Enviando e-mail com Flex e .net</title>
		<link>http://ricardomvargas.wordpress.com/2010/03/26/enviando-e-mail-com-flex-e-net/</link>
		<comments>http://ricardomvargas.wordpress.com/2010/03/26/enviando-e-mail-com-flex-e-net/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 18:22:48 +0000</pubDate>
		<dc:creator>ricardomvargas</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[flex e .net]]></category>

		<guid isPermaLink="false">http://ricardomvargas.wordpress.com/?p=99</guid>
		<description><![CDATA[[Atualizado em 05/04/2010] Quando criei esse tutorial pela primeira vez, fiz apenas a parte de envio de e-mail não expliquei como se faz a integração com a aplicação .net pois não achei necessário explicar novamente sendo que já tinha postada links a respeito. Decidi adicionar a esse artigo essa parte da integração também para que [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardomvargas.wordpress.com&amp;blog=11402275&amp;post=99&amp;subd=ricardomvargas&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>[Atualizado em 05/04/2010]</strong></p>
<p>Quando criei esse tutorial pela primeira vez, fiz apenas a parte de envio de e-mail não expliquei como se faz a integração com a aplicação .net pois não achei necessário explicar novamente sendo que já tinha postada links a respeito. Decidi adicionar a esse artigo essa parte da integração também para que não fique muito confuso.</p>
<p>Utilizarei para esse tutorial: Visual Studio 2008, Adobe Flex 3 e FluorineFx.dll.</p>
<p><strong>Parte 1: Criando aplicação de envio de e-mail com o Visual Studio, e preparando a aplicação .net para a integração.</strong></p>
<p>1.1 – Para fazer a integração de uma aplicação .net com uma aplicação Flex, utilizaremos o framework <a href="http://www.fluorinefx.com/" target="_blank">FluorineFx</a> que é open source. Faça o download do FluorineFx <a href="http://www.fluorinefx.com/download.html" target="_blank">aqui</a>, não tem mistério a instalação é o básico de sempre: “Next, Next e Finish”.</p>
<p>1.2 – Após instalar o FlourineFx vamos criar  nossa estrutura de pastas, crie uma pasta em um diretoria qualquer chamada “FlexEnviarEmail”, dentro dessa pasta crie outras três pastas chamadas: “FlexFonte”, “AspNetFonte” e “publicado”. As pastas “FlexFonte” e “AspNetFonte” serão os diretorias das aplicações do Flex e do AspNet, a pasta “publicado” será a pasta onde publicaremos a aplicação.</p>
<p><img class="alignnone size-full wp-image-115" title="Estrutura de pastas FlexEnviarEmail" src="http://ricardomvargas.files.wordpress.com/2010/03/pastas.jpg?w=600" alt="Estrutura de pastas FlexEnviarEmail"   /></p>
<p>1.3 – Abra o VS e vá em File &gt; New &gt; Web Site&#8230;, escolha a pasta que você criou chamada “AspNetFonte” e “Language” C#. Renome-e o arquivo “Default.aspx” para “Gateway.aspx”. Ainda no projeto do .net, vamos agora adicionar a referencia ao framework FluorineFx, clique com o botão direito em cima da solução e em seguida clique em “Add reference&#8230;”.</p>
<p><img class="alignnone size-full wp-image-116" title="Adicionando referencia há FluorineFx .net" src="http://ricardomvargas.files.wordpress.com/2010/03/addreference.jpg?w=600" alt="Adicionando referencia há FluorineFx .net"   /></p>
<p>Se você instalou corretamente o framework FlourineFx, você vai ver na lista de referencias na aba .Net o framework.</p>
<p><img class="alignnone size-medium wp-image-117" title="Adicionando referencia ao FluorineFx .net" src="http://ricardomvargas.files.wordpress.com/2010/03/addreference2.jpg?w=300&#038;h=250" alt="Adicionando referencia ao FluorineFx .net" width="300" height="250" /></p>
<p>Selecione o “FlourineFx for .NET Framwork 2.0”, caso sua aplicação não tenha a pasta BIN, a mesma será criada para ser adicionada essas dll’s.</p>
<p>Precisamos também registrar o framework FluorineFx no web.config. Então abra o web.config e adicione o seguinte código dentro do nod “configSections”:</p>
<p><pre class="brush: xml;">
&lt;sectionGroup name=&quot;fluorinefx&quot;&gt;
        &lt;section name=&quot;settings&quot; type=&quot;FluorineFx.Configuration.XmlConfigurator, FluorineFx&quot;/&gt;
&lt;/sectionGroup&gt;
</pre></p>
<p>Agora dentro do nod “httpModules”:</p>
<p><pre class="brush: xml;">
&lt;httpModules&gt;
&lt;add name=&quot;FluorineGateway&quot; type=&quot;FluorineFx.FluorineGateway, FluorineFx&quot;/&gt;
&lt;/httpModules&gt;
</pre></p>
<p>Muito bem, a parte de configuração do framework FluorineFx já está pronta, agora vamos fazer a aplicação para enviar o e-mail.</p>
<p>1.4 – Crie uma Classe chamada Email.cs (botão direito em cima do projeto &gt; Add new item&#8230;), se o VS 2008 perguntar se você deseja criar a pasta App_Code e colocar a Classe dentro dela clique em sim. Adicione o código abaixo:</p>
<p><pre class="brush: java;">
using FluorineFx;
using System.Net.Mail;

[RemotingService]
public class Email
{
    #region --- ATRIBUTOS ---
    private String nome;
    public String Nome
    {
        get { return nome; }
        set { nome = value; }
    }

    private String userMail;
    public String UserMail
    {
        get { return userMail; }
        set { userMail = value; }
    }

    private String assunto;
    public String Assunto
    {
        get { return assunto; }
        set { assunto = value; }
    }

    private String mensagem;
    public String Mensagem
    {
        get { return mensagem; }
        set { mensagem = value; }
    }
    #endregion

    public Email()
    { }

    #region --- MÉTODOS ---
    /// &lt;summary&gt;
    /// Envia o email.
    /// &lt;/summary&gt;
    /// &lt;returns&gt;Retorna True caso dê tudo certo e false caso gere algum erro.&lt;/returns&gt;
    public void EnviarEmail(Email _email)
    {
        MailMessage message = new MailMessage();
        SmtpClient client = new SmtpClient();

        //E-mail do rementente
        message.From = new MailAddress(&quot;email-remetente&quot;, &quot;Remetente&quot;);
        message.IsBodyHtml = true;
        message.Body = &quot;Nome: &quot; + _email.nome + &quot;&lt;br /&gt;E-mail: &quot; + _email.userMail + &quot;&lt;br /&gt;Assunto: &quot; + _email.assunto + &quot;&lt;br /&gt;Mesagem: &quot; + _email.mensagem;
        message.Subject = _email.assunto;
        //E-mail do destinatário
        message.To.Add(new MailAddress(&quot;email-destinatario&quot;, &quot;Destinatário&quot;));

        //E-mail e senha para enviar a mensagem
        client.Credentials = new System.Net.NetworkCredential(&quot;email-remetente/envio&quot;, &quot;senha-email&quot;);
        //Número da porta:
        client.Port = 25;
        //Seu host para envio do e-mail
        client.Host = &quot;host&quot;;

        client.Send(message);
        message.Dispose();
        message = null;
        client = null;
    }
    #endregion
}
</pre></p>
<p>As configurações de para envio de e-mail (host, porta, e-mail de envio e senha) são configurações de cada um, então não quer dizer, por exemplo, que a porta é a 25 como está no código acima, isso depende das suas configurações. Precisamos importar a FluorineFx para usar o “[RemoteService]”. O [RemoteService] que se encontra em cima da declaração da classe, serve para dizermos para o FluorineFx que essa classe será acessada remotamente pelo Flex. Criamos as propriedades nome, mail, assunto e mensagem, que são informações que pegaremos no formulário da aplicação Flex e enviaremos por e-mail. O método EnviarEmail recebe um parâmetro que é um objeto da própria classe Email (Isso ficara mais claro na aplicação Flex) e envia o e-mail.</p>
<p>1.5 – Agora configure a pasta “AspNetFonte”  no IIS, para isso basta você clicar com o botão direito na pasta “AspNetFonte” e na aba “Compartilhamento web” escolher a opção “Compartilhar essa pasta”, na opção “alias” (apelido) coloque flexmail. Caso não tenha a aba “Compartilhamento web”, significa que seu IIS não está instalado, veja como você pode instalá-lo por esse <a href="http://www.criarweb.com/artigos/381.php" target="_blank">tutorial</a> (aconselho a trabalhar com o IIS), se você não tiver o IIS instalado, pode fazer o seguinte: O VS tem tipo um IIS interno para rodar as suas aplicações, então quando você roda uma aplicação pelo VS (apertando o F5, por exemplo) ele gera um número de porta aleatório e roda aplicação nesse servidor próprio, então a url fica mais ou menos algo assim: “http://localhost:3845/AspNetFonte/Gateway.aspx”, então rode sua aplicação e anote a url gerado no browser pois vamos precisar dela na aplicação Flex.</p>
<p>Pronto, já criamos nossa classe que enviara o e-mail, agora vamos para o Flex.</p>
<p><strong>Parte 2: Criando formulário para envio de e-mail no Flex.</strong></p>
<p>2.1 – Abra o Flex, vá em File &gt; New &gt; Flex Project e selecione a pasta FlexFonte que você criou anteriormente, coloque um nome qualquer para o projeto (no caso eu coloquei o mesmo nome da pasta) e clique em finish. Crie uma pasta dentro da pasta src com o nome de classes, agora adicionamos uma arquivo ActionScript Class com o nome de Email dentro dessa pasta (botão direito na pasta classes &gt; new &gt; actionscript class). Essa classe precisa ter exatamente o mesmo nome da classe na aplicação .net (no caso Email), então ela deve se chamar “Email.as”. Adicione o código abaixo nessa classe:</p>
<p><pre class="brush: java;">
package classes{
	[RemoteClass(alias=&quot;Email&quot;)]
	public class Email{
		private var nome:String;
		public function get Nome():String{
			return nome;
		}
		public function set Nome(n:String):void{
			this.nome = n;
		}

		private var mail:String;
		public function get Mail():String{
			return mail;
		}
		public function set Mail(m:String):void{
			this.mail = m;
		}

		private var assunto:String;
		public function get Assunto():String{
			return assunto;
		}
		public function set Assunto(a:String):void{
			this.assunto = a;
		}

		private var mensagem:String;
		public function get Mensagem():String{
			return mensagem;
		}
		public function set Mensagem(msg:String):void{
			this.mensagem = msg;
		}

		public function Email(){
		}
	}
}
</pre></p>
<p>Assim como na classe da aplicação .net, no Flex também precisamos dizer qual é a classe remota que ele irá acessar, por isso inserimos o [RemoteClass(alias=”Email”)] no começo da classe. A classe “Email” que está setado no “alias=”, é a classe “Email.cs” da aplição .net. Note que até mesmo o nome das propriedades tem que ser o mesmo do que a classe “Email.cs”. O get e set do actionscript 3.0 é bem semelhando ao do .net como podemos reparar.</p>
<p>2.2 – Dentro do arquivo principal do Flex, adicione o código abaixo:</p>
<p><pre class="brush: xml;">
&lt;mx:RemoteObject id=&quot;roMail&quot; source=&quot;Email&quot; destination=&quot;fluorine&quot; showBusyCursor=&quot;true&quot;&gt;
		&lt;mx:method name=&quot;EnviarEmail&quot; result=&quot;{resultadoEnviar(event)}&quot; fault=&quot;{falhaEnviar(event)}&quot;/&gt;
	&lt;/mx:RemoteObject&gt;

	&lt;mx:VBox height=&quot;384&quot; width=&quot;300&quot; horizontalCenter=&quot;0&quot; verticalCenter=&quot;0&quot;&gt;
		&lt;mx:TextInput id=&quot;txtNome&quot; focusIn=&quot;removeTextoPadrao(this.txtNome)&quot; focusOut=&quot;addTextoPadrao(this.txtNome)&quot; text=&quot;Nome&quot;/&gt;
		&lt;mx:TextInput id=&quot;txtEmail&quot; width=&quot;280&quot; focusIn=&quot;removeTextoPadrao(this.txtEmail)&quot; focusOut=&quot;addTextoPadrao(this.txtEmail)&quot; text=&quot;E-mail&quot;/&gt;
		&lt;mx:ComboBox id=&quot;comboAssunto&quot; creationComplete=&quot;preencheCombo()&quot;&gt;&lt;/mx:ComboBox&gt;
		&lt;mx:TextArea width=&quot;300&quot; height=&quot;120&quot; id=&quot;txtMensagem&quot; focusIn=&quot;removeTextoPadraoTextArea(this.txtMensagem)&quot; focusOut=&quot;addTextoPadraoTextArea(this.txtMensagem)&quot; text=&quot;Mensagem&quot;/&gt;
		&lt;mx:Button label=&quot;Enviar&quot; id=&quot;btnEnviar&quot; click=&quot;enviarEmail(event)&quot;/&gt;
	&lt;/mx:VBox&gt;
</pre></p>
<p>O “mx:RemoteObject” serve para se conectar remotamente com a classe “Email.cs”, especificamos qual classe ele ira se conectar através da propriedade “source”. A propriedade “showBusyCursor=true” serve para que enquanto o RemoteObject estiver sendo executado será exibido um cursor de carregando (tipo a ampulheta do windows).</p>
<p>Na tag mx:Method dizemos qual o método iremos usar da classe “Email.cs” pela propriedade “name” (pode se ter varias tags mx:Method para os métodos da classe), a propriedade “result” indica qual função será executada caso dê tudo certo na execução do método da classe “Email.cs”, caso dê algo errado, será executada a função que está registrada na propriedade “fault” (criaremos essas funções mais a frente). Em alguns controles pode-se observar que existem funções ligadas aos eventos focusIn (evento disparado quando o focu está no controle) e focusOut (evento disparado quando o focu sai do controle), que veremos no próximo passo.</p>
<p>2.3 – Crie um bloco “mx:Script” logo acima do código que você adicionou anteriormente, depois adicione esse código ao script:</p>
<p><pre class="brush: java;">
import mx.rpc.remoting.mxml.RemoteObject;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
import mx.controls.Alert;
import classes.Email;
import mx.collections.ArrayCollection;

/********** EVENTOS DOS CONTROLES DO FORMULÁRIO **********/
			//Preenche o combo box com as opções de assunto
			private function preencheCombo():void{
				var lista:ArrayCollection = new ArrayCollection();
				lista.addItem(&quot;Selecione --&quot;);
				lista.addItem(&quot;Dúvida&quot;);
				lista.addItem(&quot;Sugestão&quot;);
				lista.addItem(&quot;Reclamação&quot;);
				comboAssunto.dataProvider = lista;
			}

			//Retira o texto padrão dos inputs nome e email
			private function removeTextoPadrao(t:TextInput):void{
				if (t.text == &quot;Nome&quot; || t.text == &quot;E-mail&quot;)
					t.text = &quot;&quot;;
			}

			//Adiciona o texto padrão dos inputs nome e email
			private function addTextoPadrao(t:TextInput):void{
				if (t.id == &quot;txtNome&quot; &amp;&amp; t.text == &quot;&quot;)
					t.text = &quot;Nome&quot;;
				else if (t.id == &quot;txtEmail&quot; &amp;&amp; t.text == &quot;&quot;)
					t.text = &quot;E-mail&quot;;
			}

			//Remove texto padrão do textarea
			private function removeTextoPadraoTextArea(ta:TextArea):void{
				if (ta.text == &quot;Mensagem&quot;)
					ta.text = &quot;&quot;;
			}

			//Adiciona texto padrão do textarea
			private function addTextoPadraoTextArea(ta:TextArea):void{
				if (ta.text == &quot;&quot;)
					ta.text = &quot;Mensagem&quot;;
			}

			//Volta com todos os textos padrões
			private function textoPadrao():void{
				txtNome.text = &quot;Nome&quot;;
				txtEmail.text = &quot;E-mail&quot;;
				txtMensagem.text = &quot;Mensagem&quot;;
				comboAssunto.selectedIndex = 0;
			}

/********** FUNÇÕES DE CONECXÃO COM A APLICAÇÃO .NET **********/
			//Função que é executada se ocorreu algum erro ao enviar o e-mail
			private function falhaEnviar(evt:FaultEvent):void{
		    	Alert.show(&quot;Ocorreu o seguinte erro ao tentar executar o método:\n&quot; + evt.fault.message, &quot;Erro&quot;);
			}

			//Função que é executada se não ocorreu erros no envio de e-mail
			private function resultadoEnviar(evt:ResultEvent):void{
	        	textoPadrao();
	        	Alert.show(&quot;E-mail enviado com sucesso!&quot;);
		    }

			//Função que é acionado com o clique do mouse
			private function enviarEmail(evt:MouseEvent):void{
		    	if (evt.type == MouseEvent.CLICK){
		        	var email:Email = new Email;
		        	email.Nome = txtNome.text;
		        	email.Mail = txtEmail.text;
		        	email.Assunto = comboAssunto.selectedLabel;
		        	email.Mensagem = txtMensagem.text;
		        	roMail.getOperation(&quot;EnviarEmail&quot;).send(email);
		    	}
			}
</pre></p>
<p>A função “preencheCombo” serve para preencher o comboBox assunto, com informações de um arrayCollection. As funções que seguem abaixo da função “preencheCombo” servem somente para retirar ou adicionar texto padrão nos inputs. A função “textoPadrao” serve para retornar os textos padrões para os inputs depois que o e-mail for enviado. A função “falhaEnviar” que recebe como parâmetro um “FaultEvet” é a função que será executada caso ocorra algum erro na execução do RemoteObject, e a função “resultadoEnviar” será disparada caso ocorra tudo bem, perceba que as duas funções simplesmente executam um “Alert” informando o que aconteceu.</p>
<p>A função “enviarEmail” é executada quando clicamos no botão “btnEnviar” (o evento clique chama a função enviarEmail) e dentro dessa função, criamos um objeto da classe “Email.as” e preenchemos os atributos com os valores do formulário. Para executar o método que está registrado no “roMail” (id do mx:RemoteObject), executamos o “getOperation” do “roMail” e passamos como parâmetro o nome do método registrado, em seguida executamos o send(). Como já sabemos, o método “EnviarEmail” da classe “Email.cs” espera um parâmetro do tipo “Email”, então no “send()” do “getOperation” passamos o objeto da classe “Email.as” que criamos com os dados do formulário(“.send(email)”). Caso o método “EnviarEmail” da classe “Email.cs” não esperasse nenhum parâmetro, bastava executar o “send()” sem parâmetros mesmo.</p>
<p><strong>Parte 3: Configurando a aplicação Flex para se conectar com a aplicação .net.</strong></p>
<p>3.1 – Clique com o botão direito na pasta src e selecione File &gt; New &gt; File, coloque o nome do arquivo de “services-config.xml”, é com esse arquivo que faremos o mapeamento das classes ActioScript com .Net/C#. Adicione o código abaixo nesse arquivo:</p>
<p><pre class="brush: xml;">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;
    &lt;services-config&gt;
        &lt;services&gt;
            &lt;service id=&quot;remoting-service&quot;
            class=&quot;flex.messaging.services.RemotingService&quot;
            messageTypes=&quot;flex.messaging.messages.RemotingMessage&quot;&gt;
                &lt;destination id=&quot;fluorine&quot;&gt;
                    &lt;channels&gt;
                        &lt;channel ref=&quot;my-amf&quot;/&gt;
                    &lt;/channels&gt;
                    &lt;properties&gt;
                        &lt;source&gt;*&lt;/source&gt;
                    &lt;/properties&gt;
                &lt;/destination&gt;
            &lt;/service&gt;
        &lt;/services&gt;
        &lt;channels&gt;
        &lt;channel-definition id=&quot;my-amf&quot;
        class=&quot;mx.messaging.channels.AMFChannel&quot;&gt;
            &lt;endpoint uri=&quot;http://localhost/flexmail/Gateway.aspx&quot;
            class=&quot;flex.messaging.endpoints.AMFEndpoint&quot;/&gt;
        &lt;/channel-definition&gt;
    &lt;/channels&gt;
&lt;/services-config&gt;
</pre></p>
<p>Se você configurou a aplicação .net no IIS, coloque a url da aplicação na opção “uri” do nod “endpoint” (como você pode observar, a url que está no código acima é uma url de uma aplicação que está configurada no IIS), caso você não esteja usando o IIS e sim o VS, então coloque a url gerada pelo VS (passo 1.5) e adicione no “uri” do nod “endpoint”. Agora clique com o botão direito em cima da aplicação Flex e clique em properties:</p>
<p><img class="alignnone size-medium wp-image-118" title="Flex properties" src="http://ricardomvargas.files.wordpress.com/2010/03/flexpropriedades.jpg?w=158&#038;h=300" alt="" width="158" height="300" /></p>
<p>Na opção “Flex Compiler” adicione o texto “-services services-config.xml” no “Additional compiler arguments”:</p>
<p><img class="alignnone size-medium wp-image-119" title="Flex properties" src="http://ricardomvargas.files.wordpress.com/2010/03/flexpropriedades2.jpg?w=366&#038;h=314" alt="" width="366" height="314" /></p>
<p>Deixe um espaço em branco entre o “-locale en_US” e o “-services services-config.xml”. Agora já está tudo ok, já da para testar a aplicação, se você conseguiu configurar a aplicação no IIS, basta executar a aplicação no Flex e já estará tudo funcionando. Caso você tenha usado a url gerado pelo VS, você terá que executar a aplicação .net primeiro, e depois executar a aplicação Flex, é preciso fazer isso para que o VS inicie o seu servidor interno.</p>
<p><strong>Parte 4: Publicando as aplicações.</strong></p>
<p>4.1 – Para isso você precisara do IIS instalado, primeiro vamos publicar a aplicação .net, abra o VS e abra a aplicação que esta na pasta “AspNetFonte”, clique com o botão direito na solução e clique em “Publish Web Site”:</p>
<p><img class="alignnone size-full wp-image-120" title="Publicando aplicação .net" src="http://ricardomvargas.files.wordpress.com/2010/03/publishwebsite1.jpg?w=600" alt=""   /></p>
<p>clique no botão “&#8230;” e selecione a pasta que você criou chamada “publicado”, deixe apenas a opção “Allow this precompiled site to be updatable” marcada e clique em ok.</p>
<p><img class="alignnone size-medium wp-image-121" title="Publicando aplicação .net" src="http://ricardomvargas.files.wordpress.com/2010/03/publishwebsite2.jpg?w=368&#038;h=245" alt="" width="368" height="245" /></p>
<p>Pronto, a aplicação .net está publicada, agora vamos publicar a aplicação Flex. Abra a aplicação Flex, depois abra o arquivo services-config.xml, e na opção “uri” do nod “endpoint”, deixe assim:</p>
<p><pre class="brush: xml;">
&lt;endpoint uri=&quot;Gateway.aspx&quot; class=&quot;flex.messaging.endpoints.AMFEndpoint&quot;/&gt;
</pre></p>
<p>Isso por que toda a pasta publicado será uma aplicação, e a aplicação Flex e .net estarão na mesma pasta, então não é preciso colocar o caminho completo da aplicação. Agora selecione o projeto Flex, clique no botão superior Project &gt; Export Release Build&#8230;:</p>
<p><img class="alignnone size-full wp-image-122" title="Publicando aplicação Flex" src="http://ricardomvargas.files.wordpress.com/2010/03/flexexport.jpg?w=600" alt=""   /></p>
<p>Na opção “Browser” selecione a pasta “publicado” e clique em Finish. Agora configure a pasta “publicado” no IIS, agora é só acessar a aplicação no seu localhost e pronto.</p>
<p>Baixe o projeto <a href="http://www.4shared.com/file/257718071/aac32fca/FlexMail.html" target="_blank">aqui</a>, até a próxima!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ricardomvargas.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ricardomvargas.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ricardomvargas.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ricardomvargas.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ricardomvargas.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ricardomvargas.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ricardomvargas.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ricardomvargas.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ricardomvargas.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ricardomvargas.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ricardomvargas.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ricardomvargas.wordpress.com/99/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ricardomvargas.wordpress.com/99/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ricardomvargas.wordpress.com/99/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardomvargas.wordpress.com&amp;blog=11402275&amp;post=99&amp;subd=ricardomvargas&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ricardomvargas.wordpress.com/2010/03/26/enviando-e-mail-com-flex-e-net/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/509df361c96e09953945881057e47b5c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tutorial dotNet</media:title>
		</media:content>

		<media:content url="http://ricardomvargas.files.wordpress.com/2010/03/pastas.jpg" medium="image">
			<media:title type="html">Estrutura de pastas FlexEnviarEmail</media:title>
		</media:content>

		<media:content url="http://ricardomvargas.files.wordpress.com/2010/03/addreference.jpg" medium="image">
			<media:title type="html">Adicionando referencia há FluorineFx .net</media:title>
		</media:content>

		<media:content url="http://ricardomvargas.files.wordpress.com/2010/03/addreference2.jpg?w=300" medium="image">
			<media:title type="html">Adicionando referencia ao FluorineFx .net</media:title>
		</media:content>

		<media:content url="http://ricardomvargas.files.wordpress.com/2010/03/flexpropriedades.jpg?w=158" medium="image">
			<media:title type="html">Flex properties</media:title>
		</media:content>

		<media:content url="http://ricardomvargas.files.wordpress.com/2010/03/flexpropriedades2.jpg?w=300" medium="image">
			<media:title type="html">Flex properties</media:title>
		</media:content>

		<media:content url="http://ricardomvargas.files.wordpress.com/2010/03/publishwebsite1.jpg" medium="image">
			<media:title type="html">Publicando aplicação .net</media:title>
		</media:content>

		<media:content url="http://ricardomvargas.files.wordpress.com/2010/03/publishwebsite2.jpg?w=300" medium="image">
			<media:title type="html">Publicando aplicação .net</media:title>
		</media:content>

		<media:content url="http://ricardomvargas.files.wordpress.com/2010/03/flexexport.jpg" medium="image">
			<media:title type="html">Publicando aplicação Flex</media:title>
		</media:content>
	</item>
		<item>
		<title>Preenchendo ComboBox e List com dados de um banco (Flex + .net)</title>
		<link>http://ricardomvargas.wordpress.com/2010/03/21/preenchendo-combobox-e-list-com-dados-de-um-banco-flex-net/</link>
		<comments>http://ricardomvargas.wordpress.com/2010/03/21/preenchendo-combobox-e-list-com-dados-de-um-banco-flex-net/#comments</comments>
		<pubDate>Sun, 21 Mar 2010 19:54:00 +0000</pubDate>
		<dc:creator>ricardomvargas</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[flex e .net]]></category>

		<guid isPermaLink="false">http://ricardomvargas.wordpress.com/?p=87</guid>
		<description><![CDATA[Nesse tutorial vou mostrar como preencher um controle ComboBox do Flex com dados de um banco, e preencher um controle List de acordo com o dado que foi selecionado no controle ComboBox. Para isso vou usar o Visual Studio 2008 com c#, Sql Server 2005 com o banco Northwind, Adobe Flex 3 e actionscript 3.0. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardomvargas.wordpress.com&amp;blog=11402275&amp;post=87&amp;subd=ricardomvargas&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Nesse tutorial vou mostrar como preencher um controle ComboBox do Flex com dados de um banco, e preencher um controle List de acordo com o dado que foi selecionado no controle ComboBox. Para isso vou usar o Visual Studio 2008 com c#, Sql Server 2005 com o banco Northwind, Adobe Flex 3 e actionscript 3.0. Como citei no post anterior (<a target="_blank" href="http://ricardomvargas.wordpress.com/2010/03/21/flex-e-net-%E2%80%93-dicas-links-e-tutoriais/">Flex e .net – dicas, links e tutoriais</a>), todos os artigos que eu escrever que terão a integração de Flex com .net, criarei com base no artigo que se encontra na minha lista de links (Flex + .net).</p>
<p>1 – Vamos começar criando a aplicação no Visual Studio 2008, File &gt; New &gt; Web Site. Coloquei o nome de “pcAspNet”, pois a aplicação que vou criar no Adobe Flex se chamará “PreencheControles”.  Vamos criar uma classe chamada Selecao, dentro dela vamos importar a ddl FluorineFx para a integração das aplicações, e acima da classe Selecao colocar [RemotingService] (a estrutura da aplicação é semelhante à aplicação que se encontra no link que se está na minha lista de links, e tudo que citei anteriormente também é explicado lá).</p>
<p>2 – Agora vamos adicionar uma string de conexão com o banco no web.config (claro que, essa configuração é baseada no meu servidor de banco, adapte a mesma para o seu banco).<br />
<pre class="brush: xml;">
&lt;add name=&quot;NorthwindConn&quot; connectionString=&quot;Data Source=RICARDO-FC13DCB\SQLEXPRESS;Initial Catalog=Northwind;User ID=sa;Password=server&quot; providerName=&quot;System.Data.SqlClient&quot; /&gt;
</pre></p>
<p>3 – Agora vamos adicionar os métodos que retornaram os dados para a aplicação Flex:</p>
<p><pre class="brush: java;">
public ArrayList SelecionaCategorias()
    {
        ArrayList lista = new ArrayList();
        try
        {
            SqlConnection Conn = new SqlConnection(GetConnectionString());
            Conn.Open();
            SqlCommand Comm = new SqlCommand(&quot;SELECT CategoryName FROM Categories&quot;, Conn);
            SqlDataReader Reader = Comm.ExecuteReader();
            while (Reader.Read())
            {
                lista.Add(Reader.GetValue(0).ToString());
            }
        }
        catch (Exception ex)
        { }
        return lista;
    }

    public ArrayList SelecionaProdutos(String CategoryName)
    {
        ArrayList lista = new ArrayList();
        try
        {
            SqlConnection Conn = new SqlConnection(GetConnectionString());
            Conn.Open();
            SqlCommand Comm = new SqlCommand(&quot;SELECT  P.ProductName FROM Products AS P INNER JOIN Categories AS C ON P.CategoryID = C.CategoryID WHERE (C.CategoryName = '&quot; + CategoryName + &quot;')&quot;, Conn);
            SqlDataReader Reader = Comm.ExecuteReader();
            while (Reader.Read())
            {
                lista.Add(Reader.GetValue(0).ToString());
            }
        }
        catch (Exception ex)
        { }
        return lista;
    }

    private String GetConnectionString()
    {
        return ConfigurationManager.ConnectionStrings[&quot;NorthwindConn&quot;].ConnectionString;
    }
</pre></p>
<p>Para usar o ArrayList, precisamos importar a classe Collections (using System.Collections;).O primeiro método retorna um ArrayList contendo o nome de todas as categorias, o segundo, retorna o nome de todos os produtos de acordo com o nome de uma categoria especifica. E o terceiro serve simplesmente para retornar a string de conexão que se encontra no web.config.</p>
<p>4 – Agora vamos para o Adobe Flex, crie um novo projeto File &gt; New &gt; Flex Project, configure-o em um diretório que você queira, e coloque o nome dele de PreenchendoControles. IMPORTANTE: Após fazer toda a configuração necessário no Flex para a integração entre as aplicações (veja o link na lista de links), configure a aplicação pcAspNet no IIS e coloque o endereço da mesma no arquivo “service-config.xml”.</p>
<p>5 – Adicione os controles ComboBox e List no Flex, com os id’s: comboCategorias e listProdutos. Adicione também o controle RemoteObject como no código abaixo:</p>
<p><pre class="brush: xml;">
&lt;mx:RemoteObject id=&quot;ro&quot; source=&quot;Selecao&quot;
     destination=&quot;fluorine&quot; showBusyCursor=&quot;true&quot;&gt;        
        &lt;mx:method name=&quot;SelecionaCategorias&quot;
        result=&quot;{AddCategorias(event)}&quot; fault=&quot;{errorFault(event)}&quot;/&gt;
        &lt;mx:method name=&quot;SelecionaProdutos&quot;
        result=&quot;{AddProdutos(event)}&quot; fault=&quot;{errorFault(event)}&quot;/&gt;
    &lt;/mx:RemoteObject&gt;

    &lt;mx:ComboBox id=&quot;comboCategorias&quot; change=&quot;ro.SelecionaProdutos(comboCategorias.selectedLabel)&quot; creationComplete=&quot;{ro.SelecionaCategorias()}&quot; y=&quot;10&quot; width=&quot;200&quot; x=&quot;121&quot;&gt;&lt;/mx:ComboBox&gt;	
	&lt;mx:List id=&quot;listaProdutos&quot; x=&quot;329&quot; y=&quot;9&quot; width=&quot;200&quot; height=&quot;150&quot;&gt;&lt;/mx:List&gt;
</pre></p>
<p>Como já sabemos, a propriedade source do RemoteObject precisa ser setada com o nome da classe que criamos no pcAspNet (Selecao), nas tag method, são configurados os métodos da classe Selecao. IMPORTANTE: No ComboBox tem um evento chamado creationComplete, esse evento é disparado assim que o ComboBox é renderizado na tela, então assim não corremos o risco de preencher os dados do ComboBox antes de ele ser criado na tela. No evento change, que o evento que é disparado toda a vez que muda a seleção no ComboBox, coloquei o método que preencherá o List com a lista de produtos toda a vez que o valor do ComboBox for alterado.</p>
<p>6 – Agora vamos criar o bloco de script que terá os métodos que preencheram os controles:</p>
<p><pre class="brush: java;">
&lt;mx:Script&gt;
    &lt;![CDATA[
        import mx.controls.Alert;
        import mx.rpc.events.ResultEvent;
        import mx.rpc.events.FaultEvent;
        import mx.collections.ArrayCollection;
        
        private function errorFault(evt:FaultEvent):void
        {
            Alert.show(evt.fault.faultString);
        }
        
        private function AddCategorias(e:ResultEvent):void
        {        	
        	var lista:ArrayCollection = e.result as ArrayCollection;
        	lista.addItemAt(&quot;Selecione --&quot;, 0);
        	comboCategorias.dataProvider = lista;        	   
        }
        
        private function AddProdutos(e:ResultEvent):void
        {
        	var lista:ArrayCollection = e.result as ArrayCollection;        	
        	listaProdutos.dataProvider = lista; 
        }

        ]]&gt;
    &lt;/mx:Script&gt;
</pre></p>
<p>Precisamos importar as classes acima para poder trabalhar. O método errorFault é chamado somente se acontece algum erro, o AddCategorias é o método que preencherá o controle ComboBox: Criamos uma variável do Tipo ArrayCollection que receberá o ArrayList do c# com os nomes das categorias, depois adicionamos um item a mais na posição “0”. E no final definimos o ArrayCollection com sendo o dataProvider do ComboBox. No AddProduto fazemos praticamente a mesma coisa, só não adicionamos nada na primeira posição.</p>
<p>E pronto, sem mistério, agora é só rodar a aplicação e você preencherá o List somente quando selecionar uma opção no ComboBox.</p>
<p>Segue o arquivo para <a target="_blank" href="http://www.4shared.com/file/246233494/d4f210ef/PreechendoControles.html">download</a>. Até a próxima!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ricardomvargas.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ricardomvargas.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ricardomvargas.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ricardomvargas.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ricardomvargas.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ricardomvargas.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ricardomvargas.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ricardomvargas.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ricardomvargas.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ricardomvargas.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ricardomvargas.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ricardomvargas.wordpress.com/87/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ricardomvargas.wordpress.com/87/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ricardomvargas.wordpress.com/87/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardomvargas.wordpress.com&amp;blog=11402275&amp;post=87&amp;subd=ricardomvargas&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ricardomvargas.wordpress.com/2010/03/21/preenchendo-combobox-e-list-com-dados-de-um-banco-flex-net/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/509df361c96e09953945881057e47b5c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tutorial dotNet</media:title>
		</media:content>
	</item>
		<item>
		<title>Flex e .net – dicas, links e tutoriais</title>
		<link>http://ricardomvargas.wordpress.com/2010/03/21/flex-e-net-%e2%80%93-dicas-links-e-tutoriais/</link>
		<comments>http://ricardomvargas.wordpress.com/2010/03/21/flex-e-net-%e2%80%93-dicas-links-e-tutoriais/#comments</comments>
		<pubDate>Sun, 21 Mar 2010 19:39:28 +0000</pubDate>
		<dc:creator>ricardomvargas</dc:creator>
				<category><![CDATA[Desenvolvimento web]]></category>
		<category><![CDATA[as3]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[flex e .net]]></category>

		<guid isPermaLink="false">http://ricardomvargas.wordpress.com/?p=80</guid>
		<description><![CDATA[Fiquei muito tempo sem atualizar o blog, o motivo principal foi a falta de tempo mesmo. Alem de trabalhar com desenvolvimento web, principalmente com .net, tenho estudado muito sobre o Adobe Flex e actionscritp 3.0 e a integração deles com .net, a partir de hoje pretendo colocar tudo que eu aprender a respeito e algumas [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardomvargas.wordpress.com&amp;blog=11402275&amp;post=80&amp;subd=ricardomvargas&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Fiquei muito tempo sem atualizar o blog, o motivo principal foi a falta de tempo mesmo. Alem de trabalhar com desenvolvimento web, principalmente com .net, tenho estudado muito sobre o Adobe Flex e actionscritp 3.0 e a integração deles com .net, a partir de hoje pretendo colocar tudo que eu aprender a respeito e algumas experiências que eu fizer. Nesse post irei colocar links bastante úteis que encontrei nas minhas buscas.</p>
<p>Links:</p>
<ul>
<li><strong>Flex: sanando dúvidas</strong> (Ótimo link que da uma explicada sobre o Flex e a integração com linguagens Serve-Side). &#8211; <a target="_blank" href="http://www.vedovelli.com.br/?p=792">http://www.vedovelli.com.br/?p=792</a></li>
<li><strong>Video aulas de Flex, conteúdo oficial da Adobe (Em inglês).</strong> &#8211; <a target="_blank" href="http://www.adobe.com/devnet/flex/videotraining/">http://www.adobe.com/devnet/flex/videotraining/</a></li>
<li><strong>Excelente blog com diversos artigos sobre Flex, Flash, Air, as3 e etc.</strong> &#8211; <a target="_blank" href="http://msdevstudio.com/blog/">http://msdevstudio.com/blog/</a></li>
<li><strong>Flex Mania (Palestras online).</strong> &#8211; <a target="_blank" href="http://msdevstudio.com/blog/">http://msdevstudio.com/blog/</a></li>
<li><strong>Agregador de artigos sobre RIA.</strong> &#8211; <a target="_blank" href="http://rederia.net/">http://rederia.net/</a></li>
<li><strong>Site de exemplo da Adobe, onde você pode customizar um controle do Flex, então é gerado um CSS.</strong> &#8211; <a target="_blank" href="http://examples.adobe.com/flex2/consulting/styleexplorer/Flex2StyleExplorer.html">http://examples.adobe.com/flex2/consulting/styleexplorer/Flex2StyleExplorer.html</a></li>
<li><strong>Mais um site de exemplo da Adobe, onde são listados todos os controles do Flex com exemplo de usos e efeitos</strong>. &#8211; <a target="_blank" href="http://examples.adobe.com/flex3/componentexplorer/explorer.html">http://examples.adobe.com/flex3/componentexplorer/explorer.html</a></li>
<li><strong>Integração de Flex com .net</strong> (esse link merece um destaque, depois de muito procurar sobre a integração de uma aplicação em Flex com uma .net, achei esse link que tem um ótimo exemplo, nos artigos que eu escrever aqui com tutoriais de Flex + .net,  criarei baseado na integração que é ensina nesse artigo). &#8211; <a target="_blank" href="http://www.oficinadanet.com.br/artigo/2218/integracao_adobe_flex__.net">http://www.oficinadanet.com.br/artigo/2218/integracao_adobe_flex__.net</a></li>
</ul>
<p>Twitter:</p>
<ul>
<li>
<strong>AS3hash</strong> (Agregador de links para Flex, Flash, as3 e afins) &#8211; <a target="_blank" href="http://twitter.com/AS3hash">http://twitter.com/AS3hash</a></li>
<li>
<strong>workflowFlash</strong> (Agregador de links para Flex, Flash, as3 e afins) &#8211; <a target="_blank" href="http://twitter.com/workflowFlash">http://twitter.com/workflowFlash</a></li>
</ul>
<p>Além de vários conteúdos que eu achei na internet, estou lendo um livro que se chama: Adobe Flex 3 Treinamento Direto da Fonte (<a target="_blank" href="http://www.livrariasaraiva.com.br/produto/2657203/adobe-flex-3-treinamento-direto-da-fonte/?ID=BB49E13C7DA03150E30210590">http://www.livrariasaraiva.com.br/produto/2657203/adobe-flex-3-treinamento-direto-da-fonte/?ID=BB49E13C7DA03150E30210590</a>), é um livro muito bom, caso você realmente esteja interessando em aprender Flex, eu recomendo esse livro.</p>
<p>Bom, é isso, até a próxima!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ricardomvargas.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ricardomvargas.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ricardomvargas.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ricardomvargas.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ricardomvargas.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ricardomvargas.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ricardomvargas.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ricardomvargas.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ricardomvargas.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ricardomvargas.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ricardomvargas.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ricardomvargas.wordpress.com/80/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ricardomvargas.wordpress.com/80/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ricardomvargas.wordpress.com/80/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardomvargas.wordpress.com&amp;blog=11402275&amp;post=80&amp;subd=ricardomvargas&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ricardomvargas.wordpress.com/2010/03/21/flex-e-net-%e2%80%93-dicas-links-e-tutoriais/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/509df361c96e09953945881057e47b5c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tutorial dotNet</media:title>
		</media:content>
	</item>
		<item>
		<title>Múltiplos uploads com asp.net + jquery</title>
		<link>http://ricardomvargas.wordpress.com/2010/01/15/multiplos-uploads-com-asp-net-jquery/</link>
		<comments>http://ricardomvargas.wordpress.com/2010/01/15/multiplos-uploads-com-asp-net-jquery/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 12:27:21 +0000</pubDate>
		<dc:creator>ricardomvargas</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[multiplos uploads]]></category>

		<guid isPermaLink="false">http://ricardomvargas.wordpress.com/?p=69</guid>
		<description><![CDATA[Pesquisando a respeito de como fazer múltiplos uploads em asp.net, me deparei com o um excelente tutorial em inglês: Upload Multiple Files in ASP.NET using jQuery, resolvi traduzi-lo e dar uma customizado em alguns detalhes. Criei um web site no VS 2008 framework 2.0. No link do tutorial em inglês encontra-se os links necessários dos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardomvargas.wordpress.com&amp;blog=11402275&amp;post=69&amp;subd=ricardomvargas&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Pesquisando a respeito de como fazer múltiplos uploads em asp.net, me deparei com o um excelente tutorial em inglês: <a title="Upload" href="http://www.dotnetcurry.com/ShowArticle.aspx?ID=317&amp;AspxAutoDetectCookieSupport=1" target="_blank">Upload Multiple Files in ASP.NET using jQuery</a>, resolvi traduzi-lo e dar uma customizado em alguns detalhes.</p>
<p>Criei um web site no VS 2008 framework 2.0. No link do tutorial em inglês encontra-se os links necessários dos scripts e projetos, porem, basta clicar <a title="Download" href="http://www.4shared.com/file/197593736/911f2da9/upload-multiplo-aspnet-jquery.html" target="_blank">aqui</a> e efetuar o download do meu projeto de exemplo que contem todos os arquivos necessários.</p>
<p>1 – Criei um novo web site: “File &gt; New &gt; Web Site &#8230;”, agora crie as seguintes pastas: imagens, img, js. Dentro da pasta js crie a pasta: multiple_upload (essa estrutura é opcional), deve ficar igual a imagem abaixo.</p>
<p><a href="http://ricardomvargas.files.wordpress.com/2010/01/estrutura.jpg"><img class="alignnone size-medium wp-image-70" title="estrutura" src="http://ricardomvargas.files.wordpress.com/2010/01/estrutura.jpg?w=300&#038;h=189" alt="" width="300" height="189" /></a></p>
<p>2 – Na pasta img adicione a imagem “deletar.gif”, na pasta multiple_upload adicione os arquivos “jquery-1.3.2.js” e “jquery.MultiFile.js”. Esses arquivos podem ser encontrados no projeto que disponibilizei para download.</p>
<p>3 – No arquivo Default.aspx adicione o código(explicarei sobre o código logo abaixo do mesmo):</p>
<p><pre class="brush: java;">
&lt;head runat=&quot;server&quot;&gt;

    &lt;title&gt;Upload múltiplo | asp.net + jquery&lt;/title&gt;

    &lt;script src=&quot;js/multiple_upload/jquery-1.3.2.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
    &lt;script src=&quot;js/multiple_upload/jquery.MultiFile.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;

    &lt;style type=&quot;text/css&quot;&gt;
        .divUpload{height:150px; width:400px; padding:5px; overflow:auto; border:solid 1px #333333}
        .mensagem{margin:0px; height:22px}
    &lt;/style&gt;

&lt;/head&gt;
&lt;body&gt;
    &lt;form id=&quot;form1&quot; runat=&quot;server&quot;&gt;

        &lt;div class=&quot;divUpload&quot;&gt;
            &lt;asp:FileUpload ID=&quot;fileUp&quot; runat=&quot;server&quot; class=&quot;multi&quot; /&gt;
        &lt;/div&gt;

        &lt;p class=&quot;mensagem&quot;&gt;
            &lt;asp:Label ID=&quot;lblMensagem&quot; runat=&quot;server&quot; Visible=&quot;false&quot;&gt;&lt;/asp:Label&gt;
        &lt;/p&gt;

        &lt;asp:Button ID=&quot;btnUpload&quot; runat=&quot;server&quot; Text=&quot;Upload todos&quot; onclick=&quot;btnUpload_Click&quot; /&gt;

    &lt;/form&gt;
&lt;/body&gt;
</pre></p>
<p>Não há nada d+ nesse código, no head colocamos as referencias para os scripts que estão na pasta “js/multiple_upload”, logo abaixo temos um pequeno css para o bloco de upload, dentro do body temos um FileUpload, um label para dizer ao usuário quantos arquivos foram adicionados e um botão para enviar os arquivos.</p>
<p>4 – Agora no arquivo Default.aspx.cs, vamos adicionar o evento click do botão e colocar dentro dele o código para o upload dos arquivos, deve ficar algo parecido com isso:</p>
<p><pre class="brush: java;">
    protected void btnUpload_Click(object sender, EventArgs e)
    {
        int cont = 0;
        try
        {
            HttpFileCollection hfc = Request.Files;
            for (int i = 0; i &lt; hfc.Count; i++)
            {
                HttpPostedFile hpf = hfc[i];
                if (hpf.ContentLength &gt; 0)
                {
                    hpf.SaveAs(Server.MapPath(&quot;~/imagens/&quot; + hpf.FileName));
                }
                cont++;
            }

            if (cont &gt; 0)
            {
                lblMensagem.Visible = true;
                lblMensagem.Text = cont.ToString() + &quot; arquivos adicionados.&quot;;
            }
        }
        catch (Exception ex)
        {
            lblMensagem.Visible = true;
            lblMensagem.Text = &quot;Ops! Algo deu errado!&quot;;
        }
    }
 </pre></p>
<p>O sistema de upload funciona da seguinte maneira, toda a vez que se busca um arquivo pelo fileupload, o javascript adiciona outro controle fileupload na tela em cima do que já existe, então temos a impressão de sempre usar o mesmo fileupload. Então usamos a classe HttpFileCollection que disponibiliza acesso, como uma coleção de ficheiros, a todos os ficheiros que são transferidos. Caso a página permita a transferência de mais de um ficheiro (recorrendo a vários controles fileupload), então esta coleção pode ser percorrida para obter informação sobre cada um dos ficheiros. Já a classe HttpFileCollection Fornece Acesso a arquivos individuais que foram carregados por um cliente. Então criei um loop para percorrer a coleção de ficheiros e adicioná-los um a um na pasta “imagens”. Usamos um contador para mostrar o resultado para o usuário.</p>
<p>5 – Muito bem, o sistema já está pronto, agora vamos customizar um pouco as saídas dos scripts (traduzir as mensagens de inglês para português e melhorar um pouco a exibição dos arquivos adicionados). No arquivo jquery.MultiFile.js, vá até a linha de número 295, e deixe o código assim:</p>
<p><pre class="brush: jscript;">
//CÓDIGO NOVO
         r = $('&lt;div style=&quot;font-size: 13px; padding: 2px; text-align: left; border-bottom: solid 1px #cccccc&quot; class=&quot;MultiFile-label&quot;&gt;&lt;/div&gt;'),
         v = String(slave.value || ''/*.attr('value)*/),
         a = $('&lt;span class=&quot;MultiFile-title&quot; title=&quot;'+MultiFile.STRING.selected.replace('$file', v)+'&quot;&gt;'+MultiFile.STRING.file.replace('$file', v.match(/[^\/\\]+$/gi)[0])+'&lt;/span&gt;'),
         b = $('&lt;span&gt; - &lt;/span&gt;&lt;a class=&quot;MultiFile-remove&quot; title=&quot;Remover&quot; href=&quot;#'+MultiFile.wrapID+'&quot;&gt;&lt;img alt=&quot;Remover&quot; style=&quot;border: 0px; vertical-align: bottom&quot; width=&quot;15&quot; height=&quot;15&quot; src=&quot;img/deletar.gif&quot;&gt;'+/*Remover+MultiFile.STRING.remove+'*/'&lt;/a&gt;');

         //CÓDIGO ANTIGO
         //r = $('&lt;div class=&quot;MultiFile-label&quot;&gt;&lt;/div&gt;'),
         //v = String(slave.value || ''/*.attr('value)*/),
         //a = $('&lt;span class=&quot;MultiFile-title&quot; title=&quot;'+MultiFile.STRING.selected.replace('$file', v)+'&quot;&gt;'+MultiFile.STRING.file.replace('$file', v.match(/[^\/\\]+$/gi)[0])+'&lt;/span&gt;'),
         //b = $('&lt;a class=&quot;MultiFile-remove&quot; href=&quot;#'+MultiFile.wrapID+'&quot;&gt;'+MultiFile.STRING.remove+'&lt;/a&gt;');

        // Insert label
        MultiFile.list.append(
         //CÓDIGO NOVO
         r.append(a, ' ', b)
</pre></p>
<p>Agora vá na linha 497:</p>
<p><pre class="brush: jscript;">
//CÓDIGO NOVO
		STRING: {
			remove:'x',
			denied:'You cannot select a $ext file.\nTry again...',
			file:'$file',
			selected:'Arquivo selecinado: $file',//File selected:
			duplicate:'Esse arquivo ja foi selecionado.\n$file'//This file has already been selected:
		},

		//CÓDIGO ANTIGO
		//STRING: {
			//remove:'x',
			//denied:'You cannot select a $ext file.\nTry again...',
			//file:'$file',
			//selected:'File selected: $file',
			//duplicate:'This file has already been selected:\n$file'
		//},
</pre></p>
<p>Observe que eu comentei os códigos originais e fiz umas modificações no html gerado pelo javascript, comente a modificação e depois tire o comentário do código antigo para ver a diferença.</p>
<p>Bom, é isso, até o a próxima!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ricardomvargas.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ricardomvargas.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ricardomvargas.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ricardomvargas.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ricardomvargas.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ricardomvargas.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ricardomvargas.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ricardomvargas.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ricardomvargas.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ricardomvargas.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ricardomvargas.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ricardomvargas.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ricardomvargas.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ricardomvargas.wordpress.com/69/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardomvargas.wordpress.com&amp;blog=11402275&amp;post=69&amp;subd=ricardomvargas&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ricardomvargas.wordpress.com/2010/01/15/multiplos-uploads-com-asp-net-jquery/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/509df361c96e09953945881057e47b5c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tutorial dotNet</media:title>
		</media:content>

		<media:content url="http://ricardomvargas.files.wordpress.com/2010/01/estrutura.jpg?w=300" medium="image">
			<media:title type="html">estrutura</media:title>
		</media:content>
	</item>
		<item>
		<title>Paginar um DataSource em asp.net (Paginar um Repeater em asp.net)</title>
		<link>http://ricardomvargas.wordpress.com/2010/01/13/paginar-um-datasource-em-asp-net-paginar-um-repeater-em-asp-net-2/</link>
		<comments>http://ricardomvargas.wordpress.com/2010/01/13/paginar-um-datasource-em-asp-net-paginar-um-repeater-em-asp-net-2/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 13:04:10 +0000</pubDate>
		<dc:creator>ricardomvargas</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>

		<guid isPermaLink="false">http://ricardomvargas.wordpress.com/?p=38</guid>
		<description><![CDATA[Existem controles que já vem com uma paginação basta apenas você habilita-la ou não, como o GridView por exemplo. Mas às vezes temos a necessidade de apenas exibir informações de um banco sem que isso afeta o layout. Por exemplo, existe um site de notícias, e esse site foi estruturado em css, o estruturador preparou [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardomvargas.wordpress.com&amp;blog=11402275&amp;post=38&amp;subd=ricardomvargas&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Existem controles que já vem com uma paginação basta apenas você habilita-la ou não, como o GridView por exemplo. Mas às vezes temos a necessidade de apenas exibir informações de um banco sem que isso afeta o layout. Por exemplo, existe um site de notícias, e esse site foi estruturado em css, o estruturador preparou a lista de notícias do site usando apenas “ul” e “li” e se você optar por usar um GridView para exibir essas notícias ira gerar um serie de erros de layout, pois o GridView gera uma tabela para exibir os dados. Para esse tipo de caso seria interessante usar o Repeater, pois o mesmo não gera nenhuma estrutura de HTML, ele apenas exibi as informações do banco e repete qualquer HTML que estiver dentro de seu “ItemTemplate”. Ou seja, você tem controle total sobre o Repeater podendo modificar sua estrutura por completo, porém, ao contrário do GridView, ele não possui uma paginação “embutida” que podemos ou não habilitar por isso é preciso criar uma paginação “Não mão”.</p>
<p>Para isso, usa-se o “PagedDataSource”, vamos ver como ele funciona:</p>
<p>Obs: Esse tutorial funciona perfeitamente tanto no framework 2.0 quanto no 3.5, no caso criei a aplicação usando o framework 2.0.</p>
<p>1 – Abra o VS 2008, “File &gt; New &gt; Web Site…”.</p>
<p>2 – Crie um arquivo novo chamado “noticias.aspx”.</p>
<p>3 – Criei um banco de dados no Access para este tutorial, faça o donwload do projeto no final do tutorial para pegar o banco. Assim que estiver com o banco, coloque-o dentro da pasta App_Data. Caso não tenha essa pasta em seu diretório, clique com o botão direito em cima da solução e “Add Asp.Net Folder &gt; App_Data” ou simplesmente adicione uma pasta com esse nome no diretório da solução.</p>
<p>4 – Vamos adicionar uma string de conexão para o banco, abra o web.config e adicione o código como na imagem abaixo:</p>
<p><pre class="brush: xml;">
&lt;appSettings/&gt;
&lt;connectionStrings&gt;
&lt;add name=&quot;DB&quot; connectionString=&quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|/TESTE.mdb;&quot; providerName=&quot;System.Data.OleDb&quot;&gt;
&lt;/add&gt;
&lt;/connectionStrings&gt;
</pre></p>
<p>5 – Na página Defaul.aspx coloque um link para a página de notícias, e na url do link coloque um querystring como na imagem abaixo (usaremos uma querystring para armazenar o valor da página):</p>
<p><pre class="brush: xml;">
&lt;body&gt;
&lt;form id=&quot;form1&quot; runat=&quot;server&quot;&gt;
&lt;a href=&quot;noticias.aspx?pagina=1&quot;&gt;Notícias&lt;/a&gt;
&lt;/form&gt;
&lt;/body&gt;
</pre></p>
<p>6 – Na página noticias.aspx usaremos uma estrutura de lista (“ul”,”li”) para exibir as notícias. Vai funcionar assim: Cada “li” conterá uma notícia, então usaremos o Repeater para buscar a notícia do banco e colocá-la dentro da “li”, o Repeater então repetirá esse processo para todas as notícias que forem selecionadas do banco. A paginação acontecerá através dos controles HyperLink que serão adicionados no final da página abaixo da lista de notícias. Então, na tela de notícias, monte a seguinte estrutura (importante: Não é possível editar o ItemTemplate do Repeater no modo “Design” do Visual Studio, apenas no modo “Source”):</p>
<p><pre class="brush: xml;">
&lt;ul&gt;

&lt;asp:Repeater ID=&quot;rprNoticias&quot; runat=&quot;server&quot;&gt;
&lt;ItemTemplate&gt;

&lt;li&gt;

&lt;b&gt;&lt;%#Eval(&quot;TITULO&quot;)%&gt;&lt;/b&gt;
&lt;p&gt;&lt;%#Eval(&quot;NOTICIA&quot;)%&gt;&lt;/p&gt;

&lt;/li&gt;

&lt;/ItemTemplate&gt;
&lt;/asp:Repeater&gt;
&lt;/ul&gt;

&lt;div&gt;

&lt;asp:HyperLink ID=&quot;linkAnterior&quot; runat=&quot;server&quot;&gt;&lt;&lt; Anterior&lt;/asp:HyperLink&gt;&amp;nbsp;
&lt;asp:HyperLink ID=&quot;linkProximo&quot; runat=&quot;server&quot;&gt;Proximo &gt;&gt;&lt;/asp:HyperLink&gt;

&lt;/div&gt;
</pre></p>
<p>7 – Agora vamos para a página noticias.aspx.cs, dentro do método “Page_Load” vamos primeiro verificar se há alguma querystring, fazendo assim:</p>
<p><pre class="brush: java;">
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString[&quot;pagina&quot;] != null)
 {
 }
}
</pre></p>
<p>8 – Para manipular um banco do tipo “Access” precisamos adicionar a seguinte referencia: “using System.Data.OleDb;” , e para usarmos o DataSet precisamos adicionar “using System.Data;”.</p>
<p>9 – Todos os códigos demonstrados abaixo devem estar dentro do comando “if” mostrado acima na parte 7. Agora vamos estabelecer a conexão com o banco e fazer o “select” das notícias:</p>
<p><pre class="brush: java;">
OleDbConnection Connection = new OleDbConnection(ConfigurationManager.ConnectionStrings[&quot;DB&quot;].ConnectionString);
OleDbDataAdapter Adapter = new OleDbDataAdapter(&quot;SELECT * FROM NOTICIAS&quot;, Connection);

DataSet Ds = new DataSet();
Adapter.Fill(Ds, &quot;NOTICIAS&quot;);
</pre></p>
<p>O construtor &#8220;OleDbConnection()&#8221; espera como parâmetro a string de conexão do banco. Lembra que colocamos a string de conexão no web.config? O código que está como parâmetro dentro do construtor &#8220;OleDbConnection()&#8221; retorna a string de conexão que está no web.config. Para utilizarmos o “ConfigurationManager” é preciso adicionar a referencia: “Using System.Configuration;”.</p>
<p>10 – Agora digite o código abaixo:</p>
<p><pre class="brush: java;">
int paginaAtual = int.Parse(Request.QueryString[&quot;pagina&quot;]);
PagedDataSource Pgds = new PagedDataSource();
Pgds.AllowPaging = true;
Pgds.CurrentPageIndex = (paginaAtual - 1);
Pgds.PageSize = 2;
Pgds.DataSource = Ds.Tables[&quot;NOTICIAS&quot;].DefaultView;
rprNoticias.DataSource = Pgds;
rprNoticias.DataBind();
</pre></p>
<p>IMPORTANTE: O índice das páginas de um objeto “PagedDataSource” é semelhante a um índice de um array em C#, ou seja, a contagem começa do “0” (zero) porem na querystring desse exemplo tratamos como se a contagem começasse do “1”(um). Então para setarmos a página atual no “DataSouce” pegamos a querystring e subtraímos 1.</p>
<p>A variável “paginaAtual” pega a página atual que está em uma querystring. Logo abaixo, criamos o objeto “PagedDataSource” e configuramos o mesmo. Setamos o “AllowPaging” como true para que haja a paginação, “CurrentPageIndex” é onde pegamos e/ou setemos a página atual que é exibida, “PageSize” significa a quantidade de itens que serão exibidos por página, no banco de dados em anexo temos 6 notícias cadastradas, como optamos por exibir 2 por página, logo podemos supor que teremos três páginas cada uma exibindo duas notícias. Em seguida setamos o “DataSet” como sendo o “DataSource” do Repeater, em seguida fazemos um “DataBind” do Repeater para carregar as informações.</p>
<p>11 –Já temos nossa paginação pronta! Agora vamos criar uma pequena navegação com os dois HyperLinks que colocamos no final da página.</p>
<p><pre class="brush: java;">
if (paginaAtual &gt; 1)
{

linkAnterior.NavigateUrl = &quot;noticias.aspx?pagina=&quot; + (paginaAtual - 1).ToString();

}
else
{

linkAnterior.NavigateUrl = &quot;noticias.aspx?pagina=1&quot;;

}
if (Pgds.IsLastPage)
{

linkProximo.NavigateUrl = &quot;noticias.aspx?pagina=&quot; + (Pgds.PageCount).ToString();

}
else
{

linkProximo.NavigateUrl = &quot;noticias.aspx?pagina=&quot; + (paginaAtual + 1).ToString();

}
</pre></p>
<p>O HyperLink: “linkAnterior” – Primeiro verificamos se já não estamos na primeira página, ou seja se a querystring “pagina” for menor ou igual a 1, significa que estamos na primeira página, então simplesmente desabilitamos o link, caso seja maior setamos o “NavigateUrl” com: (valor atual – 1).</p>
<p>HyperLink: “linkProximo” – Usamos o método “IsLastPage” do objeto “Pgds” que retorna true caso a página exibido seja a ultima. Sendo assim basta setarmos o “NavigateUrl” do linkProximo com sendo o total de páginas (Pgds.PageCount) a serem exibidos pelo DataSource, caso contrario (paginaAtual + 1).</p>
<p>Baixe <a href="http://www.4shared.com/file/195921205/1874c5f3/tutoriais-13-10-2010-paginar-d.html">aqui</a> o projeto, e até o próximo artigo!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ricardomvargas.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ricardomvargas.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ricardomvargas.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ricardomvargas.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ricardomvargas.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ricardomvargas.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ricardomvargas.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ricardomvargas.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ricardomvargas.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ricardomvargas.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ricardomvargas.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ricardomvargas.wordpress.com/38/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ricardomvargas.wordpress.com/38/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ricardomvargas.wordpress.com/38/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardomvargas.wordpress.com&amp;blog=11402275&amp;post=38&amp;subd=ricardomvargas&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ricardomvargas.wordpress.com/2010/01/13/paginar-um-datasource-em-asp-net-paginar-um-repeater-em-asp-net-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/509df361c96e09953945881057e47b5c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tutorial dotNet</media:title>
		</media:content>
	</item>
		<item>
		<title>Reescrever url em asp.net (url amigável em asp.net)</title>
		<link>http://ricardomvargas.wordpress.com/2010/01/13/17/</link>
		<comments>http://ricardomvargas.wordpress.com/2010/01/13/17/#comments</comments>
		<pubDate>Wed, 13 Jan 2010 11:47:27 +0000</pubDate>
		<dc:creator>ricardomvargas</dc:creator>
				<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[reescrever url]]></category>

		<guid isPermaLink="false">http://ricardomvargas.wordpress.com/?p=17</guid>
		<description><![CDATA[Explicarei aqui uma maneira bem simples de se reescrever uma url também conhecidas como “Url’s amigáveis”. Existem inúmeras vantagens para se reescrever a url uma delas é que os buscadores, como o google, tem dificuldade de entender querystrings como “?” ou “&#38;”, outra seria a legibilidade para o usuário que em vez de ter que [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardomvargas.wordpress.com&amp;blog=11402275&amp;post=17&amp;subd=ricardomvargas&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Explicarei aqui uma maneira bem simples de se reescrever uma url também conhecidas como “Url’s amigáveis”. Existem inúmeras vantagens para se reescrever a url uma delas é que os buscadores, como o google, tem dificuldade de entender querystrings como “?” ou “&amp;”, outra seria a legibilidade para o usuário que em vez de ter que memorizar alguma coisa como: “noticias.aspx?id=50&amp;c=esporte&amp;x=10…” vai lidar com algo como: “noticias/50/esporte/nome_da_noticia.aspx”.</p>
<p>1 – Estarei usando o Visual Studio 2008 porém a aplicação funcionará perfeitamente no VS 2005 e no framework 2.0. Abra o VS 2008, vá em File &gt; New &gt; Web Site. Escolha a linguagem C# dê um nome qualquer ao projeto e clique em “Ok”.</p>
<p>2 – Agora clique com o botão em cima do projeto e clique em “Add new item…”, escolha o tipo “Web Form” e de o nome de “produtos.aspx”.</p>
<p>3 – Abra o arquivo “Deafult.aspx” que é criado junto com o projeto e coloque o código abaixo nele:</p>
<p><pre class="brush: xml;">
&lt;a href=&quot;produtos/camisas.aspx&quot;&gt;Camisas&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;produtos/calcados.aspx&quot;&gt;Calçados&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;produtos/bermudas.aspx&quot;&gt;Bermudas&lt;/a&gt;&lt;br /&gt;
</pre></p>
<p>4 – Agora abra o arquivo “produtos.aspx” crie um “label” e coloque o código abaixo no “produtos.aspx.cs”:</p>
<p>produtos.aspx.cs</p>
<p><pre class="brush: java;">
protected void Page_Load(object sender, EventArgs e)
 {
 if (Request.QueryString[&quot;categoria&quot;] != null)
 {
 lblCategoria.Text = Request.QueryString[&quot;categoria&quot;];
 }
}
</pre></p>
<p>produtos.aspx</p>
<p><pre class="brush: xml;">
&lt;asp:Label ID=&quot;lblCategoria&quot; runat=&quot;server&quot; Text=&quot;Label&quot;&gt;&lt;/asp:Label&gt;
</pre></p>
<p>5 – Agora clique novamente com o botão direito em cima do projeto e escolha a opção “Add new item…”, adicione um arquivo do tipo “Global Application Class”, deixe o nome como “Global.asax” mesmo, esse é um arquivo de configurações e pode apenas ter um por projeto. Abra o mesmo e coloque esse código dentro:</p>
<p><pre class="brush: java;">
void Application_BeginRequest(object Sender, EventArgs e)
 {
 string originalPath = Request.Url.ToString();

 if (originalPath.Contains(&quot;produtos/camisas.aspx&quot;))
 {
 Context.RewritePath(&quot;~/produtos.aspx?categoria=camisas&quot;);
 }
 else if (originalPath.Contains(&quot;produtos/calcados.aspx&quot;))
 {
 Context.RewritePath(&quot;~/produtos.aspx?categoria=calcados&quot;);
 }
 else if (originalPath.Contains(&quot;produtos/bermudas.aspx&quot;))
 {
 Context.RewritePath(&quot;~/produtos.aspx?categoria=bermudas&quot;);
 }
 }
</pre></p>
<p>6 – O Evento “Application_BeginRequest” é o primeiro evento a ser executado em sua aplicação, se você colocar um botão por exemplo e clicar nele, antes de qualquer coisa sua aplicação vai passar por esse evento e depois pelos outros eventos, é nele que colocamos a lógica para reescrever a url.</p>
<p>Clique <a class="teste" title="download do projeto" href="http://www.4shared.com/file/195921209/11c289d8/tutoriais-13-10-2010-reescreve.html" target="_blank">aqui</a> para baixar o projeto, até a próxima!</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ricardomvargas.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/ricardomvargas.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ricardomvargas.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/ricardomvargas.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ricardomvargas.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/ricardomvargas.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ricardomvargas.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/ricardomvargas.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ricardomvargas.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/ricardomvargas.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ricardomvargas.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/ricardomvargas.wordpress.com/17/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ricardomvargas.wordpress.com/17/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/ricardomvargas.wordpress.com/17/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=ricardomvargas.wordpress.com&amp;blog=11402275&amp;post=17&amp;subd=ricardomvargas&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://ricardomvargas.wordpress.com/2010/01/13/17/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/509df361c96e09953945881057e47b5c?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">Tutorial dotNet</media:title>
		</media:content>
	</item>
	</channel>
</rss>
