<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://weblogs.asp.net/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>Eugenio Estrada's Weblog : JavaScript</title><link>http://weblogs.asp.net/eecsaky/archive/tags/JavaScript/default.aspx</link><description>Tags: JavaScript</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP1 (Build: 20510.895)</generator><item><title>AJAX: Cómo “embeber” un archivo JavaScript en una DLL</title><link>http://weblogs.asp.net/eecsaky/archive/2008/08/24/ajax-c-243-mo-embeber-un-archivo-javascript-en-una-dll.aspx</link><pubDate>Sun, 24 Aug 2008 15:16:33 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6559937</guid><dc:creator>Eugenio Estrada</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/eecsaky/rsscomments.aspx?PostID=6559937</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/eecsaky/commentapi.aspx?PostID=6559937</wfw:comment><comments>http://weblogs.asp.net/eecsaky/archive/2008/08/24/ajax-c-243-mo-embeber-un-archivo-javascript-en-una-dll.aspx#comments</comments><description>&lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Recordando el post sobre &lt;a href="http://geeks.ms/blogs/eecsaky/archive/2008/08/24/ajax-c-243-mo-crear-nuestro-propio-updateprogress.aspx"&gt;cómo crear un UpdateProgress&lt;/a&gt;, puede ser que queramos que nuestro JavaScript lo queramos incrustar en una DLL, por lo que sea, para proteger el JavaScript que no llega al cliente, por ejemplo.&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;h3&gt;Objetivo:&lt;/h3&gt;  &lt;p&gt;Debemos desarrollar una especie de librería de clases, pero en vez de clases .NET, JavaScript. Recuperar luego ese recurso será muy sencillo, al igual que incrustarlo.&lt;/p&gt;  &lt;h3&gt;Requisitos:&lt;/h3&gt;  &lt;p&gt;Al igual que en el anterior artículo, &lt;strike&gt;copy-paste&lt;/strike&gt;, cualquier versión de ASP.NET AJAX nos sirve, tanto la 1.0 (para .NET 2.0) descargable en &lt;a href="http://ajax.asp.net/"&gt;http://ajax.asp.net/&lt;/a&gt;, como la versión nativa de ASP.NET AJAX. Si usas VS 2008 (o Visual Web Developer 2008 Express Edition) no tendrás que descargar nada.&lt;/p&gt;  &lt;h3&gt;Análisis:&lt;/h3&gt;  &lt;p&gt;Si tenemos una libreria en nuestra aplicación web sirve, sino debemos crear una libreria de clases de C#, en mi ejemplo se llamará &lt;strong&gt;AjaxLibrary&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Por lo tanto, necesitamos un archivo .js que contenga el código JavaScript del anterior artículo, &lt;strong&gt;ClientLibrary.js&lt;/strong&gt; en este:&lt;/p&gt; &lt;form id="aspnetForm" name="aspnetForm" action="http://geeks.ms/blogs/eecsaky/archive/2008/08/24/ajax-c-243-mo-crear-nuestro-propio-updateprogress.aspx" method="post"&gt;   &lt;div class="mainwrapper" id="wrapper"&gt;     &lt;div id="content"&gt;       &lt;div class="entryview"&gt;         &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: &amp;#39;Courier New&amp;#39;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;function&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; pageLoad() { &lt;/span&gt;&lt;/p&gt;          &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginPageRequest); &lt;/span&gt;&lt;/p&gt;          &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endPageRequest); &lt;/span&gt;&lt;/p&gt;          &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;} &lt;/span&gt;&lt;/p&gt;          &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;/span&gt;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: &amp;#39;Courier New&amp;#39;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;function&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; beginPageRequest(sender, args) { &lt;/span&gt;&lt;/p&gt;          &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;updateProgress.className = &lt;span style="color: #a31515"&gt;&amp;quot;showed&amp;quot;&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;          &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;} &lt;/span&gt;&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt;          &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: &amp;#39;Courier New&amp;#39;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;function&lt;/span&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;; mso-ansi-language: en-us; mso-no-proof: yes"&gt; endPageRequest(sender, args) {&lt;/span&gt; &lt;/p&gt;          &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; font-family: &amp;#39;Courier New&amp;#39;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;span style="mso-spacerun: yes"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;updateProgress.className = &lt;span style="color: #a31515"&gt;&amp;quot;hidden&amp;quot;&lt;/span&gt;; &lt;/span&gt;&lt;/p&gt;          &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: &amp;#39;Courier New&amp;#39;; mso-no-proof: yes"&gt;}&lt;/span&gt;&lt;/p&gt;          &lt;p&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: &amp;#39;Courier New&amp;#39;; mso-no-proof: yes"&gt;&lt;/span&gt;&lt;/p&gt;       &lt;/div&gt;     &lt;/div&gt;   &lt;/div&gt; &lt;/form&gt;  &lt;h3&gt;&lt;/h3&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;ClientLibrary.js&lt;/em&gt;&lt;/p&gt;  &lt;h3&gt;Coding.&lt;/h3&gt;  &lt;h4&gt;Incrustando el archivo&lt;/h4&gt;  &lt;p&gt;&lt;a href="http://geeks.ms/blogs/eecsaky/WindowsLiveWriter/AJAXCmoembeberunarchivoJavaScriptenunaDL_F292/image_2.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="240" alt="image" src="http://geeks.ms/blogs/eecsaky/WindowsLiveWriter/AJAXCmoembeberunarchivoJavaScriptenunaDL_F292/image_thumb.png" width="228" align="left" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Simplemente añadimos a nuestro proyecto el archivo .js y en sus propiedades cambiamos la propiedad “Build Action” y la establecemos en “Embedded Resource”.&lt;/p&gt;  &lt;p&gt;Esto lo que hará es que el archivo js, se incruste en la DLL, como podemos ver en Reflector. &lt;/p&gt;  &lt;p align="center"&gt;&lt;a href="http://geeks.ms/blogs/eecsaky/WindowsLiveWriter/AJAXCmoembeberunarchivoJavaScriptenunaDL_F292/image_4.png"&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="187" alt="image" src="http://geeks.ms/blogs/eecsaky/WindowsLiveWriter/AJAXCmoembeberunarchivoJavaScriptenunaDL_F292/image_thumb_1.png" width="437" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;h4&gt;Preparando la librería&lt;/h4&gt;  &lt;p&gt;Bien, el archivo ya está dentro de nuestra DLL… Pero… Con eso no hacemos nada de nada… Debemos convertirlo en un recurso web. Para ello, antes de nada debemos “desocultar” los archivos ocultos del proyecto, como se muestra en la siguiente figura, el punto 1.&lt;/p&gt;  &lt;p&gt;&lt;img title="image" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="252" alt="image" src="http://geeks.ms/blogs/eecsaky/WindowsLiveWriter/AJAXCmoembeberunarchivoJavaScriptenunaDL_F292/image_thumb_2.png" width="292" border="0" /&gt;&lt;/p&gt;  &lt;p&gt;Eso nos permitirá ver el archivo del punto 2, que es el que nos interesa para convertirlo en un recurso web. Ese archivo, AssemblyInfo.cs, contiene toda la información del ensamblado.&lt;/p&gt;  &lt;p&gt;Debemos añadir en nuestro proyecto la referencia System.Web si no la tenemos y en AssemblyInfo.cs, el namespace System.Web.UI.&lt;/p&gt;  &lt;p&gt;Y en este archivo debemos añadir la siguiente línea:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;span style="font-size: 10pt; line-height: 115%; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;[&lt;span style="color: blue"&gt;assembly&lt;/span&gt;: &lt;span style="color: #2b91af"&gt;WebResource&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;AjaxLibrary.ClientLibrary.js&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;)]&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;La librería ya está lista.&lt;/p&gt;  &lt;h4&gt;Obteniendo la librería en el cliente&lt;/h4&gt;  &lt;p&gt;Para obtener el javascript debemos modificar el ScriptManager de nuestro sitio, quedando algo así:&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&amp;lt;&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #a31515; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;asp&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; color: #a31515; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; mso-no-proof: yes"&gt;ScriptManager&lt;/span&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; 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;ScriptManager1&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;       &lt;p&gt;&lt;/p&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; 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;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Scripts&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;       &lt;p&gt;&lt;/p&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; 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;&lt;span style="color: blue"&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;ScriptReference&lt;/span&gt; &lt;span style="color: red"&gt;Assembly&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;AjaxLibrary&amp;quot;&lt;/span&gt;       &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; 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; &lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;AjaxLibrary.ClientLibrary.js&amp;quot;&lt;/span&gt; &lt;span style="color: blue"&gt;/&amp;gt;       &lt;p&gt;&lt;/p&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span lang="EN-US" style="font-size: 10pt; font-family: &amp;quot;Courier New&amp;quot;; mso-ansi-language: en-us; 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;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Scripts&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;       &lt;p&gt;&lt;/p&gt;     &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p class="MsoNormal" style="margin-bottom: 0pt; line-height: normal; mso-layout-grid-align: none"&gt;&lt;span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="font-size: 10pt; color: #a31515; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;asp&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;:&lt;/span&gt;&lt;span style="font-size: 10pt; color: #a31515; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;ScriptManager&lt;/span&gt;&lt;span style="font-size: 10pt; color: blue; font-family: &amp;quot;Courier New&amp;quot;; mso-no-proof: yes"&gt;&amp;gt;     &lt;p&gt;&lt;/p&gt;   &lt;/span&gt;&lt;/p&gt;  &lt;p&gt;Evidentemente el código JavaScript debemos haberlo borrado ;) De esta forma ya tenemos el JavaScript en el cliente.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://eugenioestrada.es/blog"&gt;http://eugenioestrada.es/blog&lt;/a&gt;&lt;/p&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6559937" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/eecsaky/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/eecsaky/archive/tags/JavaScript/default.aspx">JavaScript</category></item><item><title>AJAX: Cómo crear nuestro propio UpdateProgress</title><link>http://weblogs.asp.net/eecsaky/archive/2008/08/24/ajax-c-243-mo-crear-nuestro-propio-updateprogress.aspx</link><pubDate>Sun, 24 Aug 2008 10:22:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6559006</guid><dc:creator>Eugenio Estrada</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/eecsaky/rsscomments.aspx?PostID=6559006</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/eecsaky/commentapi.aspx?PostID=6559006</wfw:comment><comments>http://weblogs.asp.net/eecsaky/archive/2008/08/24/ajax-c-243-mo-crear-nuestro-propio-updateprogress.aspx#comments</comments><description>&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;A veces no queremos hacer uso del UpdateProgress que viene con ASP.NET por diversos motivos.&lt;/P&gt;
&lt;H3&gt;Objetivo&lt;/H3&gt;
&lt;P&gt;&lt;A href="http://geeks.ms/blogs/eecsaky/WindowsLiveWriter/CmocrearnuestropropioUpdateProgress_EFAB/image_2.png" mce_href="http://geeks.ms/blogs/eecsaky/WindowsLiveWriter/CmocrearnuestropropioUpdateProgress_EFAB/image_2.png"&gt;&lt;IMG title=image style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=133 alt=image src="http://geeks.ms/blogs/eecsaky/WindowsLiveWriter/CmocrearnuestropropioUpdateProgress_EFAB/image_thumb.png" width=240 align=left border=0 mce_src="http://geeks.ms/blogs/eecsaky/WindowsLiveWriter/CmocrearnuestropropioUpdateProgress_EFAB/image_thumb.png"&gt;&lt;/A&gt; El objetivo es conseguir el efecto del UpdateProgress. Para ello necesitamos un UpdatePanel donde tengamos por ejemplo un botón con un Label. Para que el efecto sea visible se recomienda usar el método Sleep de System.Threading.Thread, un par de segundo es suficiente.&lt;/P&gt;
&lt;H3&gt;Requisitos&lt;/H3&gt;
&lt;P&gt;Cualquier versión de ASP.NET AJAX nos sirve, tanto la 1.0 (para .NET 2.0) descargable en &lt;A href="http://ajax.asp.net/" mce_href="http://ajax.asp.net/"&gt;http://ajax.asp.net/&lt;/A&gt;, como la versión nativa de ASP.NET AJAX. Si usas VS 2008 (o Visual Web Developer 2008 Express Edition) no tendrás que descargar nada. &lt;/P&gt;
&lt;H3&gt;Análisis&lt;/H3&gt;
&lt;P&gt;¿Que hace el UpdateProgress? Siempre que se hace una petición al servidor se muestra un panel. Por lo que ya sabemos dos cosas:&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;Debemos manejar el evento de comienzo y finalización de las peticiones en el cliente. &lt;/LI&gt;
&lt;LI&gt;Hay algo oculto que debemos mostrar después. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;Esta claro que el lenguaje en el cliente es JavaScript y para el estilo (necesario para mostrar y ocultar el panel, que ya digo que será una capa, DIV) usaremos estilso en cascada CSS.&lt;/P&gt;
&lt;H3&gt;Coding.&lt;/H3&gt;
&lt;P&gt;Antes de nada el manejador de evento del evento Click del botón es:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;SPAN style="COLOR: blue"&gt;protected&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;void&lt;/SPAN&gt; ActualizarButton_Click(&lt;SPAN style="COLOR: blue"&gt;object&lt;/SPAN&gt; sender, &lt;SPAN style="COLOR: #2b91af"&gt;EventArgs&lt;/SPAN&gt; e) &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;{ &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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;HoraLabel.Text = &lt;SPAN style="COLOR: #2b91af"&gt;DateTime&lt;/SPAN&gt;.Now.ToShortTimeString(); &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;System.Threading.&lt;SPAN style="COLOR: #2b91af"&gt;Thread&lt;/SPAN&gt;.Sleep(5000); &lt;/SPAN&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Ahora vamos a la parte que nos ocupa, el cliente. La capa que nos ocupa es la siguiente, sencillita:&lt;/P&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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;id&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="updateProgress"&lt;/SPAN&gt; &lt;SPAN style="COLOR: red"&gt;class&lt;/SPAN&gt;&lt;SPAN style="COLOR: blue"&gt;="hidden"&amp;gt;&lt;/SPAN&gt;&lt;/SPAN&gt; 
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;Actualizando... &lt;/SPAN&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; 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;&lt;/P&gt;
&lt;P&gt;Como puedes ver vamos a tener un estilo llamado &lt;EM&gt;hidden&lt;/EM&gt; y, esto os lo digo yo, tendremos otro para cuando lo queramos mostrar, que le llamaré &lt;EM&gt;showed&lt;/EM&gt;, estos son los siguientes:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;.hidden&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt; { &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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: red"&gt;display&lt;/SPAN&gt;: &lt;SPAN style="COLOR: blue"&gt;none&lt;/SPAN&gt;; &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;} &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: #a31515; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;.showed&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt; { &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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: red"&gt;border&lt;/SPAN&gt;: &lt;SPAN style="COLOR: blue"&gt;2px&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;solid&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;#FF0000&lt;/SPAN&gt;; &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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: red"&gt;background-color&lt;/SPAN&gt;: &lt;SPAN style="COLOR: blue"&gt;#FF6666&lt;/SPAN&gt;;&lt;/SPAN&gt; 
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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: red"&gt;color&lt;/SPAN&gt;: &lt;SPAN style="COLOR: blue"&gt;#800000&lt;/SPAN&gt;; &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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: red"&gt;font-size&lt;/SPAN&gt;: &lt;SPAN style="COLOR: blue"&gt;x-large&lt;/SPAN&gt;; &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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: red"&gt;font-family&lt;/SPAN&gt;: &lt;SPAN style="COLOR: blue"&gt;Arial,&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;Helvetica,&lt;/SPAN&gt; &lt;SPAN style="COLOR: blue"&gt;sans-serif&lt;/SPAN&gt;; &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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: red"&gt;padding&lt;/SPAN&gt;: &lt;SPAN style="COLOR: blue"&gt;10px&lt;/SPAN&gt;; &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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: red"&gt;margin&lt;/SPAN&gt;: &lt;SPAN style="COLOR: blue"&gt;10px&lt;/SPAN&gt;; &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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: red"&gt;width&lt;/SPAN&gt;: &lt;SPAN style="COLOR: blue"&gt;200px&lt;/SPAN&gt;; &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;text-align&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;: &lt;SPAN style="COLOR: blue"&gt;center&lt;/SPAN&gt;; &lt;/SPAN&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;Le he añadido algo de formato en el estilo showed, para que se vea bien. Realmente lo importante es la diferencia de que el primero contiene la etiqueta &lt;STRONG&gt;display: none&lt;/STRONG&gt; y la segunda no.&lt;/P&gt;
&lt;P&gt;Bien, ahora nos queda lo más importante, manejar los dos eventos en el cliente. La clase encargada de ello es el &lt;STRONG&gt;PageRequestManager&lt;/STRONG&gt;, en el namespace &lt;STRONG&gt;Sys.WebForms&lt;/STRONG&gt;. Y el código es tan sencillo como este:&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;function&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt; pageLoad() { &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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;Sys.WebForms.PageRequestManager.getInstance().add_beginRequest(beginPageRequest); &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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;Sys.WebForms.PageRequestManager.getInstance().add_endRequest(endPageRequest); &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;} &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;&lt;/SPAN&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;function&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt; beginPageRequest(sender, args) { &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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;updateProgress.className = &lt;SPAN style="COLOR: #a31515"&gt;"showed"&lt;/SPAN&gt;; &lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;} &lt;/SPAN&gt;
&lt;P mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; COLOR: blue; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt;function&lt;/SPAN&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; mso-ansi-language: en-us; mso-no-proof: yes"&gt; endPageRequest(sender, args) {&lt;/SPAN&gt; 
&lt;P class=MsoNormal style="MARGIN-BOTTOM: 0pt; LINE-HEIGHT: normal; mso-layout-grid-align: none"&gt;&lt;SPAN lang=EN-US style="FONT-SIZE: 10pt; FONT-FAMILY: 'Courier New'; 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;updateProgress.className = &lt;SPAN style="COLOR: #a31515"&gt;"hidden"&lt;/SPAN&gt;; &lt;/SPAN&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="FONT-SIZE: 10pt; LINE-HEIGHT: 115%; FONT-FAMILY: 'Courier New'; mso-no-proof: yes"&gt;}&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;En este caso el efecto es muy similar al del UpdateProgress, pero los resultados pueden ser muy diversos cuanto más lo piensa uno.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://eugenioestrada.es/blog" mce_href="http://eugenioestrada.es/blog"&gt;http://eugenioestrada.es/blog&lt;/A&gt;&lt;/P&gt;&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6559006" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/eecsaky/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/eecsaky/archive/tags/Ajax/default.aspx">Ajax</category><category domain="http://weblogs.asp.net/eecsaky/archive/tags/JavaScript/default.aspx">JavaScript</category><category domain="http://weblogs.asp.net/eecsaky/archive/tags/CSS/default.aspx">CSS</category><category domain="http://weblogs.asp.net/eecsaky/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>ASP.NET y el JavaScript manejado</title><link>http://weblogs.asp.net/eecsaky/archive/2007/05/01/asp-net-y-el-javascript-manejado.aspx</link><pubDate>Tue, 01 May 2007 21:27:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6505801</guid><dc:creator>Eugenio Estrada</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/eecsaky/rsscomments.aspx?PostID=6505801</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/eecsaky/commentapi.aspx?PostID=6505801</wfw:comment><comments>http://weblogs.asp.net/eecsaky/archive/2007/05/01/asp-net-y-el-javascript-manejado.aspx#comments</comments><description>Ayer escribí sobre las novedades que el MIX'07 nos trae sobre Web, Silverlight 1.0 y 1.1. Y también hablé de ASP.NET Futures May 2007 CTP, ahora mirando un poco más afondo, estoy viendo que novedades hay y la que más me ha sorprendido es el ¡JavaScript...(&lt;a href="http://weblogs.asp.net/eecsaky/archive/2007/05/01/asp-net-y-el-javascript-manejado.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6505801" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/eecsaky/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://weblogs.asp.net/eecsaky/archive/tags/JavaScript/default.aspx">JavaScript</category></item><item><title>JavaScript Optimizer</title><link>http://weblogs.asp.net/eecsaky/archive/2007/04/06/javascript-optimizer.aspx</link><pubDate>Fri, 06 Apr 2007 21:09:00 GMT</pubDate><guid isPermaLink="false">c06e2b9d-981a-45b4-a55f-ab0d8bbfdc1c:6505784</guid><dc:creator>Eugenio Estrada</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/eecsaky/rsscomments.aspx?PostID=6505784</wfw:commentRss><wfw:comment xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://weblogs.asp.net/eecsaky/commentapi.aspx?PostID=6505784</wfw:comment><comments>http://weblogs.asp.net/eecsaky/archive/2007/04/06/javascript-optimizer.aspx#comments</comments><description>Acabo de publicar la primera release de una pequeña herramienta para la optimización de JavaScript que he llamado JavaScript Optimizer. La hice con el objetivo de reducir automaticamente el tamaño del archivo agHost.js de WPF/E y es el que se carga por...(&lt;a href="http://weblogs.asp.net/eecsaky/archive/2007/04/06/javascript-optimizer.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://weblogs.asp.net/aggbug.aspx?PostID=6505784" width="1" height="1"&gt;</description><category domain="http://weblogs.asp.net/eecsaky/archive/tags/JavaScript/default.aspx">JavaScript</category></item></channel></rss>