<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://geeks.ms/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Chalalo Land</title><link>http://geeks.ms/blogs/gperez/default.aspx</link><description>Tecnologías ASP.NET y un poco Más</description><dc:language /><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><item><title>[Tips] &amp; en Key de Web.Config</title><link>http://geeks.ms/blogs/gperez/archive/2010/02/09/tips-amp-en-key-de-web-config.aspx</link><pubDate>Tue, 09 Feb 2010 02:12:08 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:166961</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=166961</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=166961</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2010/02/09/tips-amp-en-key-de-web-config.aspx#comments</comments><description>&lt;p&gt;En la seguidilla de tips para los que se van iniciando y de repente tienen se les presenta un problema, el tener un símbolo en el value de un key del appSettings. Ya que si tienes:   &lt;br /&gt;    &lt;br /&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;"&gt;add&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;"&gt;key&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;=&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;miclave&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;uno&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;amp;dos&amp;amp;tres&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;       &lt;br /&gt;        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;Es incorrecto y arroja un error en tiempo de compilación, entonces a lo que hay que reemplazar es:    &lt;br /&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;"&gt;add&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt; &lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;"&gt;key&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;=&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&amp;quot;&lt;span style="color:blue;"&gt;miclave&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt; &lt;/span&gt;&lt;span style="color:red;"&gt;value&lt;/span&gt;&lt;span style="color:blue;"&gt;=&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;uno&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;amp;amp;&lt;/span&gt;&lt;span style="color:blue;"&gt;dos&lt;/span&gt;&lt;span style="color:red;"&gt;&amp;amp;amp;&lt;/span&gt;&lt;span style="color:blue;"&gt;tres&lt;/span&gt;&amp;quot;&lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Es decir, &amp;amp; por &amp;amp;amp; &amp;lt;- Fácil verdad?&lt;/strong&gt;    &lt;br /&gt;Bueno, espero que esto les pueda ser de utilidad :)    &lt;br /&gt;Saludos,    &lt;br /&gt;Gonzalo&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=166961" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Tips/default.aspx">Tips</category></item><item><title>[Tips] Como leer el HTML de una Pagina desde ASP.NET</title><link>http://geeks.ms/blogs/gperez/archive/2010/02/09/tips-como-leer-el-html-de-una-pagina-desde-asp-net.aspx</link><pubDate>Tue, 09 Feb 2010 02:05:42 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:166959</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=166959</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=166959</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2010/02/09/tips-como-leer-el-html-de-una-pagina-desde-asp-net.aspx#comments</comments><description>&lt;table border="0" cellspacing="0" cellpadding="2" width="534"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="137"&gt;&lt;img src="http://www.profissionaisti.com.br/wp-content/uploads/2009/04/programador_feliz.jpg" width="132" height="135" alt="" /&gt;&lt;/td&gt;        &lt;td valign="top" width="395"&gt;         &lt;p align="justify"&gt;Pregunta repetida, por lo tanto amerita post, acá te dejo el código y la explicación.           &lt;br /&gt;            &lt;br /&gt;Para esto vamos a utilizar la clase &lt;a href="http://msdn.microsoft.com/en-us/library/system.net.webclient.aspx" target="_blank"&gt;WebClient&lt;/a&gt; de System.NET que nos provee métodos para enviar y recibir datos desde un recurso identificado mediante el URI. Luego a descargar los datos y dejarlos en un arreglo de Bytes para luego obtener el texto HTML encodeado. Por último este código HTML lo asignamos aun TextBox Multiline para ver el resultado. &lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt; El código necesario es simplemente:  &lt;p align="justify"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; MyWebClient &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;New&lt;/span&gt; WebClient      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; ArregloBytes() &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Byte       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;ArregloBytes = MyWebClient.DownloadData(&lt;span style="color:#a31515;"&gt;&lt;a href="http://www.bing.com/"&gt;http://www.bing.com/&lt;/a&gt;&lt;/span&gt;)      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; oUTF8 &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;New&lt;/span&gt; UTF8Encoding      &lt;br /&gt;&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;resultado.Text = oUTF8.GetString(ArregloBytes)&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_38BA0041.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_5356768D.png" width="534" height="382" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Posteriormente puedes buscar cadenas de texto, en el caso que necesites “replicar” algunas cosillas, ejejeje.&lt;/p&gt;  &lt;p&gt;Saludos!   &lt;br /&gt;Gonzalo&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=166959" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Tips/default.aspx">Tips</category></item><item><title>[Tips] Multiples DataKeyName en una Grilla (o cuando la tabla tiene una clave compuesta)</title><link>http://geeks.ms/blogs/gperez/archive/2010/02/05/tips-multiples-datakeyname-en-una-grilla-o-cuando-la-tabla-tiene-una-clave-compuesta.aspx</link><pubDate>Fri, 05 Feb 2010 12:09:06 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:166723</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=166723</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=166723</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2010/02/05/tips-multiples-datakeyname-en-una-grilla-o-cuando-la-tabla-tiene-una-clave-compuesta.aspx#comments</comments><description>&lt;p align="justify"&gt;Hola que tal?, ya que me han formulado esta pregunta varias veces, quiero dejarla como tips, no es que no me gusta que me pregunten, pero de este modo, la info está accesible más rápidamente.&lt;/p&gt;  &lt;p align="justify"&gt;El gridview que conocemos , es un control que es muy potente, obviamente podemos potenciarlo más y algunas empresas como Telerik tienen su propia implementación mucho más potente. Una de las características más importantes es su facilidad de uso y de configuración en escenarios “Cero Código”&amp;#160; para agregar comportamientos de Eliminacion, Modificación&amp;#160; y selección. Esto es bastante sencillo cuando se tiene que la grilla está mostrando datos de una tabla que tiene una clave principal que no es compuesta, como por ejemplo un ID Correlativo, pero algunas veces, tenemos que la grilla tiene una clave principal compuesta, este escenario es totalmente soportado por nuestra grilla.&lt;/p&gt;  &lt;p align="justify"&gt;Una de las propiedades de la grilla, necesario para poder agregar declarativamente los comportamientos es el DataKeyName, que representa el campo clave de la grilla. Ahora bien, si tenemos una clave compuesta el DataKeyName sería algo así:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;DataKeyNames&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;=&amp;quot;ID1,ID2&amp;quot;&lt;/span&gt;&lt;span style="mso-ansi-language:en-us;" lang="EN-US"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Hasta el momento todo bien, ahora, si tenemos otro control Gridview, para un maestro detalle, en el que tenemos que la selección de la primera grilla, nos muestra los detalles para la segunda grilla, (voy a utilizar un SqlDataSource), vamos a tener el SelectCommand:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;SelectCommand&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;=&amp;quot;SELECT IDDET, GLOSA_DET FROM DETALLE WHERE ID1_DET = @ID1 AND ID2_DET=@ID2&amp;quot;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;y la los parámetros: (acá está lo distinto, ya que el asistente no nos permite hacer esto, tenemos que hacerlo a mano)&lt;/p&gt;  &lt;p style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;SelectParameters&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ControlParameter&lt;/span&gt; &lt;span style="color:red;"&gt;ControlID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;GridView1&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;ID1&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;PropertyName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;SelectedDataKey.Values[ID1]&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;Type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Int32&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;ControlParameter&lt;/span&gt; &lt;span style="color:red;"&gt;ControlID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;GridView1&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;ID2&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;PropertyName&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;SelectedDataKey.Values[ID2]&amp;quot;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:red;"&gt;Type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;Int32&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;"&gt;SelectParameters&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="mso-ansi-language:en-us;" lang="EN-US"&gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Como ves, se extrae del SelectDataKey, los dos parámetros para poder hacer el select.&lt;/p&gt;  &lt;p align="justify"&gt;Ahora bien, si lo que necesitas es , por medio de código programático, obtener estos valores entonces tenemos:&lt;/p&gt;  &lt;p align="left"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="color:blue;"&gt;Protected&lt;/span&gt; &lt;span style="color:blue;"&gt;Sub&lt;/span&gt; GridView1_SelectedIndexChanged(&lt;span style="color:blue;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Object&lt;/span&gt;, &lt;span style="color:blue;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:blue;"&gt;As&lt;/span&gt; System.EventArgs) &lt;span style="color:blue;"&gt;Handles&lt;/span&gt; GridView1.SelectedIndexChanged      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;SqlDataSource2.SelectParameters(0).DefaultValue = GridView1.DataKeys(&lt;span style="color:blue;"&gt;Me&lt;/span&gt;.GridView1.SelectedRow.RowIndex).Values(0)      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;SqlDataSource2.SelectParameters(1).DefaultValue = GridView1.DataKeys(&lt;span style="color:blue;"&gt;Me&lt;/span&gt;.GridView1.SelectedRow.RowIndex).Values(1)      &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;End&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt; &lt;span style="color:blue;"&gt;Sub&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" align="justify"&gt;En donde SqlDataSource2 es el DS de la grilla detalle, y GridView1 es la grilla con los datos del Maestro.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Como vez, es bastante sencillo, espero que te sirva el Tip :)&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Saludos,   &lt;br /&gt;Gonzalo&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=166723" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/.NET/default.aspx">.NET</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Tips/default.aspx">Tips</category></item><item><title>Probando Microsoft SEO ToolKit- Free! :)</title><link>http://geeks.ms/blogs/gperez/archive/2010/01/26/probando-microsoft-seo-toolkit-free.aspx</link><pubDate>Tue, 26 Jan 2010 15:30:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:165969</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=165969</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=165969</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2010/01/26/probando-microsoft-seo-toolkit-free.aspx#comments</comments><description>&lt;p align="justify"&gt;Holas,Ya hace un tiempo que el posicionamiento web ha tomado un papel muy importante , la optimizaci&amp;oacute;n de nuestras paginas para que los SEO puedan indexar m&amp;aacute;s y de mejor en manera nuestro sitio web, de manera que el usuario al momento de buscar en Google, Bing, por ejemplo. &lt;/p&gt;
&lt;p align="justify"&gt;Microsoft SEO Tookkit es una herramienta gratis, que la puedes descargar mediante WPI, se instala en el IIS y puedes hacer los an&amp;aacute;lisis de tus sitios web, puedes obtener reportes de rendimiento y del estado de optimizaci&amp;oacute;n de tu sitio en relaci&amp;oacute;n a los SEO&lt;/p&gt;
&lt;p&gt;&lt;b&gt;La idea principal de Microsoft SEO:&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Aumentar el tr&amp;aacute;fico del sitio web y de Ingresos&lt;/b&gt;     &lt;br /&gt;Analizar tu sitio web y encontrar maneras de aumentar su n&amp;uacute;mero de visitas. Utilizar las recomendaciones de SEO para mejorar el tr&amp;aacute;fico y aumentar tu flujo de ingresos.     &lt;br /&gt;&lt;b&gt;     &lt;br /&gt;Influencia y actualizaci&amp;oacute;n de motores de b&amp;uacute;squeda&lt;/b&gt;     &lt;br /&gt;Controlar el acceso y la visualizaci&amp;oacute;n de su contenido en los resultados de b&amp;uacute;squeda. Mantener los motores de b&amp;uacute;squeda con la &amp;uacute;ltima informaci&amp;oacute;n de su sitio web.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Mejorar la experiencia del Usuario&lt;/b&gt;&amp;nbsp; &lt;br /&gt;Descubrir y resolver problemas comunes en el contenido de su sitio web y de dise&amp;ntilde;o para mejorar su experiencia de usuario final. Que sea f&amp;aacute;cil para sus clientes a encontrar lo que est&amp;aacute;s buscando. &lt;/p&gt;
&lt;p&gt;Visita la p&amp;aacute;gina &lt;a href="http://www.microsoft.com/web/gallery/install.aspx?appid=seotoolkit"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_22C6DBF9.png" border="0" height="101" width="556" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a title="http://www.microsoft.com/web/seo/" href="http://www.microsoft.com/web/seo/"&gt;http://www.microsoft.com/web/seo/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Un video Demostrativo de&amp;nbsp; como utilizarlo:&lt;/p&gt;
&lt;p&gt;
 
&lt;object height="494" width="575"&gt;
&lt;param name="movie" value="http://www.youtube.com/v/zh-ah8Ya9QI&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" /&gt;
&lt;param name="allowFullScreen" value="true" /&gt;
&lt;param name="allowscriptaccess" value="always" /&gt;&lt;embed src="http://www.youtube.com/v/zh-ah8Ya9QI&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" height="494" width="575"&gt;&lt;/embed&gt;
&lt;/object&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Como puedes ver, tienes posibilidad de examinar tu sitio de manera muy acabada, para obtener un reporte completo sobre los problemas de tu WebSite.&lt;/p&gt;
&lt;p&gt;Espero que te sirva esta herramienta :)   &lt;br /&gt;Saludos,    &lt;br /&gt;Gonzalo&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=165969" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/Tips/default.aspx">Tips</category></item><item><title>Exportar Grilla a CSV – Migrado a VB.NET</title><link>http://geeks.ms/blogs/gperez/archive/2010/01/15/exportar-grilla-a-cvs-migrado-a-vb-net.aspx</link><pubDate>Fri, 15 Jan 2010 02:34:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:165026</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=165026</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=165026</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2010/01/15/exportar-grilla-a-cvs-migrado-a-vb-net.aspx#comments</comments><description>&lt;p align="justify"&gt;Hola,&lt;strong&gt; primero que nada, quiero aclarar que no soy el Due&amp;ntilde;o de este c&amp;oacute;digo&lt;/strong&gt;, de hecho un lector de mi blog me poste&amp;oacute; el ejemplo que estaba en C#&amp;nbsp; y lo necesitaba en VB.NET. Resulta que al traducirlo autom&amp;aacute;ticamente con el gran &lt;a target="_blank" href="http://converter.telerik.com/"&gt;TELERIK Converter.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_2BDEF648.png"&gt;&lt;img height="186" width="473" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_3D6EE113.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;El articulo original est&amp;aacute; en: &lt;br /&gt;&lt;a href="http://www.arzion.com/empresa-de-internet/posts/Exportar-un-GridView-a-CSV-con-ASPnet" title="http://www.arzion.com/empresa-de-internet/posts/Exportar-un-GridView-a-CSV-con-ASPnet"&gt;http://www.arzion.com/empresa-de-internet/posts/Exportar-un-GridView-a-CSV-con-ASPnet&lt;/a&gt; &lt;br /&gt;Realizado por &lt;strong&gt;Ernesto Traversaro &lt;br /&gt;&lt;br /&gt;&lt;/strong&gt;Luego al traducirlo el Lector lo prob&amp;oacute; y dijo:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_54B9E584.png"&gt;&lt;img height="130" width="478" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_2CA73665.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Luego otra persona me dijo lo mismo y lo revis&amp;eacute; y era simplemente que una variable se estaba declarando dos veces entonces lo cambi&amp;eacute; y resulto:&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;Protected&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; &lt;span style="color:blue;"&gt;Sub&lt;/span&gt; ExportarCSV() &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Response.Clear() &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Response.Buffer = &lt;span style="color:blue;"&gt;True &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Response.AddHeader(&lt;span style="color:#a31515;"&gt;&amp;quot;content-disposition&amp;quot;&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;&amp;quot;attachment;filename=GridViewExport.csv&amp;quot;&lt;/span&gt;) &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Response.Charset = &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;quot; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Response.ContentType = &lt;span style="color:#a31515;"&gt;&amp;quot;application/text&amp;quot; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;GridView1.AllowPaging = &lt;span style="color:blue;"&gt;False &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;GridView1.DataBind() &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; sb &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;New&lt;/span&gt; StringBuilder() &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; k &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Integer&lt;/span&gt; = 0 &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;While&lt;/span&gt; k &amp;lt; GridView1.Columns.Count &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;sb.Append(GridView1.Columns(k).HeaderText + &lt;span style="color:#a31515;"&gt;&amp;quot;,&amp;quot;c&lt;/span&gt;) &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;System.Math.Max(System.Threading.Interlocked.Increment(k), k - 1) &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;While &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;sb.Append(vbCr &amp;amp; vbLf) &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; i &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Integer&lt;/span&gt; = 0 &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;While&lt;/span&gt; i &amp;lt; GridView1.Rows.Count &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; k2 &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Integer&lt;/span&gt; = 0 &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;While&lt;/span&gt; k2 &amp;lt; GridView1.Columns.Count &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;sb.Append(GridView1.Rows(i).Cells(k2).Text + &lt;span style="color:#a31515;"&gt;&amp;quot;,&amp;quot;c&lt;/span&gt;) &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;System.Math.Max(System.Threading.Interlocked.Increment(k2), k2 - 1) &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;While &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;sb.Append(vbCr &amp;amp; vbLf) &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;System.Math.Max(System.Threading.Interlocked.Increment(i), i - 1) &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;While &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Response.Output.Write(sb.ToString()) &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;Response.Flush() &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;Response.End() &lt;br /&gt;&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Sub&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;"&gt;Entonces lo hice un ejemplo con VB.NET &lt;br /&gt;&lt;a target="_blank" href="http://cid-053a660afa3473b3.skydrive.live.com/self.aspx/P%c3%bablico/excelcvs.rar"&gt;&lt;strong&gt;PUEDES DESCARGARLO ACA&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;"&gt;Y&amp;nbsp; si quieres ver el articulo original C# esta en:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.arzion.com/empresa-de-internet/posts/Exportar-un-GridView-a-CSV-con-ASPnet" title="http://www.arzion.com/empresa-de-internet/posts/Exportar-un-GridView-a-CSV-con-ASPnet"&gt;&lt;strong&gt;http://www.arzion.com/empresa-de-internet/posts/Exportar-un-GridView-a-CSV-con-ASPnet&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Saludos, &lt;br /&gt;Gonzalo&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=165026" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Tips/default.aspx">Tips</category></item><item><title>Resumen de Post de Optimización Web – Chaloptimaze!</title><link>http://geeks.ms/blogs/gperez/archive/2010/01/13/resumen-de-post-de-optimizaci-243-n-web-chaloptimaze.aspx</link><pubDate>Wed, 13 Jan 2010 17:25:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:164938</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=164938</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=164938</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2010/01/13/resumen-de-post-de-optimizaci-243-n-web-chaloptimaze.aspx#comments</comments><description>&lt;table width="604" cellpadding="2" cellspacing="0" border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="126" valign="top"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_41DA945D.png"&gt;&lt;img height="80" width="102" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_63D2CA56.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt;&lt;/td&gt;
&lt;td width="476" valign="top"&gt;
&lt;p&gt;Hola, ya que algunos me han preguntado &amp;ldquo;tienes alg&amp;uacute;n tip de optimizaci&amp;oacute;n&amp;rdquo; voy a publicar un peque&amp;ntilde;o resumen de algunos de los post m&amp;aacute;s relevantes sobre este tema que he realizado. Obviamente todav&amp;iacute;a estoy en deuda y es en esta &amp;eacute;poca del a&amp;ntilde;o en donde puedo escribir m&amp;aacute;s post, as&amp;iacute; que pr&amp;oacute;ximamente &amp;hellip; m&amp;aacute;s tips de optimizaci&amp;oacute;n!&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Dejo entonces algunos links de este humilde blog:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a target="_blank" href="http://geeks.ms/blogs/gperez/archive/2010/01/04/optimizando-tu-website-con-css-sprites-caso-pr-225-ctico.aspx"&gt;Optimizando tu Web con CSS SPrites&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://geeks.ms/blogs/gperez/archive/2010/01/02/microsoft-ajax-cdn-mejoras-de-rendimiento-a-considerar.aspx"&gt;Utilizar Microsoft Ajax CDN&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://geeks.ms/blogs/gperez/archive/2010/01/02/microsoft-ajax-cdn-mejoras-de-rendimiento-a-considerar.aspx"&gt;Minificar los archivos JavaScript&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://geeks.ms/blogs/gperez/archive/2009/06/04/scriptreferenceprofiler-compositescript-y-pensando-por-que-no-lo-ocupe-antes-optimizaci-243-n-de-request-de-javasscripts.aspx"&gt;CompositeScript &amp;ndash; Combinar para optimizar&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://geeks.ms/blogs/gperez/archive/2009/09/15/asp-net-4-0-mejora-para-los-motores-de-b-250-squeda-meta-tag-y-descripci-243-n.aspx"&gt;Mejora para los motores de B&amp;uacute;squeda (ASP.NET 4)&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a target="_blank" href="http://geeks.ms/blogs/gperez/archive/2009/09/15/asp-net-4-0-mejora-para-los-motores-de-b-250-squeda-meta-tag-y-descripci-243-n.aspx"&gt;Mejorar el rendimiento optimizando los ViewState (ASP.NET 4)&lt;/a&gt; &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Saludos! &lt;br /&gt;Gonzalo&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=164938" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/Tips/default.aspx">Tips</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Tutorial/default.aspx">Tutorial</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Ninja+Web/default.aspx">Ninja Web</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Optimizaci_26002300_243_3B00_n/default.aspx">Optimizaci&amp;#243;n</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Patrones+de+Dise_26002300_241_3B00_o/default.aspx">Patrones de Dise&amp;#241;o</category></item><item><title>Optimizando tu Website con CSS Sprites, caso práctico</title><link>http://geeks.ms/blogs/gperez/archive/2010/01/04/optimizando-tu-website-con-css-sprites-caso-pr-225-ctico.aspx</link><pubDate>Mon, 04 Jan 2010 04:12:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:164191</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=164191</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=164191</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2010/01/04/optimizando-tu-website-con-css-sprites-caso-pr-225-ctico.aspx#comments</comments><description>&lt;p align="justify"&gt;Una de las Reglas de Oro en el temas de performance, tiene que ver con tratar de disminuir la cantidad de HTTP Request de nuestro sitio web. Para ser m&amp;aacute;s claro, cada vez que se carga una imagen, un archivo Js, un archivo flash, un css, etc, existe una petici&amp;oacute;n al servidor, y como en toda petici&amp;oacute;n hay un proceso de conexi&amp;oacute;n, solicitud y recepci&amp;oacute;n que tiene un costo asociado, sumado a que existen cabeceras por cada petici&amp;oacute;n, no es lo mismo tener que descargar 1 archivo de 100Kb que 10 de 10Kb , ya que este &amp;uacute;ltimo caso, va a tomar m&amp;aacute;s de 100Kb para su descarga ( y sum&amp;eacute;mosle el tiempo asociado).&lt;/p&gt;
&lt;p align="justify"&gt;Es aqu&amp;iacute; en donde nos sirven los CCS Sprites, la idea es similar a la Tabla Ouija, en donde tenemos una &amp;ldquo;tabla&amp;rdquo; con todos los s&amp;iacute;mbolos que necesitamos y apuntamos a uno en particular (bueno, en la Ouija son los demoniacos esp&amp;iacute;ritus)&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;El Caso Pr&amp;aacute;ctico&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Vamos a tener una barra de men&amp;uacute; en nuestra p&amp;aacute;gina web, que tiene los siguientes elementos:&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_69CA7736.png"&gt;&lt;img height="83" width="545" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_7C6F4B20.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;El peso total de estas im&amp;aacute;genes es&amp;nbsp; de 128 KB, por otra parte se puede ver una imagen que se llama Todo.png, esta imagen contiene un solo &amp;ldquo;lienzo&amp;rdquo; con todas las im&amp;aacute;genes individuales que he mostrado. El hecho de que pese menos, sin ser especialista en im&amp;aacute;genes, creo que es por la info asociada a la imagen propiamente tal. (Si no estoy en lo correcto, me ayudan) . Sin embargo esto no nos va a detener en nuestro an&amp;aacute;lisis, ya que esto lo consideraremos al momento de obtener los resultados.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_4063096B.png"&gt;&lt;img height="269" width="342" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_0607938A.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;Para analizar los cargas y los resultados vamos a utilizar &lt;a target="_blank" href="https://addons.mozilla.org/es-ES/firefox/addon/1843"&gt;FireBug&lt;/a&gt; de FireFox.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;P&amp;aacute;gina &amp;ldquo;Normal&amp;rdquo; Sin CSS Sprite&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Al ejecutar la p&amp;aacute;gina, con im&amp;aacute;genes independientes vemos que su comportamiento en tema de carga es la siguiente:&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_2D7E5FF4.png"&gt;&lt;img height="473" width="528" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_70F5C57C.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;Existen 8 HTTP Request, y cada imagen tiene su procesamiento en t&amp;eacute;rminos de peticiones. El tama&amp;ntilde;o final &lt;strong&gt;es 125 Kb descargados y la duraci&amp;oacute;n es 4.08Seg&lt;/strong&gt;. Seg&amp;uacute;n Firebug, f&amp;iacute;jate en la petici&amp;oacute;n del Icono7 siguiente:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_54F46AB7.png"&gt;&lt;img height="139" width="206" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_45DD8BDD.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;Con esto podemos ver que la mayor parte del tiempo, en cada petici&amp;oacute;n de im&amp;aacute;genes es m&amp;aacute;s el tiempo de conexi&amp;oacute;n de la recepci&amp;oacute;n de la imagen propiamente tal! &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;P&amp;aacute;gina con CSS Sprite&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Vamos a escribir el estilo que nos va a servir para crear nuestro ejemplo, el siguiente, a grosso modo puedes ver que se visualizan sectores de la imagen, de un ancho de 128px de tal manera de completar el men&amp;uacute; completo. Cada uno de estos estilos se los asignaremos a etiquetas span.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;style&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;#menu&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; &lt;span style="color:#a31515;"&gt;span&lt;/span&gt; { &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:red;"&gt;width&lt;/span&gt;:&lt;span style="color:blue;"&gt;128px&lt;/span&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:red;"&gt;height&lt;/span&gt;:&lt;span style="color:blue;"&gt;110px&lt;/span&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:red;"&gt;display&lt;/span&gt;:&lt;span style="color:blue;"&gt;inline&lt;/span&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:red;"&gt;float&lt;/span&gt;:&lt;span style="color:blue;"&gt;left&lt;/span&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:red;"&gt;background-image&lt;/span&gt;:&lt;span style="color:blue;"&gt;url(ejemplo/todo.png)&lt;/span&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;} &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;.icono1&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; { &lt;span style="color:red;"&gt;background-position&lt;/span&gt;:&lt;span style="color:blue;"&gt;0&lt;/span&gt; &lt;span style="color:blue;"&gt;0&lt;/span&gt;;} &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;.icono2&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; { &lt;span style="color:red;"&gt;background-position&lt;/span&gt;:&lt;span style="color:blue;"&gt;-128px&lt;/span&gt; &lt;span style="color:blue;"&gt;0&lt;/span&gt;;} &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;.icono3&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; { &lt;span style="color:red;"&gt;background-position&lt;/span&gt;:&lt;span style="color:blue;"&gt;-256px&lt;/span&gt; &lt;span style="color:blue;"&gt;0&lt;/span&gt;;} &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;.icono4&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; { &lt;span style="color:red;"&gt;background-position&lt;/span&gt;:&lt;span style="color:blue;"&gt;-384px&lt;/span&gt; &lt;span style="color:blue;"&gt;0&lt;/span&gt;;} &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;.icono5&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; { &lt;span style="color:red;"&gt;background-position&lt;/span&gt;:&lt;span style="color:blue;"&gt;-512px&lt;/span&gt; &lt;span style="color:blue;"&gt;0&lt;/span&gt;;} &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;.icono6&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; { &lt;span style="color:red;"&gt;background-position&lt;/span&gt;:&lt;span style="color:blue;"&gt;-640px&lt;/span&gt; &lt;span style="color:blue;"&gt;0&lt;/span&gt;;} &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;"&gt;.icono7&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt; { &lt;span style="color:red;"&gt;background-position&lt;/span&gt;:&lt;span style="color:blue;"&gt;-768px&lt;/span&gt; &lt;span style="color:blue;"&gt;0&lt;/span&gt;;} &lt;br /&gt;&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;"&gt;style&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;En el siguiente c&amp;oacute;digo vemos las etiquetas Span y el contenedor DIV que vamos a utilizar.&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;div&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; &lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;menu&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt;width&lt;/span&gt;:&lt;span style="color:blue;"&gt;910px&lt;/span&gt;; &lt;span style="color:red;"&gt;height&lt;/span&gt;: &lt;span style="color:blue;"&gt;110px&lt;/span&gt;;&lt;span style="color:blue;"&gt;&amp;quot;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;a&lt;/span&gt; &lt;span style="color:red;"&gt;href&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;BLOCKED SCRIPTalert(&amp;#39;icono1&amp;#39;)&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;icono1&amp;quot;&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;span&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;icono1&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;span&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;a&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;a&lt;/span&gt; &lt;span style="color:red;"&gt;href&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;BLOCKED SCRIPTalert(&amp;#39;icono2&amp;#39;)&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;icono2&amp;quot;&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;span&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;icono2&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;span&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;a&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;a&lt;/span&gt; &lt;span style="color:red;"&gt;href&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;BLOCKED SCRIPTalert(&amp;#39;icono3&amp;#39;)&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;icono3&amp;quot;&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;span&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;icono3&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;span&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;a&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;a&lt;/span&gt; &lt;span style="color:red;"&gt;href&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;BLOCKED SCRIPTalert(&amp;#39;icono4&amp;#39;)&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;icono4&amp;quot;&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;span&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;icono4&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;span&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;a&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;a&lt;/span&gt; &lt;span style="color:red;"&gt;href&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;BLOCKED SCRIPTalert(&amp;#39;icono5&amp;#39;)&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;icono5&amp;quot;&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;span&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;icono5&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;span&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;a&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;a&lt;/span&gt; &lt;span style="color:red;"&gt;href&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;BLOCKED SCRIPTalert(&amp;#39;icono6&amp;#39;)&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;icono6&amp;quot;&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;span&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;icono6&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;span&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&amp;nbsp; &amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;a&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;a&lt;/span&gt; &lt;span style="color:red;"&gt;href&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;BLOCKED SCRIPTalert(&amp;#39;icono7&amp;#39;)&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;icono7&amp;quot;&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;span&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;icono7&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;span&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;a&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;"&gt;div&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;"&gt;Ahora veamos el resultado en FireBug con FireFox.:&lt;/p&gt;
&lt;p class="MsoNormal" style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_64B3FFBB.png"&gt;&lt;img height="374" width="532" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_11993CCA.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;Solo dos pedidos, el HTML propiamente tal y luego la imagen, tambi&amp;eacute;n al igual que en el caso anterior, hay un tiempo de Conexi&amp;oacute;n alto en comparaci&amp;oacute;n al de recepci&amp;oacute;n, pero esto se hace solo una vez, el resultado es claro, &lt;strong&gt;109Kb de descarga con un tiempo de 2.12s&lt;/strong&gt;. &lt;/p&gt;
&lt;table width="279" cellpadding="2" cellspacing="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="72" valign="top"&gt;&lt;strong&gt;M&amp;eacute;todo&lt;/strong&gt;&lt;/td&gt;
&lt;td width="90" valign="top"&gt;&lt;strong&gt;Tama&amp;ntilde;o (Kb)&lt;/strong&gt;&lt;/td&gt;
&lt;td width="115" valign="top"&gt;&lt;strong&gt;Tiempo (Seg)&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="72" valign="top"&gt;Normal&lt;/td&gt;
&lt;td width="90" valign="top"&gt;
&lt;p align="center"&gt;125Kb&lt;/p&gt;
&lt;/td&gt;
&lt;td width="115" valign="top"&gt;
&lt;p align="center"&gt;4.08&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td width="72" valign="top"&gt;CSS Sprite&lt;/td&gt;
&lt;td width="90" valign="top"&gt;
&lt;p align="center"&gt;109Kb&lt;/p&gt;
&lt;/td&gt;
&lt;td width="115" valign="top"&gt;
&lt;p align="center"&gt;2.12&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p align="justify"&gt;&lt;strong&gt;Es decir, un 48% de reducci&amp;oacute;n en el tiempo&lt;/strong&gt;, claramente no es relevante que sean 16 kb menos, (ya que seg&amp;uacute;n ese razonamiento, la de regla de tres simple, el CSS Sprite deber&amp;iacute;a demorar 3.5 seg)&lt;/p&gt;
&lt;p align="justify"&gt;Obviamente se nos viene a la cabeza los image maps, aunque no son aplicables en todas las ocasiones como los CSS Sprites , por ejemplo cuando las im&amp;aacute;genes no est&amp;aacute;n f&amp;iacute;sicamente organizadas en la p&amp;aacute;gina una al lado de otra, o puedes estar en el header y otra en el footer de la p&amp;aacute;gina.&lt;/p&gt;
&lt;p align="justify"&gt;Entonces , para concluir, esta adem&amp;aacute;s de otras t&amp;eacute;cnicas que ire posteando en el futuro, son consideradas reglas de oro en la optimizaci&amp;oacute;n de sitios web, estas reglas no las escrib&amp;iacute; yo!, si no que las aprend&amp;iacute; y quiero compartirlas. De donde las aprend&amp;iacute;? Del Libro &amp;ldquo;&lt;a target="_blank" href="http://oreilly.com/catalog/9780596529307"&gt;High Performance Web Sites&lt;/a&gt;&amp;rdquo;&amp;nbsp; del maestro Steve Souders, lectura obligada para un Ninja Web.&lt;/p&gt;
&lt;p&gt;Espero que te haya servido! &lt;br /&gt;Nos vemos!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=164191" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/msdn/default.aspx">msdn</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Tips/default.aspx">Tips</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Ninja+Web/default.aspx">Ninja Web</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Optimizaci_26002300_243_3B00_n/default.aspx">Optimizaci&amp;#243;n</category></item><item><title>Microsoft AJAX CDN, Mejoras de rendimiento a considerar</title><link>http://geeks.ms/blogs/gperez/archive/2010/01/02/microsoft-ajax-cdn-mejoras-de-rendimiento-a-considerar.aspx</link><pubDate>Sat, 02 Jan 2010 07:05:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:164088</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=164088</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=164088</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2010/01/02/microsoft-ajax-cdn-mejoras-de-rendimiento-a-considerar.aspx#comments</comments><description>&lt;p align="justify"&gt;Al utilizar Microsoft AJAX CDN, podemos mejorar significativamente el rendimiento de nuestras aplicaciones AJAX. Los Script se almacenan en servidores ubicados al rededor de todo el mundo (seg&amp;uacute;n la p&amp;aacute;gina &lt;a href="http://www.asp.net/ajaxlibrary/CDN.ashx" title="http://www.asp.net/ajaxlibrary/CDN.ashx"&gt;http://www.asp.net/ajaxlibrary/CDN.ashx&lt;/a&gt;, garantizando disponibilidad y velocidad. Ademas el CDN de Microsoft AJAX (que incluye JQuery) env&amp;iacute;a los script ya comprimidos, (por si nuestro hosting no tiene configurado esta opci&amp;oacute;n), adem&amp;aacute;s permite a los navegadores la reutilizaci&amp;oacute;n de los archivos Javascript&amp;nbsp; en cache de los sitios web que se encuentren en distintos dominios. Todo lo anterior se suma a que por HTTP, hay un l&amp;iacute;mite de peticiones concurrentes hacia un mismo dominio, esto incluye im&amp;aacute;genes, css, archivos Flash, y por supuesto, los archivos JS.&lt;/p&gt;
&lt;p align="justify"&gt;Vamos a ver&amp;nbsp; una peque&amp;ntilde;a demo, no tiene im&amp;aacute;genes ni css, ni nada, pero vamos a darnos cuenta que los contenidos vienen comprimidos desde el servidor, en este caso voy a utilizar JQuery y FireBug para obtener los tiempos y tama&amp;ntilde;os de descarga.&lt;/p&gt;
&lt;p align="justify"&gt;El C&amp;oacute;digo lo obtuve de la P&amp;aacute;gina &lt;a href="http://www.asp.net/ajaxlibrary/CDN.ashx" title="http://www.asp.net/ajaxlibrary/CDN.ashx"&gt;http://www.asp.net/ajaxlibrary/CDN.ashx&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;lt;!&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;DOCTYPE&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; &lt;span style="color:red;"&gt;html&lt;/span&gt; &lt;span style="color:red;"&gt;PUBLIC&lt;/span&gt; &lt;span style="color:blue;"&gt;&amp;quot;-//W3C//DTD XHTML 1.0 Transitional//EN&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;&amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;html&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; &lt;span style="color:red;"&gt;xmlns&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;head&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;jQuery from Microsoft AJAX CDN&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;title&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;strong&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;js/jquery-1.3.2.min.js&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/strong&gt;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;$( domReady );&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt; domReady() { &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;$(&lt;span style="color:#a31515;"&gt;&amp;#39;#btn&amp;#39;&lt;/span&gt;).click( showMessage ); &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;} &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;function&lt;/span&gt; showMessage() { &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;$(&lt;span style="color:#a31515;"&gt;&amp;#39;#message&amp;#39;&lt;/span&gt;).fadeIn(&lt;span style="color:#a31515;"&gt;&amp;#39;slow&amp;#39;&lt;/span&gt;); &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;} &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;head&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;body&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;button&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; &lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;btn&amp;quot;&amp;gt;&lt;/span&gt;Show Message&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;button&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;div&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; &lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;message&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;&lt;/span&gt;&lt;span style="color:red;"&gt;display&lt;/span&gt;:&lt;span style="color:blue;"&gt;none&amp;quot;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;h1&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;Hello from jQuery!&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;h1&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;"&gt;div&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;"&gt;body&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;"&gt;html&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;Ahora medido con FireBug, &lt;br /&gt;&lt;strong&gt;Sin CDN&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify" class="MsoNormal"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_118C477F.png"&gt;&lt;img height="366" width="550" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_249D4E5E.png" alt="image" border="0" title="image" style="display:inline;border:0px;" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Fij&amp;eacute;monos en los resultados, estoy referenciando a jquery-1.3.2.min.js es decir la versi&amp;oacute;n de producci&amp;oacute;n, en total 55 KB (es lo que pesa, claro esta) y tiempo total de carga 2.05s.&lt;/p&gt;
&lt;p align="left" class="MsoNormal"&gt;&lt;strong&gt;Con CDN &lt;br /&gt;&lt;/strong&gt;Cambiando la l&amp;iacute;nea de c&amp;oacute;digo en donde se hace la referencia a JQuery por: &lt;br /&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;script&lt;/span&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;http://ajax.microsoft.com/ajax/jquery/jquery-1.3.2.min.js&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_58551EE2.png"&gt;&lt;img height="369" width="552" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_3F299EDD.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Esta vez, vemos que el tiempo de carga disminuyo, por que? por que la habilitaci&amp;oacute;n de compresi&amp;oacute;n de los archivos JS de los servidores de CDN permiti&amp;oacute; que el mismo archivo, ahora tuviera la mitad del tama&amp;ntilde;o, solo 25KB, y el tiempo de carga 1.38s.&lt;br /&gt;La segunda vez, ya que esta en cache, es menor a&amp;uacute;n el tiempo (1.2 Seg):&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_1053C06E.png"&gt;&lt;img height="53" width="551" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_162E6407.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;Ahora bien, es bueno comenzar a pensar pensar en distribuir nuestro contenido est&amp;aacute;tico, lo que logra una reducci&amp;oacute;n en los tiempos de respuesta, por lo menos en tema de referencias a archivos JS se hace sencillo con Microsoft Ajax CDN.&lt;br /&gt;Por ahora no vamos a profundizar m&amp;aacute;s (m&amp;aacute;s adelante si) por mientras te dejo la p&amp;aacute;gina para que lo compruebes tu mismo y veas los beneficios de incluir este concepto en tus desarrollos, no solo con JQuery, si no con toda la gama de Script que podemos referenciar (&lt;a href="http://www.asp.net/ajaxlibrary/CDNAjaxLibrary0911.ashx" title="http://www.asp.net/ajaxlibrary/CDNAjaxLibrary0911.ashx"&gt;http://www.asp.net/ajaxlibrary/CDNAjaxLibrary0911.ashx&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ac&amp;aacute; est&amp;aacute; la p&amp;aacute;gina , tiene muchos ejemplos: &lt;br /&gt;&lt;/strong&gt;&lt;a href="http://www.asp.net/ajaxlibrary/cdn.ashx" title="http://www.asp.net/ajaxlibrary/cdn.ashx"&gt;&lt;strong&gt;http://www.asp.net/ajaxlibrary/cdn.ashx&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Saludos, &lt;br /&gt;Gonzalo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=164088" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Tips/default.aspx">Tips</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/jquery/default.aspx">jquery</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/javascript/default.aspx">javascript</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/_5B00_Link_5D00_/default.aspx">[Link]</category></item><item><title>TUTORIAL -  ValidatorCallOut Extender – Mejorando los avisos al usuario</title><link>http://geeks.ms/blogs/gperez/archive/2010/01/02/tutorial-validatorcallout-extender-mejorando-los-avisos-al-usuario.aspx</link><pubDate>Sat, 02 Jan 2010 05:29:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:164083</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=164083</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=164083</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2010/01/02/tutorial-validatorcallout-extender-mejorando-los-avisos-al-usuario.aspx#comments</comments><description>&lt;p align="justify"&gt;Siguiendo el tema de los tutoriales de AJAX Control Toolkit, vamos a revisar el ValidadorCallOut Extender, de manera de mejorar el Look&amp;amp; Field de los mensajes de error como los que nos entregan los controles XFieldValidator.&lt;/p&gt;
&lt;p&gt;Entonces vamos a utilizar el mismo ejemplo del articulo sobre AutoComplete Extender (que? que no lo viste? bueno, ac&amp;aacute; esta:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/blogs/gperez/archive/2009/12/31/tutorial-autocomplete-extender-autocompletando-desde-la-base-de-datos.aspx" title="http://geeks.ms/blogs/gperez/archive/2009/12/31/tutorial-autocomplete-extender-autocompletando-desde-la-base-de-datos.aspx"&gt;http://geeks.ms/blogs/gperez/archive/2009/12/31/tutorial-autocomplete-extender-autocompletando-desde-la-base-de-datos.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Ahora vamos a agregar un control RequiredFieldValidator asociado al textbox tx_buscar, de tal manera que nos valide que debe existir texto en el control textbox antes de hacer postback.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_1706C731.png"&gt;&lt;img height="147" width="525" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_65B7DCD0.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Ahora veamos el Control&amp;hellip;&lt;/p&gt;
&lt;p align="justify"&gt;La idea es que consigamos el efecto de este control, y luego que lo personalizaremos un poco para que se vea con los colores que nosotros necesitemos.&lt;/p&gt;
&lt;p&gt;Si ves el ejemplo que hay en : &lt;br /&gt;&lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ValidatorCallout/ValidatorCallout.aspx" title="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ValidatorCallout/ValidatorCallout.aspx"&gt;http://www.asp.net/AJAX/AjaxControlToolkit/Samples/ValidatorCallout/ValidatorCallout.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Vamos a ver algo este formulario, y como ves, el control nos permite mejorar la forma del mensaje de error.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_3FE1B66D.png"&gt;&lt;img height="86" width="322" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_30CAD793.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;Volviendo a nuestro ejemplo, hacemos el&lt;strong&gt; Paso Uno&lt;/strong&gt;, que ser&amp;iacute;a extender el control RequiredFieldValidator.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_0F6B31F7.png"&gt;&lt;img height="143" width="532" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_07075CA0.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Luego seleccionamos ValidatorCalloutExtender&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_19DBE04A.png"&gt;&lt;img height="95" width="162" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_1D0DC832.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Recuerda que debes setear la propiedad del RequiredFieldValidator, &lt;strong&gt;Display : None &lt;/strong&gt;, o de otra manera vas a ver ambos mensajes de error al momento de validar tu form.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_69D18EC8.png"&gt;&lt;img height="130" width="528" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_20CB6D02.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Paso Dos, Personalizar el control&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Pero puede ser, como me pas&amp;oacute; a mi, que los colores institucionales de la empresa en donde estaba desarrollando, no se ajustaban con el amarillo, deb&amp;iacute;a ser verde agua (t&amp;iacute;pico color pastel) as&amp;iacute; que vamos a setear este control. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Color de Fondo &lt;br /&gt;&lt;/strong&gt;Para revisar los CSS que se utilizan en el control, te recomiendo que utilices la &lt;a target="_blank" href="http://www.microsoft.com/downloads/details.aspx?familyid=e59c3964-672d-4511-bb3e-2d5e1db91038&amp;amp;displaylang=en"&gt;IE Developer Toolbar de IE8&lt;/a&gt; , que la puedes ocupar presionando F12, o tambi&amp;eacute;n puedes utilizar el excelente &lt;a target="_blank" href="https://addons.mozilla.org/es-ES/firefox/addon/1843"&gt;FireFug&lt;/a&gt; de FireFox. Revisando podemos ver que el estilo que define el fondo es:&lt;/p&gt;
&lt;p&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="color:#a31515;"&gt;&amp;nbsp; .ajax__validatorcallout&lt;/span&gt; &lt;span style="color:#a31515;"&gt;div&lt;/span&gt;, &lt;span style="color:#a31515;"&gt;.ajax__validatorcallout&lt;/span&gt; &lt;span style="color:#a31515;"&gt;td &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="color:red;"&gt;background-color&lt;/span&gt;: &lt;span style="color:blue;"&gt;LightSteelBlue&lt;/span&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;"&gt;border&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;: &lt;span style="color:blue;"&gt;1px&lt;/span&gt; &lt;span style="color:blue;"&gt;solid&lt;/span&gt; &lt;span style="color:blue;"&gt;Blue&lt;/span&gt;; &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;} &lt;br /&gt;&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;style&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table width="534" cellpadding="2" cellspacing="0" border="1"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td width="532" valign="top"&gt;
&lt;p align="justify"&gt;&lt;strong&gt;Importante:&lt;/strong&gt; Recuerda agregar este estilo despu&amp;eacute;s del Control ScriptManager, el motivo es que el ScriptManager va a generar todos los archivos js, xml y css para los controles que utilicen ajax, entonces si tu este estilo aparece en el c&amp;oacute;digo antes del ScriptManager, va a ser sobrescrito y vas a ver siempre el color por defecto del control.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p align="justify"&gt;&lt;strong&gt;Iconos &lt;br /&gt;&lt;/strong&gt;Vamos a poder cambiar los iconos que corresponden al Alerta (signo de exclamaci&amp;oacute;n) y tambi&amp;eacute;n la x (cerrar el mensaje) seteando las propiedades en el c&amp;oacute;digo declarativo, estos cambios tambi&amp;eacute;n los puedes hacer desde el cuadro de propiedades del control RequiereFieldValidator.&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;WarningIconImageUrl&lt;/span&gt;&lt;span lang="EN-US" style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;=&amp;quot;error.png&amp;quot;&lt;/span&gt;&lt;span lang="EN-US" style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; &lt;br /&gt;&lt;span style="color:red;"&gt;CloseImageUrl&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;cerrar.png&amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language:en-us;"&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Obviamente yo tengo estas im&amp;aacute;genes en mi proyecto, est&amp;aacute;n en la misma ruta de la p&amp;aacute;gina que tiene el control. &lt;br /&gt;Luego vemos la diferencia: &lt;br /&gt;&lt;br /&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_2CECE729.png"&gt;&lt;img height="91" width="537" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_241CDEDD.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;
&lt;p&gt;Eso es todo! &lt;br /&gt;&lt;a target="_blank" href="http://cid-053a660afa3473b3.skydrive.live.com/self.aspx/P%c3%bablico/ValidatorCallOut.zip"&gt;&lt;strong&gt;DESCARGA EL EJEMPLO ACA&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;Espero que te sirva, cualquier duda, me avisas! &lt;br /&gt;Saludos, &lt;br /&gt;Gonzalo&lt;/p&gt;
&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=164083" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Ajax+Control+Toolkit/default.aspx">Ajax Control Toolkit</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Tutorial/default.aspx">Tutorial</category></item><item><title>TUTORIAL- AutoComplete Extender, Autocompletando desde la Base de datos</title><link>http://geeks.ms/blogs/gperez/archive/2009/12/31/tutorial-autocomplete-extender-autocompletando-desde-la-base-de-datos.aspx</link><pubDate>Thu, 31 Dec 2009 22:14:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:164056</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>16</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=164056</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=164056</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2009/12/31/tutorial-autocomplete-extender-autocompletando-desde-la-base-de-datos.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://ajaxcontroltoolkit.codeplex.com/"&gt;&lt;img style="border-right-width:0px;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" border="0" src="http://download.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=AjaxControlToolkit&amp;amp;DownloadId=31538&amp;amp;Build=16135" width="526" height="100" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Si bien muchas veces hablamos de lo último que viene saliendo, también hay que darse un tiempo de hablar sobre lo que está y se utiliza poco, he visto a varios desarrolladores ASP.NET que no aprovechan este herramienta del Ajax Control Toolkit, de hecho fue por esto que me propuse la tarea de hacer un ScreenCast y un artículo que cada uno de los controles del Ajax Control Toolkit. Pero basta de hablar de mi, hablemos del Control AutoComplete.&lt;/p&gt;  &lt;p align="left"&gt;&lt;strong&gt;&lt;a href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AutoComplete/AutoComplete.aspx" target="_blank"&gt;Recuerda siempre que puedes ver los demos, y bajar la Suite en el sitio de ASP.NET&lt;/a&gt;      &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;     &lt;br /&gt;Cual es la Idea del Control&lt;/strong&gt;     &lt;br /&gt;    &lt;br /&gt;La idea es que puedas tener una funcionalidad muy similar a la que tienes en Google, que va completando con sugerencias, a medida que vas escribiendo en la caja de texto.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_1C134084.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_4CB62262.png" width="471" height="292" /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Nuestro Ejemplo, un buscador de películas&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;EL primer paso&lt;/strong&gt; va a ser crear nuestra base de datos de Películas,&amp;#160; voy a agregar unas 15 películas para tener datos, la estructura es la siguiente:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_3777F6ED.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_0126CEDE.png" width="302" height="112" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Nuestro &lt;strong&gt;segundo Paso&lt;/strong&gt; va a ser la creación de la Interfaz de Usuario. (Los colores son simple casualidad)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_465F2607.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_77122DB2.png" width="472" height="129" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Nuestro&lt;strong&gt; tercer paso&lt;/strong&gt; , será crear el WebService que nos va a permitir obtener los datos para el autocompletar:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_2A01BE1A.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_450A675B.png" width="476" height="314" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Luego, &lt;strong&gt;Cuarto Paso&lt;/strong&gt; va a ser codificar nuestro WebService:&lt;/p&gt;  &lt;p style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160; &lt;/span&gt;&amp;lt;WebMethod()&amp;gt; _ &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="color:blue;"&gt;Public&lt;/span&gt; &lt;span style="color:blue;"&gt;Function&lt;/span&gt; ObtListaPeliculas(&lt;span style="color:blue;"&gt;ByVal&lt;/span&gt; prefixText &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt;, &lt;span style="color:blue;"&gt;ByVal&lt;/span&gt; count &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Integer&lt;/span&gt;) &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt;()       &lt;br /&gt;      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; con &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;New&lt;/span&gt; SqlConnection (ConfigurationManager.ConnectionStrings(&lt;span style="color:#a31515;"&gt;&amp;quot;EjemploConString&amp;quot;&lt;/span&gt;).ConnectionString) &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; comando &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;New&lt;/span&gt; SqlCommand(&lt;span style="color:#a31515;"&gt;&amp;quot;select PeliculaNombre from Peliculas where PeliculaNombre&lt;span style="mso-spacerun:yes;"&gt;&amp;#160; &lt;/span&gt;LIKE &amp;#39;%&amp;#39; + @param + &amp;#39;%&amp;#39; &amp;quot;&lt;/span&gt;, con)       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;comando.Parameters.AddWithValue(&lt;span style="color:#a31515;"&gt;&amp;quot;param&amp;quot;&lt;/span&gt;, prefixText)       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; dr &lt;span style="color:blue;"&gt;As&lt;/span&gt; SqlDataReader       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;comando.Connection.Open()       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;dr = comando.ExecuteReader       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; lista &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;New&lt;/span&gt; List(&lt;span style="color:blue;"&gt;Of&lt;/span&gt; &lt;span style="color:blue;"&gt;String&lt;/span&gt;)       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;While&lt;/span&gt; dr.Read       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;lista.Add(dr.Item(&lt;span style="color:#a31515;"&gt;&amp;quot;PeliculaNombre&amp;quot;&lt;/span&gt;))       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;While        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;comando.Connection.Close()       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;Return&lt;/span&gt; lista.ToArray       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;End&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt; &lt;span style="color:blue;"&gt;Function&lt;/span&gt;&lt;/span&gt;&lt;span style="mso-ansi-language:en-us;" lang="EN-US"&gt; &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Si bien el código no quedo muy ordenado en el post, veamos a grosso modo lo que realiza, los parámetros de entrada son obligatorios, y aunque no los estamos utilizando, como decíamos, deben ir. En el código hacemos una consulta con Like, para ver las coincidencias en cualquier parte del texto del campo PeliculaNombre, luego recorremos estas coincidencias y las vamos guardando en una lista de String, para luego retornarlas, según nuestro ejemplo (y como lo veras abajo) este webservice se va a ejecutar cuando escribamos 2 letras en el Textbox.&lt;/p&gt;  &lt;p align="justify"&gt;Nuestro &lt;strong&gt;Quinto Paso&lt;/strong&gt; , será extender nuestro control TextBox , cabe recordar que yo ya tengo instalado en mi Visual Studio el Ajax Control Toolkit 3.5. Si no lo tienes, debes ir a la página &lt;/p&gt;  &lt;p&gt;&lt;a title="http://www.asp.net/ajax/ajaxcontroltoolkit/samples/" href="http://www.asp.net/ajax/ajaxcontroltoolkit/samples/"&gt;http://www.asp.net/ajax/ajaxcontroltoolkit/samples/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;En donde puedes ver una demo del control y además descargar la Suite.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_0172B639.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_66C61A1F.png" width="244" height="240" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Luego, como decíamos , extendemos el control, y seleccionamos la AutoCompleExtender&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_287D4FAE.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_47DF8074.png" width="509" height="393" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Esta acción nos va a generar el siguiente código declarativo, lo cual no es suficiente, deberemos configurar más opciones para que nuestro ejemplo funcione. &lt;strong&gt;También recuerda agregar un control ScripManager en tu página, es indispensable para que nuestro control funcione.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Código Generado:    &lt;br /&gt;    &lt;br /&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;AutoCompleteExtender&lt;/span&gt; &lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;tx_buscar_AutoCompleteExtender&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt;&amp;#160;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&lt;span style="color:red;"&gt;DelimiterCharacters&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;Enabled&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;ServicePath&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;&amp;quot;&lt;/span&gt;&amp;#160;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-no-proof:yes;"&gt;TargetControlID&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;=&amp;quot;tx_buscar&amp;quot;&amp;gt;&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;cc1&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;AutoCompleteExtender&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Y lo que tenemos que configurar:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;cc1&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;:&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;AutoCompleteExtender&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt; &lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;tx_buscar_AutoCompleteExtender&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;enabled&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;True&amp;quot;        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:red;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;servicepath&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;=&amp;quot;BuscarPeliculas.asmx&amp;quot;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt; &lt;span style="color:red;"&gt;minimumprefixlength&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;2&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;servicemethod&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;ObtListaPeliculas&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;enablecaching&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;true&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;targetcontrolid&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;tx_buscar&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;usecontextkey&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;completionsetcount&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;10&amp;quot;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:red;"&gt;completioninterval&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;200&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;&amp;gt;        &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;cc1&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;:&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;AutoCompleteExtender&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;" lang="EN-US"&gt;&amp;gt;&lt;/span&gt;&lt;/p&gt;  &lt;p style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;/p&gt;  &lt;p&gt;Y Veamos los parámetros importantes:&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;       &lt;p&gt;&lt;strong&gt;servicepath&lt;/strong&gt; : Corresponde al nombre del Webservice.&lt;/p&gt;     &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;strong&gt;ServiceMethod&lt;/strong&gt; : Corresponde al nombre del WebMethod del WebService&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal" align="justify"&gt;       &lt;p&gt;&lt;strong&gt;minimumprefixlength&lt;/strong&gt;: corresponde a la cantidad mínima de caracteres antes de que se llame al WebService, esto es importante, ya que si dejas la cantidad mínima para un gran conjunto de datos, por la naturaleza del filtro, puede que tu consulta se demore un buen resto antes de entregar los datos.&lt;/p&gt;     &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;       &lt;p&gt;&lt;strong&gt;targetcontrolid&lt;/strong&gt;: Corresponde al control textbox en el que se va a ingresar el texto.&lt;/p&gt;     &lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal" align="justify"&gt;&lt;span style="color:red;"&gt;&lt;font color="#000000"&gt;&lt;strong&gt;&lt;strong&gt;CompletionSetCount&lt;/strong&gt;: &lt;/strong&gt;Corresponde a la cantidad de resultados que quieres que se muestren en el autocomplete.&lt;/font&gt;&lt;/span&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;strong&gt;CompletionInterval&lt;/strong&gt; : Corresponde a la cantidad de milisegundos antes de que se muestre la lista.&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;Para ver más detalles puedes ir a:    &lt;br /&gt;&lt;a title="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AutoComplete/AutoComplete.aspx" href="http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AutoComplete/AutoComplete.aspx"&gt;http://www.asp.net/AJAX/AjaxControlToolkit/Samples/AutoComplete/AutoComplete.aspx&lt;/a&gt;&lt;/p&gt;  &lt;p style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;strong&gt;Sexto Paso: &lt;/strong&gt;Ahora a probarlo!&lt;/p&gt;  &lt;p style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;Al escribir Los&amp;#160; por la naturaleza de la Query (La sentencia Like que va a buscar la coincidencia de la cadena de texto en cualquier parte del campo a consultar) vamos a obtener:&lt;/p&gt;  &lt;p style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_3717D5C6.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_6C60E82B.png" width="564" height="279" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Ahora veámoslo en Acción, con un Video :)&lt;/strong&gt;&lt;/p&gt; &lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/X6cKOlJHwIk&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/X6cKOlJHwIk&amp;amp;hl=en_US&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;  &lt;p&gt;&lt;a href="http://cid-053a660afa3473b3.skydrive.live.com/self.aspx/P%c3%bablico/AutoComplete.zip" target="_blank"&gt;&lt;strong&gt;DESCARGA TODO EL EJEMPLO ACA&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Espero que te sirva, cualquier duda o comentario, no dudes en consultar :)    &lt;br /&gt;Saludos y Feliz Año nuevo 2010!&lt;/p&gt;  &lt;p&gt;Gonzalo&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=164056" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Tips/default.aspx">Tips</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Ajax+Control+Toolkit/default.aspx">Ajax Control Toolkit</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Tutorial/default.aspx">Tutorial</category></item><item><title>WebCast para UOC DotNetClub – Novedades de ASP.NET 4</title><link>http://geeks.ms/blogs/gperez/archive/2009/12/29/webcast-para-uoc-dotnetclub-novedades-de-asp-net-4.aspx</link><pubDate>Tue, 29 Dec 2009 12:44:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:163886</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=163886</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=163886</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2009/12/29/webcast-para-uoc-dotnetclub-novedades-de-asp-net-4.aspx#comments</comments><description>&lt;p&gt;&lt;img src="https://mseventsww.microsoft.com/BannerImages/cbbfdaae-aa60-4378-bfdc-a511c20edac7.gif" alt="Club.Net UOC : Conoce las novedades de ASP.NET 4.0" border="0" /&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Hola , tengo el honor de poder dar un Webcast sobre ASP.NET 4.0 para la gente de &lt;a target="_blank" href="http://uoc.dotnetclubs.com/"&gt;UOC DotNetClub&lt;/a&gt;&amp;nbsp; ,&amp;nbsp; le agradezco mucho a &lt;a target="_blank" href="http://geeks.ms/blogs/jbosch/"&gt;Jesus Bosh&lt;/a&gt; quien hizo las gestiones. (visiten su blog, esta muy bueno!). Es el 19 de febrero, a las 19:00 horas (Hora Madrid).&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;El link de Registro es:&lt;/strong&gt; &lt;br /&gt;&lt;a href="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032439032&amp;amp;EventCategory=4&amp;amp;culture=es-ES&amp;amp;CountryCode=ES" title="http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032439032&amp;amp;EventCategory=4&amp;amp;culture=es-ES&amp;amp;CountryCode=ES"&gt;http://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?EventID=1032439032&amp;amp;EventCategory=4&amp;amp;culture=es-ES&amp;amp;CountryCode=ES&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style="color:#408080;"&gt;&lt;span style="font-size:medium;"&gt;Informaci&amp;oacute;n general del Evento&lt;/span&gt; &lt;br /&gt;&lt;/span&gt;&lt;/b&gt;&lt;strong&gt;Idiomas:&lt;/strong&gt; &lt;br /&gt;Espa&amp;ntilde;ol. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Audiencia(s): &lt;/strong&gt;&lt;br /&gt;Programador/desarrollador de programas. &lt;/p&gt;
&lt;p&gt;&lt;b&gt;Duraci&amp;oacute;n:&lt;/b&gt; &lt;br /&gt;90 Minutos &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fecha de Inicio: &lt;br /&gt;&lt;/strong&gt;viernes,&lt;strong&gt; 19 de febrero&lt;/strong&gt; de 2010 19:00 &lt;strong&gt;Madrid, Par&amp;iacute;s&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;Club.Net UOC : &lt;strong&gt;Conoce las novedades de ASP.NET 4.0&lt;/strong&gt; &lt;br /&gt;&lt;/strong&gt;&lt;strong&gt;Descripci&amp;oacute;n: &lt;br /&gt;&lt;/strong&gt;Conoce las principales novedades en el nuevo release de ASP.NET, en su versi&amp;oacute;n 4.0, revisaremos nuevas caracter&amp;iacute;sticas que nos permiten aumentar nuestra productividad al momento de desarrollar WebSites, veremos demos del nuevo manejo del ClientID, mejoras en el manejo del Viewstate, Routing, Microsoft Ajax Library, Client Templates, Dyinamic Data WebSite y m&amp;aacute;s&amp;rdquo; &lt;br /&gt;&lt;strong&gt;Ponente:&lt;/strong&gt; &lt;strong&gt;Gonzalo P&amp;eacute;rez&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;&lt;span style="text-decoration:underline;"&gt;PD: Si estas en Chile, es GMT(-4) por que puedes ver este Webcast a las 15:00 horas.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="color:#408080;"&gt;Si estas en otras pa&amp;iacute;s y quieres ver a que hora corresponde en tu zona te recomiendo:&lt;/span&gt; &lt;br /&gt;&lt;/strong&gt;&lt;a href="http://www.recursosvoip.com/comun/worldtime.htm" title="http://www.recursosvoip.com/comun/worldtime.htm"&gt;http://www.recursosvoip.com/comun/worldtime.htm&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Los Espero! &lt;br /&gt;Saludos, &lt;br /&gt;Gonzalo&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=163886" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Seminarios/default.aspx">Seminarios</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Eventos/default.aspx">Eventos</category></item><item><title>Por si te lo perdiste, la recopilación de ScreenCast de Fin de Año</title><link>http://geeks.ms/blogs/gperez/archive/2009/12/21/por-si-te-lo-perdiste-la-recopilaci-243-n-de-screencast-de-fin-de-a-241-o.aspx</link><pubDate>Mon, 21 Dec 2009 13:47:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:163155</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=163155</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=163155</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2009/12/21/por-si-te-lo-perdiste-la-recopilaci-243-n-de-screencast-de-fin-de-a-241-o.aspx#comments</comments><description>&lt;p&gt;Hola! quer&amp;iacute;a hacer una recopilaci&amp;oacute;n de los principales screencast que hice durante el a&amp;ntilde;o MVP, jejejej, espero que te sean de ayuda, por si no viste alguno. Sobre el control gauget lo tengo algo abandonado, pero ahora retomo funciones. El RoadMap es :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Conectar el control con PHP (ejemplos con Jquery ,Mysql y PHP)&lt;/li&gt;
&lt;li&gt;Migrar el control a Silverlight 4&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Por mientras te dejo los Screencast de los que hablaba.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Silverlight 3&lt;/strong&gt; &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/gperez/archive/2009/10/18/screencast-mi-primer-desarrollo-con-silverlight-3.aspx" title="http://geeks.ms/blogs/gperez/archive/2009/10/18/screencast-mi-primer-desarrollo-con-silverlight-3.aspx"&gt;http://geeks.ms/blogs/gperez/archive/2009/10/18/screencast-mi-primer-desarrollo-con-silverlight-3.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ajax Control Toolkit &amp;ndash; Sea Dragon&lt;/strong&gt; &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/gperez/archive/2009/10/04/screencast-utilizando-el-nuevo-control-seadragon-del-ajax-controltoolkit.aspx" title="http://geeks.ms/blogs/gperez/archive/2009/10/04/screencast-utilizando-el-nuevo-control-seadragon-del-ajax-controltoolkit.aspx"&gt;http://geeks.ms/blogs/gperez/archive/2009/10/04/screencast-utilizando-el-nuevo-control-seadragon-del-ajax-controltoolkit.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Jquery- Filtar una grilla al presionar una tecla (muy bueno!)&lt;/strong&gt;&lt;a href="http://geeks.ms/blogs/gperez/archive/2009/05/22/tips-filtrar-un-gridview-con-jquery-al-presionar-una-tecla.aspx" title="http://geeks.ms/blogs/gperez/archive/2009/05/22/tips-filtrar-un-gridview-con-jquery-al-presionar-una-tecla.aspx"&gt; &lt;br /&gt;http://geeks.ms/blogs/gperez/archive/2009/05/22/tips-filtrar-un-gridview-con-jquery-al-presionar-una-tecla.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Patrones de Dise&amp;ntilde;o&lt;/strong&gt; &lt;br /&gt;Prototype: &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/gperez/archive/2009/09/01/patrones-de-dise-241-o-screencast-capitulo-4-patr-243-n-prototype.aspx" title="http://geeks.ms/blogs/gperez/archive/2009/09/01/patrones-de-dise-241-o-screencast-capitulo-4-patr-243-n-prototype.aspx"&gt;http://geeks.ms/blogs/gperez/archive/2009/09/01/patrones-de-dise-241-o-screencast-capitulo-4-patr-243-n-prototype.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Builder &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/gperez/archive/2009/08/28/patrones-de-dise-241-o-screencast-capitulo-3-patr-243-n-builder.aspx" title="http://geeks.ms/blogs/gperez/archive/2009/08/28/patrones-de-dise-241-o-screencast-capitulo-3-patr-243-n-builder.aspx"&gt;http://geeks.ms/blogs/gperez/archive/2009/08/28/patrones-de-dise-241-o-screencast-capitulo-3-patr-243-n-builder.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Factory &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/gperez/archive/2009/08/24/patrones-de-dise-241-o-screencast-capitulo-2-patr-243-n-factory.aspx" title="http://geeks.ms/blogs/gperez/archive/2009/08/24/patrones-de-dise-241-o-screencast-capitulo-2-patr-243-n-factory.aspx"&gt;http://geeks.ms/blogs/gperez/archive/2009/08/24/patrones-de-dise-241-o-screencast-capitulo-2-patr-243-n-factory.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Singleton &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/gperez/archive/2009/08/22/patrones-de-dise-241-o-screencast-capitulo-1-patr-243-n-singleton.aspx" title="http://geeks.ms/blogs/gperez/archive/2009/08/22/patrones-de-dise-241-o-screencast-capitulo-1-patr-243-n-singleton.aspx"&gt;http://geeks.ms/blogs/gperez/archive/2009/08/22/patrones-de-dise-241-o-screencast-capitulo-1-patr-243-n-singleton.aspx&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Mi S&amp;uacute;per Control ChalaGauget&lt;/strong&gt; (Me dio varias satisfacciones saber que gente ya lo estaba ocupando, es totalmente gratis, y si necesitas ayuda para configurarlo, solo me escribes y yo participo en ello) &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/gperez/archive/2009/07/13/gauge-mi-control-gauge-silverlight-versi-243-n-beta1-liberada-para-siempre-gratis.aspx" title="http://geeks.ms/blogs/gperez/archive/2009/07/13/gauge-mi-control-gauge-silverlight-versi-243-n-beta1-liberada-para-siempre-gratis.aspx"&gt;http://geeks.ms/blogs/gperez/archive/2009/07/13/gauge-mi-control-gauge-silverlight-versi-243-n-beta1-liberada-para-siempre-gratis.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Gadget en Windows 7&lt;/strong&gt; &lt;br /&gt;&lt;a href="http://geeks.ms/blogs/gperez/archive/2009/06/25/screencast-de-desarrollo-de-gadgets-en-windows-7.aspx" title="http://geeks.ms/blogs/gperez/archive/2009/06/25/screencast-de-desarrollo-de-gadgets-en-windows-7.aspx"&gt;http://geeks.ms/blogs/gperez/archive/2009/06/25/screencast-de-desarrollo-de-gadgets-en-windows-7.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Saludos, &lt;br /&gt;Gonzalo&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=163155" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/ScreenCast/default.aspx">ScreenCast</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/_5B00_Link_5D00_/default.aspx">[Link]</category></item><item><title>[Off-Topic] Recomendable DELL Studio 1557 con Intel Core i7</title><link>http://geeks.ms/blogs/gperez/archive/2009/12/16/off-topic-recomendable-dell-studio-1557-con-intel-core-i7.aspx</link><pubDate>Wed, 16 Dec 2009 21:38:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:162734</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>28</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=162734</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=162734</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2009/12/16/off-topic-recomendable-dell-studio-1557-con-intel-core-i7.aspx#comments</comments><description>&lt;p align="justify"&gt;Hola, no soy el m&amp;aacute;s tuerca en esto del Hw, sin embargo ya tenia que cambiar mi Notebook Toshiba M105-sp381, es un Centrino duo que se ha portado de maravillas, esta un poco &amp;ldquo;enchulado&amp;rdquo; con 4Gb de RAM y disco de 320Gb de 7200 rpm, es un equipo que tiene un poco m&amp;aacute;s de tres a&amp;ntilde;os, por lo que tiene mucho c&amp;oacute;digo que ha pasado por &amp;eacute;l , as&amp;iacute; como tambi&amp;eacute;n muchas presentaciones (y ca&amp;iacute;das y todo eso).&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;Foto del siempre noble Toshiba , junto a Diablo de Blizzard&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/100_5F00_1841_5F00_5166823C.jpg"&gt;&lt;img height="303" width="403" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/100_5F00_1841_5F00_thumb_5F00_21B83DE3.jpg" alt="100_1841" border="0" title="100_1841" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;Eleg&amp;iacute; dentro de mis posibilidades el excelente DELL Studio 15, con procesador Intel i7, de hecho cuando lo compre v&amp;iacute;a fono, no estaba esta opci&amp;oacute;n, a los dos d&amp;iacute;as hubo vi una publicidad, y yo, que casi me kag&amp;hellip;!, llam&amp;eacute; de inmediato a Dell y sin mayor costo cambiaron el procesador (lo que incluye varias mejores, como placa, memorias, etc) , de hecho el valor con un core 2 duo era de 660.000 pesos chilenos y con i7 era de 680.000clp, lo que le inclu&amp;iacute; , fue una pantalla Full HD, ya saben el c&amp;oacute;digo es todo, y los IDE est&amp;aacute;n cada vez m&amp;aacute;s llenos de barras, ejejjee.&lt;/p&gt;
&lt;p align="justify"&gt;&lt;strong&gt;Kratos junto al Dell Studio 15.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/100_5F00_1842_5F00_5F65259F.jpg"&gt;&lt;img height="304" width="404" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/100_5F00_1842_5F00_thumb_5F00_084014DC.jpg" alt="100_1842" border="0" title="100_1842" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ahora un par de &amp;iacute;ndices de performance:&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Lo primero que me sorprendi&amp;oacute; fue el administrador de tareas, los 8 n&amp;uacute;cleos, (4 f&amp;iacute;sicos) de la m&amp;aacute;quina, para ser un notebook, ufff, llama la atenci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_3F39F315.png"&gt;&lt;img height="340" width="445" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_726606B1.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;Iacute;ndice de Experiencia de Usuario con Windows 7, creo que es muy bueno para un port&amp;aacute;til de menos de 2000 d&amp;oacute;lares no?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_35815F12.png"&gt;&lt;img height="119" width="489" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_29133BE9.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_523AD427.png"&gt;&lt;img height="202" width="485" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_7038E21B.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Un chekeo de performance r&amp;aacute;pido con Everest 4.60&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Velocidad Lectura de Memoria: &lt;br /&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_01C8CCE7.png"&gt;&lt;img height="99" width="487" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_048E81DA.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Velocidad de Escritura de Memoria:&lt;br /&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_305ED5C9.png"&gt;&lt;img height="112" width="487" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_6111DD74.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Velocidad de Copia en Memoria: &lt;br /&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_33B047A4.png"&gt;&lt;img height="72" width="489" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_398AEB3D.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Latencia: &lt;br /&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_50D5EFAE.png"&gt;&lt;img height="117" width="489" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_167A79CD.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;CPU Queen (aca ya bajamos, pero lo estamos comparando con equipos de escritorio)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_46551B8E.png"&gt;&lt;img height="185" width="490" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_527695B5.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;CPU PhotoWorxx&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_5AAABB4C.png"&gt;&lt;img height="84" width="489" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_7261F2B2.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;CPU Zlib &lt;br /&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_65879C94.png"&gt;&lt;img height="252" width="494" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_7CD2A105.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;Bueno, luego vi que en Everest podemos sacar un reporte en donde puedes ver en detalle el HW, lo otro que me gusto es que tiene teclado Retro-Iluminado (muy &amp;uacute;til!) Bater&amp;iacute;a de 9 celdas (hasta 3 horas y 45 minutos de autonom&amp;iacute;a) y Tarjeta Gr&amp;aacute;fica ATI Radeon HD 4570, con 512 Mb Independientes de la RAM Principal. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;a target="_blank" href="http://cid-053a660afa3473b3.skydrive.live.com/self.aspx/P%c3%bablico/Report.rar"&gt;Baja el Informe de Everest&lt;/a&gt; &lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Tengo que destacar que el vendedor de DELL se port&amp;oacute; excelente y me ofreci&amp;oacute; promociones, que resultaron en un port&amp;aacute;til excelente y menor precio, de hecho al final de la compra te piden que los recomiendes, yo lo voy a hacer por la buena onda que tuvo.&lt;/p&gt;
&lt;p&gt;Asesor de Ventas: Carlos Cardona &lt;br /&gt;Direcci&amp;oacute;n de Correo Electr&amp;oacute;nico: carlos_cardona (a_r_r_o_b_a) dell.com &lt;br /&gt;Tel&amp;eacute;fono: 685-6800 ext: 5086369&lt;/p&gt;
&lt;p&gt;No te aburro m&amp;aacute;s :P, que est&amp;eacute;n bien! &lt;br /&gt;Saludos, &lt;br /&gt;Gonzalo&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=162734" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/_5B00_Off-Topic_5D00_/default.aspx">[Off-Topic]</category></item><item><title>[Tips] Banner Rotativo con ASP.NET y JQuery</title><link>http://geeks.ms/blogs/gperez/archive/2009/12/06/tips-banner-rotativo-con-asp-net-y-jquery.aspx</link><pubDate>Sat, 05 Dec 2009 23:22:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:161986</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=161986</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=161986</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2009/12/06/tips-banner-rotativo-con-asp-net-y-jquery.aspx#comments</comments><description>&lt;p align="justify"&gt;Hola que tal, ac&amp;aacute; va un peque&amp;ntilde;o tips de como hacer un banner que vaya cambiando de manera c&amp;iacute;clica, si bien hay controles del lado del server que hacen esto, o la posibilidad de que con el control timer,m&amp;aacute;s un updatepanel podamos realizar esto, creo que es mejor simplificar y no sobrecargar nuestra p&amp;aacute;gina con scripts generados.(No digo que sean malas t&amp;eacute;cnicas, de hecho Microsoft Ajax me parece excelente, pero para un banner rotativo, simplifiquemos el asunto)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Primero: La Tabla que contiene los datos de los Banners&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_585CD33B.png"&gt;&lt;img height="141" width="382" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_36B0849D.png" alt="image" border="0" title="image" style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;En donde vamos a tener el id, el texto alt, la url de la imagen y en link a donde nos vamos a dirigir cuando hagamos click.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Segundo: El script Jquery&amp;nbsp; y Net&amp;nbsp; para el Banner&lt;/strong&gt;&lt;/p&gt;
&lt;p align="justify"&gt;Vamos a utilizar un plugin para Jquery que lo puedes descargar y ver las demos en &lt;a href="http://malsup.com/jquery/cycle/" title="http://malsup.com/jquery/cycle/"&gt;http://malsup.com/jquery/cycle/&lt;/a&gt; , tiene muy buenos efectos, en particular esta vez utilizaremos el efecto de Fade.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;- C&amp;oacute;digo JavaScript&lt;/em&gt; &lt;br /&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;script&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;js/jquery-1.3.2.min.js&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;script&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; &lt;span style="color:red;"&gt;src&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;js/jquery.cycle.all.min.js&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;script&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; &lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;$(document).ready(&lt;span style="color:blue;"&gt;function&lt;/span&gt;() { &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;$(&lt;span style="color:#a31515;"&gt;&amp;#39;.slideshow&amp;#39;&lt;/span&gt;).cycle({ &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;fx: &lt;span style="color:#a31515;"&gt;&amp;#39;fade&amp;#39;&lt;/span&gt;&amp;nbsp; &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;}); &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;}); &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;lt;/&lt;/span&gt;&lt;span lang="EN-US" style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;script&lt;/span&gt;&lt;span lang="EN-US" style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;gt;&lt;/span&gt;&lt;span lang="EN-US" style="mso-ansi-language:en-us;"&gt; &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="mso-ansi-language:en-us;"&gt;&lt;em&gt;-C&amp;oacute;digo Declarativo &lt;br /&gt;&lt;/em&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;div&lt;/span&gt; &lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;banner&amp;quot;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;div&lt;/span&gt; &lt;span style="color:red;"&gt;class&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;slideshow&amp;quot;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;&lt;/span&gt;&lt;span style="color:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Literal&lt;/span&gt; &lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;literal_banner&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:#a31515;"&gt;Literal&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;"&gt;div&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;div&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;/span&gt;&lt;em&gt;&lt;br /&gt;- CSS para el Ejemplo &lt;br /&gt;&lt;/em&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;br /&gt;.slideshow&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; { &lt;span style="color:red;"&gt;height&lt;/span&gt;: &lt;span style="color:blue;"&gt;130px&lt;/span&gt;; &lt;span style="color:red;"&gt;width&lt;/span&gt;: &lt;span style="color:blue;"&gt;792px&lt;/span&gt;; } &lt;br /&gt;&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-no-proof:yes;"&gt;.slideshow&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt; &lt;span style="color:#a31515;"&gt;img&lt;/span&gt; { &lt;span style="color:red;"&gt;padding&lt;/span&gt;: &lt;span style="color:blue;"&gt;0px&lt;/span&gt;; }&lt;/span&gt; &lt;/p&gt;
&lt;p&gt;
&lt;p&gt;&lt;em&gt;- C&amp;oacute;digo NET &lt;/em&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;p align="justify"&gt;Voy a utilizar un Dataset&amp;nbsp; m&amp;aacute;s su TableAdapter para que r&amp;aacute;pidamente tenga acceso a los datos de los banners a mostrar:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_74C99F4E.png"&gt;&lt;img height="157" width="195" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_4CB6F02F.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Y el c&amp;oacute;digo a utilizar:&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;Dim&lt;/span&gt; ta &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;New&lt;/span&gt; MiBannerDSTableAdapters.bannersTableAdapter &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp; For&lt;/span&gt; &lt;span style="color:blue;"&gt;Each&lt;/span&gt; img &lt;span style="color:blue;"&gt;As&lt;/span&gt; MiBannerDS.bannersRow &lt;span style="color:blue;"&gt;In&lt;/span&gt; ta.GetData &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; literal_banner.Text &amp;amp;= &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;lt;a href=&amp;#39;&amp;quot;&lt;/span&gt; &amp;amp; img.banner_link &amp;amp; &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;#39;&amp;gt;&amp;lt;img src=&amp;#39;&amp;quot;&lt;/span&gt; &amp;amp; img.banner_imgUrl &amp;amp; &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;#39; alt=&amp;#39;&amp;quot;&lt;/span&gt; &amp;amp; img.banner_alt &amp;amp; &lt;span style="color:#a31515;"&gt;&amp;quot;&amp;#39; width=&amp;quot;&amp;quot;792px&amp;quot;&amp;quot; height=&amp;quot;&amp;quot;130px&amp;quot;&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&amp;quot; &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp; Next &lt;br /&gt;&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Sub&lt;/span&gt;&lt;/span&gt;
&lt;p&gt;Como vez, lo que estoy haciendo simplemente es escribir en el literal el c&amp;oacute;digo HTML recorriendo la colecci&amp;oacute;n de DataRows que son devueltos por el tableAdapter, obviamente lo puedes hacer tambi&amp;eacute;n con DataReades, Linq, EF,etc. &lt;br /&gt;&lt;strong&gt;&lt;br /&gt;Cuarto : Configurar para ocultarlo, puede que el usuario quiera tener toda la pantalla disponible para su uso.&lt;/strong&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;p align="justify"&gt;Hay veces que el banner puede molestar al usuario, el cual desea m&amp;aacute;s &amp;aacute;rea de trabajo en la pantalla, entonces ser&amp;iacute;a bueno poder darle esta opci&amp;oacute;n al usuario, por lo que vamos a tener un link de Mostrar y Ocultar Pantalla. La idea es que pinche sobre una etiqueta y se oculte el banner, luego se pinche sobre la misma etiqueta y aparezca nuevamente el Banner. &lt;br /&gt;&lt;br /&gt;- &lt;em&gt;C&amp;oacute;digo JavaScript&lt;/em&gt; &lt;br /&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;br /&gt;$(&lt;span style="color:#a31515;"&gt;&amp;quot;#msg&amp;quot;&lt;/span&gt;).click(&lt;span style="color:blue;"&gt;function&lt;/span&gt;() { &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&lt;span style="color:blue;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/span&gt; ($(&lt;span style="color:#a31515;"&gt;&amp;quot;#msg&amp;quot;&lt;/span&gt;).html() == &lt;span style="color:#a31515;"&gt;&amp;#39;[-]Banner&amp;#39;&lt;/span&gt;) { &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#msg&amp;quot;&lt;/span&gt;).html(&lt;span style="color:#a31515;"&gt;&amp;#39;[+]Banner&amp;#39;&lt;/span&gt;); &lt;br /&gt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#banner&amp;quot;&lt;/span&gt;).slideUp(1500); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;} &lt;span style="color:blue;"&gt;else&lt;/span&gt; { &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;$(&lt;span style="color:#a31515;"&gt;&amp;quot;#msg&amp;quot;&lt;/span&gt;).html(&lt;span style="color:#a31515;"&gt;&amp;#39;[-]Banner&amp;#39;&lt;/span&gt;); &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(&lt;span style="color:#a31515;"&gt;&amp;quot;#banner&amp;quot;&lt;/span&gt;).slideDown(1500); &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;});&lt;/span&gt;
&lt;p&gt;&lt;em&gt;- Etiqueta HTML&lt;/em&gt;&lt;/p&gt;
&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;color:#a31515;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt;span&lt;/span&gt;&lt;span lang="EN-US" style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-ansi-language:en-us;mso-no-proof:yes;"&gt; &lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;msg&amp;quot;&amp;gt;&lt;/span&gt;[-]Banner&lt;span style="color:blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#a31515;"&gt;span&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt; &lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;strong&gt;Resultado Final&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;
&lt;p align="justify"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_04893453.png"&gt;&lt;img height="100" width="460" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_716807A6.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;El cual va cambiando con un efecto de FADE, adem&amp;aacute;s si apretamos [-]Banner se oculta con un efecto de slideUp.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_29A67EBF.png"&gt;&lt;img height="173" width="280" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_2142A968.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p align="justify"&gt;Te dejo entonces el Ejemplo (con base y todo) para que lo pruebes.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://cid-053a660afa3473b3.skydrive.live.com/self.aspx/P%c3%bablico/banner1.zip"&gt;&lt;strong&gt;DESCARGALO AC&amp;Aacute;&lt;/strong&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Espero que te haya servido, &lt;br /&gt;Saludos, &lt;br /&gt;Gonzalo &lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=161986" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Tips/default.aspx">Tips</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/jquery/default.aspx">jquery</category></item><item><title>[Tips] JQuery Ribbon 2007</title><link>http://geeks.ms/blogs/gperez/archive/2009/12/04/tips-jquery-ribbon-2007.aspx</link><pubDate>Fri, 04 Dec 2009 05:01:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:161900</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=161900</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=161900</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2009/12/04/tips-jquery-ribbon-2007.aspx#comments</comments><description>&lt;p align="justify"&gt;Hola!, estaba navegando para encontrar unos script de Jquery, y me encontr&amp;eacute; con este, JQuery Ribbon, esta bastante f&amp;aacute;cil de usar, quer&amp;iacute;a compartirlo con ustedes, miren que bueno esta:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_4E7CF495.png"&gt;&lt;img height="265" width="574" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_57A90A09.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;Con posibilidad de cambiar los tags:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_65B7D339.png"&gt;&lt;img height="140" width="396" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_19139696.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" /&gt;&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;B&amp;aacute;jalo desde ac&amp;aacute;:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://jqueryribbon.codeplex.com/" title="http://jqueryribbon.codeplex.com/"&gt;http://jqueryribbon.codeplex.com/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Saludos! &lt;br /&gt;Gonzalo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=161900" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/jquery/default.aspx">jquery</category></item><item><title>[Tutorial] Microsoft Ajax Minifier – Optimiza tus archivos Javascript</title><link>http://geeks.ms/blogs/gperez/archive/2009/11/17/tutoturial-microsoft-ajax-minifier-optimiza-tus-archivos-javascript.aspx</link><pubDate>Mon, 16 Nov 2009 23:31:55 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:160646</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=160646</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=160646</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2009/11/17/tutoturial-microsoft-ajax-minifier-optimiza-tus-archivos-javascript.aspx#comments</comments><description>&lt;p align="justify"&gt;Hola, que tal, comienzo una serie de post y screencast sobre como mejorar la performance de nuestras aplicaciones Web, en especial (obviamente) ASP.NET, hay algunos datos que van a servir para PHP, estoy leyendo un libro buenísimo sobre ….&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#808000"&gt;Microsoft Ajax Minifier&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Es una herramienta que nos va a permitir mejorar el rendimiento de nuestras aplicaciones que utilizan Javascript, como las ajax (que como ya saben , utilizan bastante), ya que reduce el tamaño de los mismos, admitiendo dos niveles de minificación (diferenciando de compresión).&lt;/p&gt;  &lt;p align="justify"&gt;&lt;u&gt;&lt;strong&gt;Normal Crunching&lt;/strong&gt;       &lt;br /&gt;&lt;/u&gt;Se realiza el proceso de minificación del js, eliminando los espacios en blanco, puntos y comas y llaves innecesarias, como así también los comentarios (que son necesarios en tiempo de desarrollo, pero en explotación no)&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="510"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="508"&gt;         &lt;p align="left"&gt;&lt;strong&gt;Código Normal&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td valign="top" width="508"&gt;         &lt;pre&gt;if ( a == 0 )
{
    a = 10;
}&lt;/pre&gt;
      &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="508"&gt;
        &lt;p align="left"&gt;&lt;strong&gt;Normal Crunching&lt;/strong&gt;&lt;/p&gt;
      &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="508"&gt;if(a==0)a=10;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p align="justify"&gt;&lt;strong&gt;&lt;u&gt;Hyper Crunching&lt;/u&gt; 

    &lt;br /&gt;&lt;/strong&gt;Se realiza el proceso de minificación, además acortando los nombres de las variables locales , nombres de funciones y eliminando lo innecesario.&lt;/p&gt;

&lt;table border="0" cellspacing="0" cellpadding="2" width="507"&gt;&lt;tbody&gt;
    &lt;tr&gt;
      &lt;td valign="top" width="505"&gt;&lt;strong&gt;Código Normal&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="505"&gt;
        &lt;pre&gt;function DivideTwoNumbers(numerator, denominator, unsedparameter )
{
    return numerator / denominator;
}&lt;/pre&gt;
      &lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="505"&gt;&lt;strong&gt;Hyper Crunching&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;

    &lt;tr&gt;
      &lt;td valign="top" width="505"&gt;function a(a,b){return a/b}&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;&lt;/table&gt;

&lt;p&gt;El Microsoft Ajax Minifier incluye los siguientes componentes:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Herramienta de Línea de Comandos:&lt;/strong&gt; Nos permite minimizar los archivos JavaScript mediante la línea de comandos. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;MSBuild Task:&lt;/strong&gt; Permite minificar el archivo Javascript en Visual Studio, automáticamente cuando generas tu proyecto. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;Componente&lt;/strong&gt;: Permite usar el Microsoft Ajax Minifier programáticamente. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#808000"&gt;Ejemplo 1- Pequeña Sección de Código&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Vamos a tener un archivo llamado funcion.js el que tiene el siguiente contenido (tomado prestado por ahi…)&lt;/p&gt;

&lt;p style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;function&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt; borra(opt) { 
    &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; temp = opt.options.length; 

    &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;for&lt;/span&gt; (&lt;span style="color:blue;"&gt;var&lt;/span&gt; x = 0; x &amp;lt; temp; x++) { 

    &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;opt.options[temp - x] = &lt;span style="color:blue;"&gt;null&lt;/span&gt;; 

    &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;} 

    &lt;br /&gt;&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;}&lt;/span&gt;&lt;/p&gt;

&lt;p style="line-height:normal;margin-bottom:0pt;mso-layout-grid-align:none;" class="MsoNormal"&gt;Al aplicar MAM con &lt;strong&gt;Normal Crunching&lt;/strong&gt;, por línea de comandos:&lt;/p&gt;

&lt;p&gt;C:\Program Files\Microsoft\Microsoft Ajax Minifier&amp;gt;ajaxmin prueba.js -o prueba.m 
  &lt;br /&gt;in.js.&lt;/p&gt;

&lt;p&gt;Veamos los resultados:&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_797AB055.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_0F14E8F3.png" width="527" height="49" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;El archivo pesa ahora 92 bytes, en comparación con los 123bytes del archivo normal, si vemos el contenido del archivo veremos: 
  &lt;br /&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;
    &lt;br /&gt;function&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt; borra(opt) { &lt;span style="color:blue;"&gt;for&lt;/span&gt; (&lt;span style="color:blue;"&gt;var&lt;/span&gt; temp = opt.options.length, x = 0; x &amp;lt; temp; x++) opt.options[temp - x] = &lt;span style="color:blue;"&gt;null&lt;/span&gt; }&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt;&lt;u&gt;Es decir el archivo final es aprox 25% más pequeño que el original&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;Ahora a aplicar &lt;strong&gt;Hyper Crunching&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;C:\Program Files\Microsoft\Microsoft Ajax Minifier&amp;gt;ajaxmin -hc prueba.js -o prue 
  &lt;br /&gt;ba.min.hc.js&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image5_5F00_6D491061.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image5_5F00_thumb_5F00_7323B3FA.png" width="530" height="72" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;u&gt;El archivo pesa 77 bytes, por lo que es 37% menor al archivo original, si vemos el contenido del archivo veremos:&lt;/u&gt; 

  &lt;br /&gt;

  &lt;br /&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;color:blue;font-size:10pt;mso-no-proof:yes;"&gt;function&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Courier New&amp;#39;;font-size:10pt;mso-no-proof:yes;"&gt; borra(c) { &lt;span style="color:blue;"&gt;for&lt;/span&gt; (&lt;span style="color:blue;"&gt;var&lt;/span&gt; b = c.options.length, a = 0; a &amp;lt; b; a++) c.options[b - a] = &lt;span style="color:blue;"&gt;null&lt;/span&gt; }&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#808000"&gt;Ejemplo 2 – Archivo Real tomado de un Website&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p align="justify"&gt;Para este ejemplo “tome prestado” un archivo JS de un Website de una Universidad, el archivo pesa 29.778 Bytes. No vamos a detallar nuevamente el proceso, en lugar de eso , quiero que veamos una tabla comparativa de los resultados:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_5562293B.png"&gt;&lt;img style="border-right-width:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_5AD099DF.png" width="510" height="316" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Utilizar Microsoft Ajax Minifier desde Visual Studio&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cuando terminamos la instalación vemos que se crea un nuevo MSBuild en C:\program Files\MSBuild\Microsoft\MicrosoftAjax&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_466AD454.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_5552036E.png" width="513" height="119" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p align="justify"&gt;Lo que debemos hacer ahora, es modificar el archivo del proyecto (.vbproj) , para esto lo puedes hacer con notepad o también puedes descargar el proyecto mediante visual studio y luego modificar el archivo, dentro del tag &amp;lt;Proyect&amp;gt; vamos a incluir lo siguiente:&lt;/p&gt;

&lt;p&gt;&amp;lt;Import Project=&amp;quot;$(MSBuildExtensionsPath)\Microsoft\MicrosoftAjax\ajaxmin.tasks&amp;quot; /&amp;gt;
  &lt;br /&gt; &amp;lt;Target Name=&amp;quot;AfterBuild&amp;quot;&amp;gt;

  &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;ItemGroup&amp;gt;

  &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;JS Include=&amp;quot;**\*.js&amp;quot; Exclude=&amp;quot;**\*.min.js;Scripts\*.js&amp;quot; /&amp;gt;

  &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;/ItemGroup&amp;gt;

  &lt;br /&gt;&amp;#160;&amp;#160; &amp;lt;AjaxMin SourceFiles=&amp;quot;@(JS)&amp;quot; SourceExtensionPattern=&amp;quot;\.js$&amp;quot; TargetExtension=&amp;quot;.min.js&amp;quot; /&amp;gt;

  &lt;br /&gt; &amp;lt;/Target&amp;gt;&lt;/p&gt;

&lt;p&gt;Luego guardar y al recargar el proyecto elije la opción cargar normalmente del cuadro de diálogo:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_0BDFAEB3.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_6B484933.png" width="522" height="360" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;p align="justify"&gt;Ahora al presionar F5(Build) , vamos ver que se genera automáticamente el archivo js min.Si no lo notamos de inmediato, es por que no hemos puesto la opción de ver todos los archivos:&lt;/p&gt;

&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_6C108950.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_6A5FBD7C.png" width="201" height="225" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Ahora puedes ver el archivo generado funciones.min.js ya en tu proyecto, todo archivo JS va a ser minificado :).&lt;/p&gt;

&lt;p align="justify"&gt;Una aclaración, esto no es compresión, sino minificación, la compresión la podemos hacer con gzip y obtenemos aún mejores resultados (a costa de tiempo de cpu).&lt;/p&gt;

&lt;p&gt;Espero que te sirva!
  &lt;br /&gt;Gonzalo.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=160646" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Tips/default.aspx">Tips</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/javascript/default.aspx">javascript</category></item><item><title>[Tips] RockScroll Una gran ayuda para Visual Studio</title><link>http://geeks.ms/blogs/gperez/archive/2009/11/09/tips-rockroll-una-gran-ayuda-para-visual-studio.aspx</link><pubDate>Mon, 09 Nov 2009 14:03:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:160164</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=160164</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=160164</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2009/11/09/tips-rockroll-una-gran-ayuda-para-visual-studio.aspx#comments</comments><description>&lt;p align="justify"&gt;Hola que tal? Quer&amp;iacute;a compartir este tip, que no es nuevo, pero sirve mucho, o por lo menos a m&amp;iacute;, se trata de RockScroll, una utilidad para Visual Studio que nos permite ver una vista en miniatura (o mega miniatura) al lado de nuestro Scroll, y destacando en esta secci&amp;oacute;n cuando seleccionamos, por ejemplo una variable, todas las partes dentro del c&amp;oacute;digo del documento en donde se repite esa variable, es muy bueno! , nos permite ahorrar tiempo, que es lo que se necesita.&lt;/p&gt;
&lt;p align="center"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_625561AB.png"&gt;&lt;img height="393" width="528" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_33AF32FC.png" alt="image" border="0" title="image" style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" /&gt;&lt;/a&gt;(Imagen tomada del Blog de Scott Hanselman)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Desc&amp;aacute;rgalo aqu&amp;iacute;:&lt;/strong&gt; &lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/content/binary/RockScrollv1.msi" title="Rocky Downs&amp;#39; RockScroll for Visual Studio"&gt;Rocky Downs&amp;#39; RockScroll for Visual Studio&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Puedes ver el Blog de Scott Hanselman, para m&amp;aacute;s detalles.&lt;/strong&gt; &lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/IntroducingRockScroll.aspx" title="http://www.hanselman.com/blog/IntroducingRockScroll.aspx"&gt;http://www.hanselman.com/blog/IntroducingRockScroll.aspx&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Saludos, &lt;br /&gt;Gonzalo&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=160164" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/Tips/default.aspx">Tips</category></item><item><title>[Off-Topic] Pensamiento Freak: Hasta cuando vamos a seguir con los íconos de guardar con un disquete?</title><link>http://geeks.ms/blogs/gperez/archive/2009/11/05/off-topic-pensamiento-freak-hasta-cuando-vamos-a-seguir-con-los-237-conos-de-guardar-con-un-disquete.aspx</link><pubDate>Thu, 05 Nov 2009 03:29:30 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:159942</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>10</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=159942</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=159942</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2009/11/05/off-topic-pensamiento-freak-hasta-cuando-vamos-a-seguir-con-los-237-conos-de-guardar-con-un-disquete.aspx#comments</comments><description>&lt;p&gt;&lt;strong&gt;¿Cuando fue la última vez que guardaron algo en un disquete?&lt;/strong&gt;&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="536"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="130"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_2CB2DD9D.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_129ED1E1.png" width="112" height="112" /&gt;&lt;/a&gt;&lt;/td&gt;        &lt;td valign="top" width="404"&gt;Solo eso, estoy mutando desarrollando, y de repente me detuve en el botón de guardar, siempre con el disquete, cuando los computadores venían con una unidad de discos! ,las clásicas 1.44. Tengo alumnos que no conocen los disquetes, solo pendrive y dvd, sin embargo el ícono sigue.         &lt;br /&gt;          &lt;br /&gt;Jajajaj esto es muy off-topic y a nadie de interesa!&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Saludos y sigo programando&lt;/strong&gt;….     &lt;br /&gt;PD: Apuesto que también les ha pasado, el cerebro como mecanismo de autoprotección ante la diarrea craneo-encéfalica de varios días programando y durmiendo 4 horas diarias puede producir.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=159942" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/_5B00_Off-Topic_5D00_/default.aspx">[Off-Topic]</category></item><item><title>Ejemplo paso a paso de Routing en ASP.NET 4.0</title><link>http://geeks.ms/blogs/gperez/archive/2009/10/26/ejemplo-paso-a-paso-de-routing-en-asp-net-4-0.aspx</link><pubDate>Mon, 26 Oct 2009 15:44:47 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:158942</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>6</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=158942</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=158942</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2009/10/26/ejemplo-paso-a-paso-de-routing-en-asp-net-4-0.aspx#comments</comments><description>&lt;p&gt;Otra de las características soportadas por ASP.NET 4.0 ,y de las que se habló en el TEchdays 2009, las cuales dije que iba a postear más en detalle, es del Routing,&lt;strong&gt; lo bueno es que en la versión de ASP.NET 4.0 es mucho más sencillo de utilizar que en versiones anteriores. &lt;/strong&gt;La idea principal es que configuramos nuestra aplicación&amp;#160; para aceptar request de URLs que no se corresponden a un archivo físico en nuestro servidor. En su lugar, podemos utilizar el enrutamiento para definir&amp;#160; direcciones URL que sean significativas para los usuarios , al estilo Wikipedia por ejemplo,&amp;#160; y que pueden ayudar con la optimización de los motores de búsqueda (SEO) . Por ejemplo, la URL de una página que muestra los libros en una aplicación existente podría ser similar al ejemplo siguiente:    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://website/libros.aspx?libroid=param"&gt;       &lt;br /&gt;http://website/libros.aspx?libroid=param&lt;/a&gt;      &lt;br /&gt;&lt;/strong&gt;Usando el ruteo,&amp;#160; podemos configurar nuestra aplicación para que la siguiente URL sea equivalente:    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://website/libro/nombre/edicion"&gt;http://website/libro/nombre/edicion&lt;/a&gt;      &lt;br /&gt;      &lt;br /&gt;&lt;/strong&gt;Obviamente el segundo link es mucho más amigable al usuario, de hecho es por eso que se le llaman Friendly Urls, con una inspección rápida el usuario puede saber de que trata dicha URL.&lt;/p&gt;  &lt;p&gt;Si bien este enrutamiento esta disponible en ASP.NET 3.5 SP1, ASP.NET 4.0 incluye unas características que lo hacen más fácil de usar, como veremos en el siguiente ejemplo:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Paso 1 -&amp;#160; Crear la Referencia     &lt;br /&gt;&lt;/strong&gt;A System.Web.Routing &lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_686B52E9.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_77528203.png" width="416" height="328" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Paso 2 – Agregar lo necesario a nuestro Global.asax&lt;/strong&gt; ( y sí!, en vb.net! jejej)&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:consolas;background:yellow;font-size:9.5pt;mso-highlight:yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-family:consolas;color:blue;font-size:9.5pt;"&gt;@&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;"&gt; &lt;span style="color:maroon;"&gt;Application&lt;/span&gt; &lt;span style="color:red;"&gt;Language&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;VB&amp;quot;&lt;/span&gt; &lt;span style="background:yellow;mso-highlight:yellow;"&gt;%&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:consolas;background:yellow;font-size:9.5pt;mso-highlight:yellow;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="font-family:consolas;color:blue;font-size:9.5pt;"&gt;@&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;"&gt; &lt;span style="color:maroon;"&gt;Import&lt;/span&gt; &lt;span style="color:red;"&gt;Namespace&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;System.Web.Routing&amp;quot;&lt;/span&gt; &lt;span style="background:yellow;mso-highlight:yellow;"&gt;%&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:consolas;color:blue;font-size:9.5pt;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:consolas;color:maroon;font-size:9.5pt;"&gt;script&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;"&gt; &lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot;&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;Public&lt;/span&gt; &lt;span style="color:blue;"&gt;Sub&lt;/span&gt; RegistraRuta()      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;RouteTable&lt;/span&gt;.Routes.MapPageRoute(&lt;span style="color:#a31515;"&gt;&amp;quot;Libro&amp;quot;&lt;/span&gt;, _      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;libreria/{nombre}/{*edicion}&amp;quot;&lt;/span&gt;, _      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:#a31515;"&gt;&amp;quot;~/libros.aspx&amp;quot;&lt;/span&gt;)      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160; End&lt;/span&gt; &lt;span style="color:blue;"&gt;Sub       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:consolas;font-size:9.5pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;Sub&lt;/span&gt; Application_Start(&lt;span style="color:blue;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Object&lt;/span&gt;, &lt;span style="color:blue;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt;)      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;RegistraRuta()      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160; End&lt;/span&gt; &lt;span style="color:blue;"&gt;Sub&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Pero detengámonos un poco en RegistraRuta, en donde&amp;#160; MapPageRoute recibe como parámetros el nombre del esta llave de ruta (keyRoute), la ruta, y la página física a la que será referenciada, &lt;strong&gt;no es necesario que la página se llame igual que el prefijo del segundo parámetro,&lt;/strong&gt;también es posible, si así lo deseamos,&amp;#160; pasar como parámetro al método RegistrarRuta una colección RouteCollection. El asterisco al lado del parámetro edición indica que es opcional.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Paso 3 – Recibir los Parámetros&lt;/strong&gt;&lt;/p&gt;  &lt;table border="0" cellspacing="0" cellpadding="2" width="537"&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign="top" width="200"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_7CC0F2A7.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_42D1AFBB.png" width="220" height="186" /&gt;&lt;/a&gt; &lt;/td&gt;        &lt;td valign="top" width="335"&gt;         &lt;p align="justify"&gt;Como se ve, mi aplicación es bastante sencilla, recuerda que debemos tener una página que se llame libros.aspx ya que definimos en el mapa de rutas que todo lo que “entra” por librería, se va a mapear a la pagina libros.aspx.           &lt;br /&gt;            &lt;br /&gt;Ahora necesitamos recibir este parámetro, para esto ocupamos en el evento Page_Load de nuestra página:&lt;/p&gt;          &lt;p align="justify"&gt;&lt;strong&gt;Page.RouteData.Values(&amp;quot;param&amp;quot;).ToString&lt;/strong&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;En nuestro caso:&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:consolas;color:blue;font-size:9.5pt;mso-ansi-language:en-us;" lang="EN-US"&gt;Protected&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;mso-ansi-language:en-us;" lang="EN-US"&gt; &lt;span style="color:blue;"&gt;Sub&lt;/span&gt; Page_Load(&lt;span style="color:blue;"&gt;ByVal&lt;/span&gt; sender &lt;span style="color:blue;"&gt;As&lt;/span&gt; &lt;span style="color:blue;"&gt;Object&lt;/span&gt;, &lt;span style="color:blue;"&gt;ByVal&lt;/span&gt; e &lt;span style="color:blue;"&gt;As&lt;/span&gt; System.&lt;span style="color:#2b91af;"&gt;EventArgs&lt;/span&gt;) &lt;span style="color:blue;"&gt;Handles&lt;/span&gt; &lt;span style="color:blue;"&gt;Me&lt;/span&gt;.Load      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;mso-ansi-language:en-us;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;lb_nombreLibro.Text = Page.RouteData.Values(&lt;span style="color:#a31515;"&gt;&amp;quot;nombre&amp;quot;&lt;/span&gt;).ToString      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;mso-ansi-language:en-us;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;If&lt;/span&gt; &lt;span style="color:blue;"&gt;Not&lt;/span&gt; Page.RouteData.Values(&lt;span style="color:#a31515;"&gt;&amp;quot;edicion&amp;quot;&lt;/span&gt;) &lt;span style="color:blue;"&gt;Is&lt;/span&gt; &lt;span style="color:blue;"&gt;Nothing&lt;/span&gt; &lt;span style="color:blue;"&gt;Then       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;mso-ansi-language:en-us;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;lb_edicionLibro.Text = Page.RouteData.Values(&lt;span style="color:#a31515;"&gt;&amp;quot;edicion&amp;quot;&lt;/span&gt;).ToString      &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;mso-ansi-language:en-us;" lang="EN-US"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:consolas;color:blue;font-size:9.5pt;"&gt;End&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;"&gt; &lt;span style="color:blue;"&gt;If       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;"&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color:blue;"&gt;End&lt;/span&gt; &lt;span style="color:blue;"&gt;Sub&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Como podrás ver, tengo dos labels que los voy a setear con los parámetros del ruteo. La página tiene la siguiente forma.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_21720A1F.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_4BDE3B3C.png" width="319" height="96" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt; Y al ejecutar la URL en nuestro Browser:   &lt;br /&gt;&lt;a title="http://localhost:23631/URLRouting/libreria/Necronomicon/666" href="http://localhost:23631/URLRouting/libreria/Necronomicon/666"&gt;http://localhost:23631/URLRouting/libreria/Necronomicon/666&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_38BD0E90.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_377875B1.png" width="547" height="197" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt; Estamos ya en condiciones de utilizar nuestro ruteo, muy fácil.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Pregunta: ¿Y si estoy utilizando un DataSource con parámetros de entrada mediante URL?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Podemos setear nuestros DataSource para que reciban desde el parámetro proveniente del routeo, de hecho si agregamos una base de datos, luego una grilla&amp;#160; y creamos un sqldatasource, cuando seleccionamos &amp;quot;Where…” para configurar el subconjunto de datos, veremos la opción Route (la última de la lista) y además podemos setear el RouteKey y su valor por defecto:&lt;/p&gt;  &lt;p align="justify"&gt;&amp;#160;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_2F14A05A.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_1B8740B9.png" width="428" height="306" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;Luego le damos agregar, lo que nos genera en nuestro código declarativo:   &lt;br /&gt;    &lt;br /&gt;&lt;span style="font-family:consolas;font-size:9.5pt;mso-ansi-language:en-us;" lang="EN-US"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;SelectParameters&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:consolas;font-size:9.5pt;mso-ansi-language:en-us;" lang="EN-US"&gt;&lt;span style="color:blue;"&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;asp&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;RouteParameter&lt;/span&gt; &lt;span style="color:red;"&gt;Name&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;NombreLibro&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;RouteKey&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;nombre&amp;quot;&lt;/span&gt; &lt;span style="color:red;"&gt;Type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;String&amp;quot;&lt;/span&gt; &lt;span style="color:blue;"&gt;/&amp;gt;       &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:consolas;color:blue;font-size:9.5pt;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-family:consolas;color:maroon;font-size:9.5pt;"&gt;SelectParameters&lt;/span&gt;&lt;span style="font-family:consolas;color:blue;font-size:9.5pt;"&gt;&amp;gt;     &lt;br /&gt;&lt;/span&gt;    &lt;br /&gt;&lt;strong&gt;Probando… Funciona impecable :D     &lt;br /&gt;&lt;/strong&gt;    &lt;br /&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_1A42A7DA.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:inline;border-top:0px;border-right:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_5FE731F8.png" width="493" height="319" /&gt;&lt;/a&gt; &lt;span style="font-family:consolas;color:blue;font-size:9.5pt;"&gt;&lt;/span&gt;    &lt;p&gt;&lt;/p&gt; &lt;/p&gt;  &lt;p&gt;Espero que este tutorial te haya servido para introducirte a las nuevas características de ASP.NET 4.0   &lt;br /&gt;    &lt;br /&gt;Si quieres el ejemplo:    &lt;br /&gt;&lt;strong&gt;&lt;a href="http://cid-053a660afa3473b3.skydrive.live.com/self.aspx/P%c3%bablico/demoRouting.zip" target="_blank"&gt;Descárgalo aquí&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Saludos,   &lt;br /&gt;Gonzalo&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=158942" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/msdn/default.aspx">msdn</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category></item><item><title>[ScreenCast] Mi Primer desarrollo con Silverlight 3</title><link>http://geeks.ms/blogs/gperez/archive/2009/10/18/screencast-mi-primer-desarrollo-con-silverlight-3.aspx</link><pubDate>Sun, 18 Oct 2009 03:01:08 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:158259</guid><dc:creator>Gonzalo Perez</dc:creator><slash:comments>7</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/rsscomments.aspx?PostID=158259</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://geeks.ms/blogs/gperez/commentapi.aspx?PostID=158259</wfw:comment><comments>http://geeks.ms/blogs/gperez/archive/2009/10/18/screencast-mi-primer-desarrollo-con-silverlight-3.aspx#comments</comments><description>&lt;p&gt;Hola, tal cual dice el título del Post, hice un ScreenCast con un pequeño desarrollo , (muy pequeño) sobre Silverlight, de hecho es un ejemplo, solo suma dos números, que útil no?jejeje, pero la idea es mostrar lo sencillo que es iniciarse en Silverlight.&lt;/p&gt;  &lt;p&gt;Es este ScreenCast veras intro a Diseño con Blend3, Intro a Animaciones, y como configurar la aplicación para que sea ejecutable fuera del Browser.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_45B362D8.png"&gt;&lt;img style="border-bottom:0px;border-left:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;" title="image" border="0" alt="image" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/gperez/image_5F00_thumb_5F00_1FAD8CB5.png" width="370" height="368" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Entonces, te dejo el video, te recomiendo verlo en pantalla completa, si ve mejor (el video esta en 1024 x 768 y dura &lt;strike&gt;entretenidos &lt;/strike&gt;18 minutos y 16 segundos.&lt;/p&gt; &lt;object width="530" height="398"&gt;&lt;param name="allowfullscreen" value="true" /&gt;&lt;param name="allowscriptaccess" value="always" /&gt;&lt;param name="movie" value="http://vimeo.com/moogaloop.swf?clip_id=7120340&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" /&gt;&lt;embed src="http://vimeo.com/moogaloop.swf?clip_id=7120340&amp;amp;server=vimeo.com&amp;amp;show_title=1&amp;amp;show_byline=1&amp;amp;show_portrait=0&amp;amp;color=00ADEF&amp;amp;fullscreen=1" type="application/x-shockwave-flash" allowscriptaccess="always" width="530" height="398"&gt;&lt;/embed&gt;&lt;/object&gt;  &lt;p&gt;&lt;a href="http://vimeo.com/7120340"&gt;Demo de Aplicación usando Silverlight&lt;/a&gt; from &lt;a href="http://vimeo.com/user2241434"&gt;Gonzalo Pérez C.&lt;/a&gt; on &lt;a href="http://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Espero que te sirva, nos vemos!   &lt;br /&gt;Saludos,    &lt;br /&gt;Gonzalo&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=158259" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/gperez/archive/tags/AJAX/default.aspx">AJAX</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/msdn/default.aspx">msdn</category><category domain="http://geeks.ms/blogs/gperez/archive/tags/ScreenCast/default.aspx">ScreenCast</category></item></channel></rss>