<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" version="2.0"><channel><title>Marc Rubiño</title><link>http://geeks.ms/blogs/mrubino/default.aspx</link><description>ASP.NET, C#, AJAX.NET, JavaScript, etc.</description><dc:language /><generator>CommunityServer 2008.5 SP1 (Build: 31106.3070)</generator><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/MarcRubinoGeeks" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="marcrubinogeeks" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item><title>MVC Exportar Datos a .XLS “Excel Files”</title><link>http://geeks.ms/blogs/mrubino/archive/2012/05/25/mvc-exportar-datos-a-xls-excel-files.aspx</link><pubDate>Fri, 25 May 2012 07:19:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:205258</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=205258</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2012/05/25/mvc-exportar-datos-a-xls-excel-files.aspx#comments</comments><description>&lt;p style="text-align:justify;"&gt;Este truco es uno de los top10 en los foros de MSDN y sigue siendo una de aquellas cosas que no es f&amp;aacute;cil encontrar una documentaci&amp;oacute;n clara y adecuada.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Si hablamos desde la perspectiva de ASP.NET MVC esta tarea se nos simplifica much&amp;iacute;simo porque desde nuestro controlador podemos devolver directamente el contenido de un fichero como cualquier otro ActionResult que tengamos configurado. Para eso tenemos la clase &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/library/system.web.mvc.controller.file.aspx" title="MVC File"&gt;File&lt;/a&gt; que nos proporciona esa funcionalidad y no tenemos que utilizar directamente el objeto Response como nos pasaba con el cl&amp;aacute;sico ASP.NET WebForms.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="syntaxhighlighter  csharp" id="highlighter_674768"&gt;
&lt;div class="bar   "&gt;
&lt;div class="toolbar"&gt;
&lt;div class="item copyToClipboard"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;FileContentResult File(&lt;/code&gt;&lt;code class="csharp keyword"&gt;byte&lt;/code&gt;&lt;code class="csharp plain"&gt;[] fileContents, &lt;/code&gt;&lt;code class="csharp keyword"&gt;string&lt;/code&gt; &lt;code class="csharp plain"&gt;contentType)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;FileContentResult File(&lt;/code&gt;&lt;code class="csharp keyword"&gt;byte&lt;/code&gt;&lt;code class="csharp plain"&gt;[] fileContents, &lt;/code&gt;&lt;code class="csharp keyword"&gt;string&lt;/code&gt; &lt;code class="csharp plain"&gt;contentType, &lt;/code&gt;&lt;code class="csharp keyword"&gt;string&lt;/code&gt; &lt;code class="csharp plain"&gt;fileDownloadName)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;FileStreamResult File(Stream fileStream, &lt;/code&gt;&lt;code class="csharp keyword"&gt;string&lt;/code&gt; &lt;code class="csharp plain"&gt;contentType)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;FileStreamResult File(Stream fileStream, &lt;/code&gt;&lt;code class="csharp keyword"&gt;string&lt;/code&gt; &lt;code class="csharp plain"&gt;contentType, &lt;/code&gt;&lt;code class="csharp keyword"&gt;string&lt;/code&gt; &lt;code class="csharp plain"&gt;fileDownloadName)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;FilePathResult File(&lt;/code&gt;&lt;code class="csharp keyword"&gt;string&lt;/code&gt; &lt;code class="csharp plain"&gt;fileName, &lt;/code&gt;&lt;code class="csharp keyword"&gt;string&lt;/code&gt; &lt;code class="csharp plain"&gt;contentType)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;FilePathResult File(&lt;/code&gt;&lt;code class="csharp keyword"&gt;string&lt;/code&gt; &lt;code class="csharp plain"&gt;fileName, &lt;/code&gt;&lt;code class="csharp keyword"&gt;string&lt;/code&gt; &lt;code class="csharp plain"&gt;contentType, &lt;/code&gt;&lt;code class="csharp keyword"&gt;string&lt;/code&gt; &lt;code class="csharp plain"&gt;fileDownloadName)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Para este ejemplo utilizar&amp;eacute; la sobrecarga que retorna un FileStreamResult porque lo que queremos hacer es:&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Un servicio que recupere los datos de nuestro repositorio, serialice nuestra entidad del dominio en un XML directamente en memoria. Devuelva su contenido especificando que es un fichero Excel y el nombre del fichero que se utilizar&amp;aacute; para guardar.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Todo esto lo generar&amp;aacute; din&amp;aacute;micamente en memoria sin tener que tener el fichero Excel f&amp;iacute;sicamente en nuestro servidor.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="syntaxhighlighter  csharp" id="highlighter_152056"&gt;
&lt;div class="bar"&gt;
&lt;div class="toolbar"&gt;
&lt;div class="item copyToClipboard"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp keyword"&gt;public&lt;/code&gt; &lt;code class="csharp plain"&gt;ActionResult ObtenerMisEnviosXmlExcel()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;_productosServices = &lt;/code&gt;&lt;code class="csharp keyword"&gt;new&lt;/code&gt; &lt;code class="csharp plain"&gt;ProductosServices();&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;var stream = &lt;/code&gt;&lt;code class="csharp keyword"&gt;new&lt;/code&gt; &lt;code class="csharp plain"&gt;MemoryStream();&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;var serialicer = &lt;/code&gt;&lt;code class="csharp keyword"&gt;new&lt;/code&gt; &lt;code class="csharp plain"&gt;XmlSerializer(&lt;/code&gt;&lt;code class="csharp keyword"&gt;typeof&lt;/code&gt;&lt;code class="csharp plain"&gt;(List));&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp comments"&gt;//Cargo los datos&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;List datos = _productosServices.GetProductos();&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp comments"&gt;//Lo transformo en un XML y lo guardo en memoria&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;serialicer.Serialize(stream, datos);&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;stream.Position = 0;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;13&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;14&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp comments"&gt;//devuelvo el XML de la memoria como un fichero .xls&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;15&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;return&lt;/code&gt; &lt;code class="csharp plain"&gt;File(stream, &lt;/code&gt;&lt;code class="csharp string"&gt;&amp;quot;application/vnd.ms-excel&amp;quot;&lt;/code&gt;&lt;code class="csharp plain"&gt;, &lt;/code&gt;&lt;code class="csharp string"&gt;&amp;quot;Pedidos.xls&amp;quot;&lt;/code&gt;&lt;code class="csharp plain"&gt;);&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;16&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p style="text-align:justify;"&gt;Para poder serializar nuestra entidad del dominio utilizaremos la clase &lt;strong&gt;XmlSerializer&lt;/strong&gt; que se encuentra en el namespace &lt;strong&gt;System.Xml.Serialization&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style="text-align:justify;"&gt;Cada vez que realicemos esta llamada nos devolver&amp;aacute; el fichero Excel creado al vuelo con los datos recuperados de nuestro repositorio.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/05/excel1.png"&gt;&lt;img height="297" width="300" src="http://marcrub.files.wordpress.com/2012/05/excel1.png?w=300&amp;amp;h=297" title="Excel1" class="aligncenter size-medium wp-image-1823" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Una cosa que hay que tener en cuenta al realizar la serializaci&amp;oacute;n en XML, es que no es el formato est&amp;aacute;ndar de Excel y tiene que abrir el fichero como datos XML. Eso implica que al abrir el fichero lance un par de avisos que son un poco inc&amp;oacute;modos m&amp;aacute;s que otra cosa.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/05/excel.png"&gt;&lt;img height="186" width="300" src="http://marcrub.files.wordpress.com/2012/05/excel.png?w=300&amp;amp;h=186" title="Excel" class="aligncenter size-medium wp-image-1824" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;He estado probando diferentes librer&amp;iacute;as para crear ficheros Excel, pero todos te permiten montando el documento por programaci&amp;oacute;n, pero no montarlo autom&amp;aacute;ticamente dependiendo de los datos cargados como es el caso del ejemplo anterior.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Si alguien conoce alguna librer&amp;iacute;a que sea capaz de hacerlo directamente o tiene alguna experiencia parecida le invito a que la comparta para poder ampliar esta informaci&amp;oacute;n y que nos sea de utilidad a todos.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Os recuerdo que tambi&amp;eacute;n ten&amp;eacute;is una entrada relacionada para generar un PDF al vuelo directamente desde una de nuestras vistas recuperando su HTML.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Cross-Posting: &lt;a href="http://mrubino.net"&gt;http://mrubino.net&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=205258" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/Trucos/default.aspx">Trucos</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/MVC/default.aspx">MVC</category></item><item><title>Webcat May en BCN !!!</title><link>http://geeks.ms/blogs/mrubino/archive/2012/05/16/webcat-may-en-bcn.aspx</link><pubDate>Wed, 16 May 2012 20:17:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:205059</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=205059</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2012/05/16/webcat-may-en-bcn.aspx#comments</comments><description>&lt;p&gt;Este mi&amp;eacute;rcoles 23 de Mayo se celebra en Barcelona el encuentro mensual que organiza el grupo WebCat &amp;quot;Barcelona web professionals&amp;quot;. En estas reuniones se realizan micro sesiones de diferentes tipos y niveles pero con el punto en com&amp;uacute;n que nos une a todos los que trabajamos en entornos orientados a la web.&lt;/p&gt;
&lt;p&gt;Micro Sesiones:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://lanyrd.com/2012/webcat-may/stdgc/"&gt;Crear una web enlazada a datos en 10 min es posible con knockout.js y MVVM&lt;/a&gt; &lt;strong&gt;presented by&lt;/strong&gt; &lt;a href="http://geeks.ms/profile/marc_rubino/"&gt;Marc Rubi&amp;ntilde;o&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lanyrd.com/2012/webcat-may/stdcr/"&gt;Gestion de expectativas&lt;/a&gt; &lt;strong&gt;presented by&lt;/strong&gt; &lt;a href="http://geeks.ms/profile/xavi_b/"&gt;xavi blanch&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lanyrd.com/2012/webcat-may/srzxh/"&gt;Meta datos y rich snippets de Google&lt;/a&gt; &lt;strong&gt;presented by&lt;/strong&gt; &lt;a href="http://geeks.ms/profile/iplarodriguez/"&gt;Ivan Pla Rodr&amp;iacute;guez&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://lanyrd.com/2012/webcat-may/stdbt/"&gt;No sirves ni para poner la lavadora (Desventuras de la interacci&amp;oacute;n fuera de la web)&lt;/a&gt; &lt;strong&gt;presented by&lt;/strong&gt; &lt;a href="http://geeks.ms/profile/galu/"&gt;Jordi&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/05/images.jpg"&gt;&lt;img height="194" width="259" src="http://marcrub.files.wordpress.com/2012/05/images.jpg" title="images" class="size-full wp-image-1816 aligncenter" style="border:0;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Lugar 23 mayo de 7pm a 9pm en Provid&amp;egrave;ncia, 88, Barcelona. Para m&amp;aacute;s informaci&amp;ntilde;on &lt;a href="http://lanyrd.com/2012/webcat-may"&gt;http://lanyrd.com/2012/webcat-may&lt;/a&gt;&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=205059" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/eventos/default.aspx">eventos</category></item><item><title>How to: Insect Invaders</title><link>http://geeks.ms/blogs/mrubino/archive/2012/04/30/how-to-insect-invaders.aspx</link><pubDate>Mon, 30 Apr 2012 10:46:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:204751</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=204751</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2012/04/30/how-to-insect-invaders.aspx#comments</comments><description>&lt;p&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/04/pant1.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/pant1.png"&gt;&lt;img height="176" width="291" src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/pant1.png" border="0" style="float:left;margin-left:10px;margin-right:10px;border:0px;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&amp;nbsp;Desde que asist&amp;iacute; al Hack-a-thon de Fuengirola sobre Windows Phone, mi intenci&amp;oacute;n ha sido aprovechar la cuenta de suscriptor y publicar alg&amp;uacute;n tipo de aplicaci&amp;oacute;n.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Le estuve dando muchas vueltas a que tipo de aplicaci&amp;oacute;n podr&amp;iacute;a realizar, mi primera intenci&amp;oacute;n era hacer una br&amp;uacute;jula que apuntara a la Meca para que los musulmanes lo tuvieran m&amp;aacute;s f&amp;aacute;cil a la hora de orientarse, pero mi sorpresa fue may&amp;uacute;scula cuando me di cuenta que ya hab&amp;iacute;an un par de aplicaciones de este tipo y adem&amp;aacute;s una era de pago. A partir de ese momento entend&amp;iacute; que cualquier idea que pudiera tener seguro que ya estaba publicado en el MarketPlace.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Pero no desist&amp;iacute; en el intento y se me ocurri&amp;oacute; hacer un juego en XNA, si tengo que empezar de cero a programar para Windows Phone que mejor que hacer un juego en XNA que no una aplicaci&amp;oacute;n con Silverligth que no me gusta nada.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Bueno ya ten&amp;iacute;a la base y ahora pensar en el juego. Ummm mi primer juego y sin tener ni idea de XNA no puede ser muy complicada de desarrollar. Que mejor que empezar con un cl&amp;aacute;sico que no tiene muchas pantallas y que seguro no puede ser muy dif&amp;iacute;cil de programar como es el Space Invaders.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Cuando tomas una decisi&amp;oacute;n como la m&amp;iacute;a es ir a la p&amp;aacute;gina de Microsoft donde puedes encontrar los ejemplos de todo lo que necesitas para desarrollar tu aplicaci&amp;oacute;n.&lt;/p&gt;
&lt;h3&gt;La Base para el Juego:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Pantallas de la aplicaci&amp;oacute;n 
&lt;ul&gt;
&lt;li&gt;Inicial&lt;/li&gt;
&lt;li&gt;Juego Principal&lt;/li&gt;
&lt;li&gt;Men&amp;uacute; Pausa&lt;/li&gt;
&lt;li&gt;Fin de Partida&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Un fondo que no se tiene que animar&lt;/li&gt;
&lt;li&gt;Una entidad Nave para el jugador principal 
&lt;ul&gt;
&lt;li&gt;Movimiento de derecha a izquierda&lt;/li&gt;
&lt;li&gt;Disparo &amp;ldquo;sonido de disparo&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Explosi&amp;oacute;n para cuando es alcanzado y Sonido explosi&amp;oacute;n&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Una entidad Enemigo para crear todos los enemigos con esta base. 
&lt;ul&gt;
&lt;li&gt;Movimiento de izquierda a derecha &amp;ldquo;pero en bloque&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Diferentes puntuaciones por tipo de enemigo&lt;/li&gt;
&lt;li&gt;Disparo&lt;/li&gt;
&lt;li&gt;Explosi&amp;oacute;n al ser alcanzado y sonido&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Diferentes niveles para hacer durar un poco el juego&lt;/li&gt;
&lt;li&gt;Recursos para mostrar las vidas, puntuaci&amp;oacute;n y record&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/04/pant3.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;&lt;/h3&gt;
&lt;h3&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/pant3.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/pant3.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/h3&gt;
&lt;h3&gt;&amp;iquest; Como una persona que nunca ha creado un juego, ni a programado en XNA puede salir exitoso de esta experiencia ?&lt;/h3&gt;
&lt;p&gt;Yo por ejemplo para mi primer contacto con el tema, mir&amp;eacute; el curso de un juego con XNA llamado Shootter.&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a target="_blank" rel="http://create.msdn.com/en-us/education/gamedevelopment" href="http://create.msdn.com/en-us/education/gamedevelopment" title="Hubs"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&lt;a target="_blank" href="http://create.msdn.com/en-us/education/gamedevelopment"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/Tutorial_5F00_Banner.png" border="0" style="border:0;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Existe una p&amp;aacute;gina web sobre desarrollo en Windows Phone indispensable para todo aquel que quiera introducirse en este mundo con gran cantidad de ejemplos que podremos utilizar en nuestros desarrollo.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Pero tener cuidado no teng&amp;aacute;is la tentaci&amp;oacute;n de publicar directamente el ejemplo de Microsoft como si fuera vuestro que ya no ser&amp;iacute;ais los primeros XD.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.windowsphone.com/es-ES/apps/e70219ea-2ac5-4681-ad5e-e3d52343b400"&gt;http://www.windowsphone.com/es-ES/apps/e70219ea-2ac5-4681-ad5e-e3d52343b400&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.windowsphone.com/es-ES/apps/a0ed2f05-44c9-49d8-9d53-255ef8d7b5dc"&gt;http://www.windowsphone.com/es-ES/apps/a0ed2f05-44c9-49d8-9d53-255ef8d7b5dc&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Despu&amp;eacute;s de esta experiencia que realmente he aprendido mucho he decidido pasar el juego a HTML5 y JavaScript para poderlo utilizar en diferentes plataformas, ya os informar&amp;eacute; como me va y si la experiencia es igualmente positiva &amp;ldquo;seguro que si&amp;rdquo;.&lt;/p&gt;
&lt;p&gt;No os olvid&amp;eacute;is de descargar y probar mi juego ;-)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/04/spaceinvaders_99x99.png"&gt;&lt;img width="35" src="http://marcrub.files.wordpress.com/2012/04/spaceinvaders_99x99.png?w=35" title="spaceInvaders_99x99" class="alignleft  " style="border-width:0px;" alt="" /&gt;&lt;/a&gt; &lt;a href="http://www.windowsphone.com/es-ES/apps/c2b100ff-45d8-4972-9d33-8bcbc2f148ba"&gt;http://www.windowsphone.com/es-ES/apps/c2b100ff-45d8-4972-9d33-8bcbc2f148ba&lt;/a&gt;&lt;/p&gt;
&lt;div class="sharedaddy sd-rating-enabled sd-like-enabled sd-sharing-enabled"&gt;Cross-Posting: &lt;a href="http://mrubino.net/"&gt;http://mrubino.net/&lt;/a&gt;&lt;/div&gt;
&lt;div class="sharedaddy sd-rating-enabled sd-like-enabled sd-sharing-enabled"&gt;&lt;/div&gt;
&lt;div class="sharedaddy sd-rating-enabled sd-like-enabled sd-sharing-enabled"&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204751" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/XNA/default.aspx">XNA</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/Windows+Phone/default.aspx">Windows Phone</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/Juegos/default.aspx">Juegos</category></item><item><title>[Evento] We ♥ JavaScript 2! </title><link>http://geeks.ms/blogs/mrubino/archive/2012/04/20/evento-we-javascript-2.aspx</link><pubDate>Fri, 20 Apr 2012 16:16:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:204570</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=204570</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2012/04/20/evento-we-javascript-2.aspx#comments</comments><description>&lt;p&gt;El s&amp;aacute;bado que viene d&amp;iacute;a 28 de Abril, se celebra en Barcelona un encuentro de los profesionales en desarrollo web que apreciamos lo que significa javascript, lo hemos sufrido como todo el mundo, pero tambi&amp;eacute;n sabemos valorar todo lo que nos aporta. Este evento es organizado por &lt;a href="http://www.agile-barcelona.org/" title="Agile-Barcelona"&gt;Agile-Barcelona&lt;/a&gt;, &lt;a target="_blank" href="http://www.runroom.com/" title="Estrategias digitales y soluciones tecnol&amp;oacute;gicas que hacen crecer tu negocio"&gt;Runroom&lt;/a&gt; y &lt;a href="http://www.softonic.com/" title="Softonic"&gt;Softonic&lt;/a&gt;, un &lt;strong&gt;evento de ma&amp;ntilde;ana y tarde&lt;/strong&gt; .&lt;/p&gt;
&lt;h2 style="padding-left:150px;"&gt;Agenda&lt;/h2&gt;
&lt;p style="padding-left:150px;"&gt;10:00 &amp;ndash; 11:00 APRETURA &amp;ndash; RECEPCI&amp;Oacute;N&lt;br /&gt;11:00 &amp;ndash; 11:30 Charla sobre CoffeeScript&lt;br /&gt;12:00 &amp;ndash; 12:30 Networking&lt;br /&gt;12:30 &amp;ndash; 13:30 Charla sobre Game Development&lt;br /&gt;13:30 &amp;ndash; 15:00 COMIDA (cortes&amp;iacute;a de Softonic)&lt;br /&gt;15:00 &amp;ndash; 18:00 Workshop Backbone.js&lt;br /&gt;15:00 &amp;ndash; 18:00 Workshop PhoneGap.js&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;strong&gt;* Importante: Los workshops son en paralelo, de modo que te rogamos que &amp;uacute;nicamente saques ticket en uno de los dos.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Si ten&amp;eacute;is pensado asistir daros prisa que solo quedan pocas plazas, yo ya me he registrado ;-)&lt;/p&gt;
&lt;p&gt;&lt;a href="http://welovejs.es"&gt;http://welovejs.es&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204570" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/javascript/default.aspx">javascript</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/eventos/default.aspx">eventos</category></item><item><title>Microsoft MVP ASP.NET/IIS 2012</title><link>http://geeks.ms/blogs/mrubino/archive/2012/04/03/microsoft-mvp-asp-net-iis-2012.aspx</link><pubDate>Tue, 03 Apr 2012 06:17:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:204258</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=204258</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2012/04/03/microsoft-mvp-asp-net-iis-2012.aspx#comments</comments><description>&lt;p style="text-align:justify;"&gt;Segundo a&amp;ntilde;o consecutivo que he recibido la grata noticia desde Microsoft que he sido nombrado nuevamente Microsoft MVP en ASP.NET / IIS para este 2012.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p style="text-align:justify;"&gt;Enhorabuena. Nos complace presentarle el programa de nombramiento MVP de Microsoft&amp;reg; de 2012. Este nombramiento se concede a los l&amp;iacute;deres excepcionales de la comunidad t&amp;eacute;cnica que comparten de forma activa su experiencia de alta calidad y de la vida real con otras personas. Le agradecemos especialmente la contribuci&amp;oacute;n que ha realizado en las comunidades t&amp;eacute;cnicas en el &amp;aacute;rea de ASP.NET/IIS a lo largo del pasado a&amp;ntilde;o.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style="text-align:justify;"&gt;La verdad que es una experiencia inolvidable poder participar en esta comunidad y que se te valore por ello, pero lo m&amp;aacute;s importante y con lo que realmente me quedo es con las personas que he conocido durante todos estos a&amp;ntilde;os y que me han ayudado siempre que lo he necesitado y nunca me ha faltado su apoyo. Si los tuviera que nombrar a todos seguramente me dejar&amp;iacute;a a alguno, pero desde aqu&amp;iacute; si que me gustar&amp;iacute;a nombrar a dos personas muy activas en la comunidad que este a&amp;ntilde;o se han quedado sin reconocimiento por parte de Microsoft, pero estoy seguro y conociendolos muy bien, s&amp;eacute; que ellos seguir&amp;aacute;n aportando y ayudando a todo el mundo que lo necesite y seran nuevamente nombrados MVP. Un saludo muy fuerte para Toni Recio y Jos&amp;eacute; Miguel Torres.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Espero poder seguir aportando mi granito de arena y agradecer a Microsoft este reconocimiento.&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/04/img_0211.jpg"&gt;&lt;img height="200" width="300" src="http://marcrub.files.wordpress.com/2012/04/img_0211.jpg?w=300" title="IMG_0211" class="alignnone size-medium wp-image-1780" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Cross-Posting: &lt;a href="http://mrubino.net/"&gt;http://mrubino.net/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=204258" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/MVP/default.aspx">MVP</category></item><item><title>Exprime la potencia asíncrona en IIS</title><link>http://geeks.ms/blogs/mrubino/archive/2012/03/21/exprime-la-potencia-as-237-ncrona-en-iis.aspx</link><pubDate>Wed, 21 Mar 2012 15:54:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:203951</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=203951</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2012/03/21/exprime-la-potencia-as-237-ncrona-en-iis.aspx#comments</comments><description>&lt;p style="text-align:justify;"&gt;Una aplicaci&amp;oacute;n ASP.NET sobre IIS escala muy bien y tiene muy buen resultado cuando hablamos de peticiones por segundo, pero la cosa puede mejorar cuando hablamos de conexiones concurrentes.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Teniendo en cuenta que cada vez m&amp;aacute;s nuestras aplicaciones son as&amp;iacute;ncronas, est&amp;aacute; aumentando la cantidad de peticiones que nuestra aplicaci&amp;oacute;n tiene que soportar .&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Por defecto ASP.NET 4.o acepta 5.000 peticiones concurrentes por CPU&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 style="text-align:justify;"&gt;Peticiones concurrentes por CPU:&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;Una aplicaci&amp;oacute;n ASP.NET en modo integrado bajo IIS7 nos permite configurar c&amp;oacute;mo administrar los subprocesos y como poner en cola las solicitudes cuando la aplicaci&amp;oacute;n est&amp;aacute; hospedada en un grupo de aplicaciones de IIS.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Los valores &lt;a target="_blank" href="http://msdn.microsoft.com/library/dd560842.aspx" title="applicationPool"&gt;&lt;strong&gt;applicationPool&lt;/strong&gt; &lt;/a&gt;se aplican a todos los grupos de aplicaciones que se ejecutan en una versi&amp;oacute;n determinada de .NET Framework. La configuraci&amp;oacute;n est&amp;aacute; contenida en un archivo aspnet.config. Hay una versi&amp;oacute;n de este archivo para las versiones 2.0 y 4 de .NET Framework. (Las versiones 3.0 y 3.5 de .NET Framework comparten el archivo aspnet.config con la versi&amp;oacute;n 2.0.)&lt;/p&gt;
&lt;ul&gt;
&lt;li style="text-align:justify;"&gt;&lt;strong&gt;maxConcurrentRequestPerCPU&lt;/strong&gt;: Especifica cu&amp;aacute;ntas solicitudes simult&amp;aacute;neas permite ASP.NET por CPU.&lt;/li&gt;
&lt;li style="text-align:justify;"&gt;&lt;strong&gt;maxConcurrentThreadsPerCPU&lt;/strong&gt;: Especifica cu&amp;aacute;ntos subprocesos simult&amp;aacute;neos se pueden estar ejecutando para un grupo de aplicaciones para cada CPU. Esto proporciona una manera alternativa de controlar la simultaneidad de ASP.NET, ya que puede limitar el n&amp;uacute;mero de subprocesos administrados que se pueden usar por CPU para atender las solicitudes. De forma predeterminada este valor es 0, lo que significa que ASP.NET no limita el n&amp;uacute;mero de subprocesos que se pueden crear por CPU, aunque el grupo de subprocesos de CLR tambi&amp;eacute;n limita el n&amp;uacute;mero de subprocesos que se pueden crear.&lt;/li&gt;
&lt;li style="text-align:justify;"&gt;&lt;strong&gt;requestQueueLimit&lt;/strong&gt;: Especifica el n&amp;uacute;mero m&amp;aacute;ximo de solicitudes que se pueden poner en cola para ASP.NET en un &amp;uacute;nico proceso. Cuando dos o m&amp;aacute;s aplicaciones ASP.NET se ejecutan en un &amp;uacute;nico grupo de aplicaciones, el conjunto acumulativo de solicitudes que se realizan a cualquier aplicaci&amp;oacute;n del grupo de aplicaciones est&amp;aacute; sujeto a este valor.&lt;span id="more-1751"&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Para configurar nuestra aplicaci&amp;oacute;n que trabaja con el &lt;strong&gt;framework 4.0 x64&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;fichero de configuraci&amp;oacute;n : 
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet.config&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Modificar el fichero&amp;nbsp;&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="syntaxhighlighter  xml" id="highlighter_318715"&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;configuration&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;system.web&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;applicationPool&lt;/code&gt; &lt;code class="xml color1"&gt;maxConcurrentRequestsPerCPU&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;5000&amp;quot;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml color1"&gt;maxConcurrentThreadsPerCPU&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;0&amp;quot;&lt;/code&gt; &lt;code class="xml color1"&gt;requestQueueLimit&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;5000&amp;quot;&lt;/code&gt; &lt;code class="xml plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;system.web&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;configuration&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;Peticiones concurrentes por Aplicaci&amp;oacute;n:&lt;/h3&gt;
&lt;p&gt;Si lo que queremos es controlar la peticiones concurrentes por aplicaci&amp;oacute;n nos tendremos que ir a la configuraci&amp;oacute;n &lt;a target="_blank" href="http://msdn.microsoft.com/library/aa347568(v=VS.90).aspx" title="serverRuntime"&gt;serverRuntime &lt;/a&gt;de nuestro servidor IIS.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;appConcurrentRequestLimit&lt;/strong&gt;: Especifica el n&amp;uacute;mero m&amp;aacute;ximo de solicitudes que pueden poner en cola para una aplicaci&amp;oacute;n. El valor predeterminado es 5.000.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Modificamos la configuraci&amp;oacute;n del servidor:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Abrimos el fichero de configuraci&amp;oacute;n: 
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;%windir%\System32\inetsrv\config\applicationHost.config&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Buscar el elemento &lt;code&gt;serverRuntime&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Modificar la propiedad &lt;code&gt;appConcurrentRequestLimit&lt;/code&gt;que por defecto son 5.000&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="syntaxhighlighter  xml" id="highlighter_154367"&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;serverRuntime&lt;/code&gt; &lt;code class="xml color1"&gt;appConcurrentRequestLimit&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;250000&amp;quot;&lt;/code&gt; &lt;code class="xml plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Adem&amp;aacute;s se puede controlar el tama&amp;ntilde;o de las cola que utiliza ASP.NET cuando se supera la cantidad de solicitudes por CPU estableciendo requestQueueLimit de &lt;a target="_blank" href="http://msdn.microsoft.com/library/7w2sway1(v=VS.80).aspx" title="processModel"&gt;processModel&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="syntaxhighlighter  xml" id="highlighter_158944"&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;processModel&lt;/code&gt; &lt;code class="xml color1"&gt;autoConfig&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;false&amp;quot;&lt;/code&gt; &lt;code class="xml color1"&gt;requestQueueLimit&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;250000&amp;quot;&lt;/code&gt; &lt;code class="xml plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Con todas estas modificaciones podemos controlar mucho mejor el rendimiento de nuestra aplicaci&amp;oacute;n y potenciar la gran cantidad de peticiones que se ver&amp;aacute;n incrementadas con el uso de peticiones as&amp;iacute;ncronas.&lt;/p&gt;
&lt;p&gt;Cross-Posting: &lt;a href="http://mrubino.net"&gt;http://mrubino.net&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=203951" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/IIS/default.aspx">IIS</category></item><item><title>MVP Summit 2012</title><link>http://geeks.ms/blogs/mrubino/archive/2012/03/07/mvp-summit-2012.aspx</link><pubDate>Wed, 07 Mar 2012 14:20:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:203736</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=203736</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2012/03/07/mvp-summit-2012.aspx#comments</comments><description>&lt;p&gt;Por primera vez he podido asistir al evento anual que organiza Microsoft dedicado a los MVP de todo el mundo llamado MVP Summit 2012.&lt;/p&gt;
&lt;p&gt;Miles de personas reunidas con un mismo objetivo y con la posibilidad de ver las instalaciones que tiene Microsoft en Redmond.&lt;/p&gt;
&lt;p&gt;Mi experiencia a este aspecto es totalmente positiva, poder estar una semana con mis colegas y conocer a gente de todo el mundo y especialmente al grupo de Espa&amp;ntilde;oles + Andorra, con los que pas&amp;eacute; muy buenos momentos. Poder conocer a los integrantes del equipo de producto es otra oportunidad que no se puede explicar.&lt;span id="more-1734"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;Nos hablaron de las novedades que se han lanzados durante estos d&amp;iacute;as sin realmente darnos ninguna noticia bomba y pudimos jugar con las nuevas betas a la vez que el resto del mundo.&lt;/p&gt;
&lt;p&gt;Est&amp;aacute; claro que si Microsoft me vuelve a reconocer con el nombramiento MVP nuevamente, no dejar&amp;eacute; de asistir a esta convocatoria porque realmente vale la pena.&lt;/p&gt;
&lt;p&gt;Y como una imagen vale m&amp;aacute;s que mil palabras&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/03/2012-02-26-19-42-04.jpg"&gt;&lt;img width="250" src="http://marcrub.files.wordpress.com/2012/03/2012-02-26-19-42-04.jpg?w=250" title="2012-02-26 19.42.04" class=" wp-image-1735 alignnone" style="margin:2px;border-width:0px;" alt="" /&gt;&lt;/a&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/03/img_0079.jpg"&gt;&lt;img width="250" src="http://marcrub.files.wordpress.com/2012/03/img_0079.jpg?w=250" title="IMG_0079" class=" wp-image-1736 alignnone" style="margin:2px;border-width:0px;" alt="" /&gt;&lt;/a&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/03/img_0099.jpg"&gt;&lt;img width="250" src="http://marcrub.files.wordpress.com/2012/03/img_0099.jpg?w=250" title="IMG_0099" class=" wp-image-1737 alignnone" style="margin:2px;border-width:0px;" alt="" /&gt;&lt;/a&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/03/wp_000113.jpg"&gt;&lt;img width="250" src="http://marcrub.files.wordpress.com/2012/03/wp_000113.jpg?w=250" title="WP_000113" class="alignnone  wp-image-1741" style="margin:2px;border-width:0px;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=203736" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/eventos/default.aspx">eventos</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/Microsoft/default.aspx">Microsoft</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/MVP/default.aspx">MVP</category></item><item><title>Optimización Web Sprites CSS</title><link>http://geeks.ms/blogs/mrubino/archive/2012/02/14/optimizaci-243-n-web-sprites-css.aspx</link><pubDate>Tue, 14 Feb 2012 09:26:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:203343</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=203343</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2012/02/14/optimizaci-243-n-web-sprites-css.aspx#comments</comments><description>&lt;p style="text-align:justify;"&gt;La ventaja de utilizar sprites para nuestros efectos con im&amp;aacute;genes, es que no tenemos que esperar a que las im&amp;aacute;genes se carguen individualmente, ya que solo tendremos una imagen principal para obtener el mismo efecto.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Piensa la cantidad de descargas que tiene que efectuar el navegador para cada una de las peque&amp;ntilde;as im&amp;aacute;genes que normalmente utilizamos en nuestras webs. Si todas estas peque&amp;ntilde;as descargas la disminuimos en una principal reduciremos el tiempo de descarga de la p&amp;aacute;gina de una manera considerable.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;El ejemplo m&amp;aacute;s utilizado ser&amp;iacute;a los tres estados de un rat&amp;oacute;n &amp;ldquo;normal, al pasar por encima con el rat&amp;oacute;n y al presionar&amp;rdquo;. Si utilizas tres im&amp;aacute;genes independientes el usuario l pasar el rat&amp;oacute;n por encima del bot&amp;oacute;n puede experimentar un retardo al mostrar la nueva imagen porque el navegador la tiene que descargar. Pero si utilizamos sprite con CSS este efecto indeseado desaparece a la vez que optimizamos la descarga.&lt;/p&gt;
&lt;h2 style="text-align:justify;"&gt;Ejemplo 1: Im&amp;aacute;genes por separado.&lt;/h2&gt;
&lt;h3 style="text-align:justify;"&gt;Imagen 1&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/02/btn1.png"&gt;&lt;img src="http://marcrub.files.wordpress.com/2012/02/btn1.png?w=604" title="btn1" class="alignnone size-full wp-image-1709" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 style="text-align:justify;"&gt;Imagen 2&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/02/btn21.png"&gt;&lt;img src="http://marcrub.files.wordpress.com/2012/02/btn21.png?w=604" title="btn2" class="alignnone size-full wp-image-1711" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 style="text-align:justify;"&gt;Imagen 3&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/02/btn3.png"&gt;&lt;img src="http://marcrub.files.wordpress.com/2012/02/btn3.png?w=604" title="btn3" class="alignnone size-full wp-image-1712" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3 style="text-align:justify;"&gt;El CSS para dar efecto al bot&amp;oacute;n.&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="syntaxhighlighter  css" id="highlighter_10660"&gt;
&lt;div class="item copyToClipboard"&gt;&lt;/div&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="css plain"&gt;.btnSinSprite&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css keyword"&gt;width&lt;/code&gt;&lt;code class="css plain"&gt;: &lt;/code&gt;&lt;code class="css value"&gt;211px&lt;/code&gt;&lt;code class="css plain"&gt;;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css keyword"&gt;height&lt;/code&gt;&lt;code class="css plain"&gt;: &lt;/code&gt;&lt;code class="css value"&gt;64px&lt;/code&gt;&lt;code class="css plain"&gt;;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css keyword"&gt;background&lt;/code&gt;&lt;code class="css plain"&gt;: &lt;/code&gt;&lt;code class="css value"&gt;url&lt;/code&gt;&lt;code class="css plain"&gt;(../../Content/btn&lt;/code&gt;&lt;code class="css value"&gt;1&lt;/code&gt;&lt;code class="css plain"&gt;.png);&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css keyword"&gt;border&lt;/code&gt;&lt;code class="css plain"&gt;: &lt;/code&gt;&lt;code class="css value"&gt;black&lt;/code&gt; &lt;code class="css value"&gt;solid&lt;/code&gt; &lt;code class="css value"&gt;0px&lt;/code&gt;&lt;code class="css plain"&gt;;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css keyword"&gt;cursor&lt;/code&gt;&lt;code class="css plain"&gt;: &lt;/code&gt;&lt;code class="css value"&gt;pointer&lt;/code&gt;&lt;code class="css plain"&gt;;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="css plain"&gt;.btnSinSprite:hover&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css keyword"&gt;background&lt;/code&gt;&lt;code class="css plain"&gt;: &lt;/code&gt;&lt;code class="css value"&gt;url&lt;/code&gt;&lt;code class="css plain"&gt;(../../Content/btn&lt;/code&gt;&lt;code class="css value"&gt;2&lt;/code&gt;&lt;code class="css plain"&gt;.png);&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;13&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="css plain"&gt;.btnSinSprite:active&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;14&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;15&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css keyword"&gt;background&lt;/code&gt;&lt;code class="css plain"&gt;: &lt;/code&gt;&lt;code class="css value"&gt;url&lt;/code&gt;&lt;code class="css plain"&gt;(../../Content/btn&lt;/code&gt;&lt;code class="css value"&gt;3&lt;/code&gt;&lt;code class="css plain"&gt;.png);&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;16&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Ejemplo 2: Imagen en Sprite.&lt;/h2&gt;
&lt;h3&gt;Imagen&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/02/btns.png"&gt;&lt;img src="http://marcrub.files.wordpress.com/2012/02/btns.png?w=604" title="btnS" class="alignnone size-full wp-image-1718" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;El CSS para dar efecto al bot&amp;oacute;n.&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="syntaxhighlighter  css" id="highlighter_545356"&gt;
&lt;div class="item copyToClipboard"&gt;&lt;/div&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="css plain"&gt;.btnConSprite&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css keyword"&gt;width&lt;/code&gt;&lt;code class="css plain"&gt;: &lt;/code&gt;&lt;code class="css value"&gt;211px&lt;/code&gt;&lt;code class="css plain"&gt;;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css keyword"&gt;height&lt;/code&gt;&lt;code class="css plain"&gt;: &lt;/code&gt;&lt;code class="css value"&gt;64px&lt;/code&gt;&lt;code class="css plain"&gt;;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css keyword"&gt;background&lt;/code&gt;&lt;code class="css plain"&gt;: &lt;/code&gt;&lt;code class="css value"&gt;url&lt;/code&gt;&lt;code class="css plain"&gt;(../../Content/btnS.png)&lt;/code&gt;&lt;code class="css value"&gt;0&lt;/code&gt; &lt;code class="css value"&gt;0&lt;/code&gt;&lt;code class="css plain"&gt;;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css keyword"&gt;border&lt;/code&gt;&lt;code class="css plain"&gt;: &lt;/code&gt;&lt;code class="css value"&gt;black&lt;/code&gt; &lt;code class="css value"&gt;solid&lt;/code&gt; &lt;code class="css value"&gt;0px&lt;/code&gt;&lt;code class="css plain"&gt;;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css keyword"&gt;cursor&lt;/code&gt;&lt;code class="css plain"&gt;: &lt;/code&gt;&lt;code class="css value"&gt;pointer&lt;/code&gt;&lt;code class="css plain"&gt;;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="css plain"&gt;.btnConSprite:hover&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css keyword"&gt;background&lt;/code&gt;&lt;code class="css plain"&gt;: &lt;/code&gt;&lt;code class="css value"&gt;url&lt;/code&gt;&lt;code class="css plain"&gt;(../../Content/btnS.png)&lt;/code&gt;&lt;code class="css value"&gt;0&lt;/code&gt; &lt;code class="css value"&gt;135px&lt;/code&gt;&lt;code class="css plain"&gt;;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;13&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="css plain"&gt;.btnConSprite:active&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;14&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;15&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css keyword"&gt;background&lt;/code&gt;&lt;code class="css plain"&gt;: &lt;/code&gt;&lt;code class="css value"&gt;url&lt;/code&gt;&lt;code class="css plain"&gt;(../../Content/btnS.png)&lt;/code&gt;&lt;code class="css value"&gt;0&lt;/code&gt; &lt;code class="css value"&gt;70px&lt;/code&gt;&lt;code class="css plain"&gt;;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;16&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="css plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Lo importante de utilizar una sola imagen es poder posicionar el fondo mediante la posici&amp;oacute;n x-y, y jugar con el tama&amp;ntilde;o . De esta manera se muestra la porci&amp;oacute;n de la imagen que necesitamos en cada momento.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Como se puede observar con las im&amp;aacute;genes individuales tenemos tres descargas de 3,3KB que han tardado &lt;strong&gt;48ms&lt;/strong&gt; y con una imagen tipo sprite tenemos solo una descarga de 8,19KB que se ha descargado en &lt;strong&gt;15ms&lt;/strong&gt;. Una buena mejora con un simple bot&amp;oacute;n imaginaros si optimizamos todas nuestras im&amp;aacute;genes de la p&amp;aacute;gina.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Ejemplo 1&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/02/desc1.png"&gt;&lt;img height="226" width="604" src="http://marcrub.files.wordpress.com/2012/02/desc1.png?w=604&amp;amp;h=226" title="desc1" class="alignnone size-full wp-image-1720" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Ejemplo 2&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/02/desc2.png"&gt;&lt;img height="226" width="604" src="http://marcrub.files.wordpress.com/2012/02/desc2.png?w=604&amp;amp;h=226" title="desc2" class="alignnone size-full wp-image-1721" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Con esto ya tenemos un pasito m&amp;aacute;s para poder tener nuestra web un poco m&amp;aacute;s optimizada y para que ve&amp;aacute;is que esto es una buena pr&amp;aacute;ctica os pongo la colecci&amp;oacute;n de iconos que utilizan los controles &lt;strong&gt;JQuery UI&lt;/strong&gt; en sus temas.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/02/217bc0_256x240_icons_icons.png"&gt;&lt;img src="http://marcrub.files.wordpress.com/2012/02/217bc0_256x240_icons_icons.png?w=604" title="217bc0_256x240_icons_icons" class="aligncenter size-full wp-image-1729" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Cross-Posting: &lt;a href="http://mrubino.net"&gt;http://mrubino.net&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=203343" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/Trucos/default.aspx">Trucos</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/css/default.aspx">css</category></item><item><title>Web Deploy – config Transformation</title><link>http://geeks.ms/blogs/mrubino/archive/2012/01/31/web-deploy-config-transformation.aspx</link><pubDate>Tue, 31 Jan 2012 19:16:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:203096</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>5</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=203096</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2012/01/31/web-deploy-config-transformation.aspx#comments</comments><description>&lt;p style="text-align:justify;"&gt;Una de las utilidades que contamos los desarrolladores web en Visual Studio 2010 y que por mi experiencia veo que no se utiliza mucho. Es la transformaci&amp;oacute;n de ficheros de configuraci&amp;oacute;n.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;A quien no le ha pasado que ha realizado un despliegue al entorno de producci&amp;oacute;n y se ha dejado el modo debug activado o la cadena de conexi&amp;oacute;n a la de test. Pues Visual Studio nos permite poder evitar esto de una manera muy f&amp;aacute;cil y adem&amp;aacute;s autom&amp;aacute;tica, para que no nos tengamos que preocupar de si lo hemos configurado todo correctamente para el despliegue.&lt;/p&gt;
&lt;h2&gt;Ficheros de Transformaci&amp;oacute;n&lt;/h2&gt;
&lt;p style="text-align:justify;"&gt;Una de las situaciones que habitualmente nos encontramos en los proyectos, es que tenemos que tener diferentes ficheros de configuraci&amp;oacute;n para cada uno de los entornos de los que contamos.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;No es lo mismo hacer un despliegue para el entorno de Desarrollo que para Pre-Test o Producci&amp;oacute;n. Por eso ahora disponemos de la posibilidad de modificar el fichero de configuraci&amp;oacute;n dependiendo de donde queramos publicar nuestra aplicaci&amp;oacute;n web.&lt;span id="more-349"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Lo primero que tenemos que hacer es crear una configuraci&amp;oacute;n de compilaci&amp;oacute;n que la podemos definir por ejemplo para cada entorno en el que trabajaremos con las diferentes configuraciones.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marcrub.files.wordpress.com/2011/03/addentorno.png"&gt;&lt;img height="112" width="216" src="http://marcrub.files.wordpress.com/2011/03/addentorno.png?w=216&amp;amp;h=112" title="AddEntorno" class="aligncenter" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Podemos crear una configuraci&amp;oacute;n nueva o copiar de otra existente.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marcrub.files.wordpress.com/2011/03/addentorno3.png"&gt;&lt;img width="500" src="http://marcrub.files.wordpress.com/2011/03/addentorno3.png?w=500" title="AddEntorno3" class="aligncenter" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Una vez que tengamos las configuraciones creadas, hacemos clic con el bot&amp;oacute;n derecho en el fichero de configuraci&amp;oacute;n y a&amp;ntilde;adimos los nuevos ficheros de transformaci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marcrub.files.wordpress.com/2011/03/addentorno4.png"&gt;&lt;img height="148" width="468" src="http://marcrub.files.wordpress.com/2011/03/addentorno4.png?w=468&amp;amp;h=148" title="AddEntorno4" class="aligncenter" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Tendemos que tener tantos ficheros de transformaci&amp;oacute;n como diferentes configuraciones necesitemos en nuestros despliegues.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marcrub.files.wordpress.com/2011/03/addentorno5.png"&gt;&lt;img height="123" width="200" src="http://marcrub.files.wordpress.com/2011/03/addentorno5.png?w=200&amp;amp;h=123" title="AddEntorno5" class="aligncenter" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;&amp;iquest;Qu&amp;eacute; son los ficheros de Transformaci&amp;oacute;n?&lt;/h2&gt;
&lt;p style="text-align:justify;"&gt;Los ficheros de transformaci&amp;oacute;n, son ficheros XML que utilizan los atributos XML para especificar que se tienen que modificar o eliminar del fichero web.config.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Por ejemplo el fichero de transformaci&amp;oacute;n de la publicaci&amp;oacute;n en Release elimina el famoso atributo Debug=true.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="syntaxhighlighter  xml" id="highlighter_211947"&gt;
&lt;div class="bar              "&gt;
&lt;div class="toolbar"&gt;&lt;a href="http://geeks.ms/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=316&amp;amp;postid=203096#viewSource" title="ver fuente" class="item viewSource" style="width:16px;height:16px;"&gt;ver fuente&lt;/a&gt;
&lt;div class="item copyToClipboard"&gt;&lt;/div&gt;
&lt;a href="http://geeks.ms/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=316&amp;amp;postid=203096#printSource" title="imprimir" class="item printSource" style="width:16px;height:16px;"&gt;imprimir&lt;/a&gt;&lt;a href="http://geeks.ms/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=316&amp;amp;postid=203096#about" title="?" class="item about" style="width:16px;height:16px;"&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;&amp;lt;?&lt;/code&gt;&lt;code class="xml keyword"&gt;xml&lt;/code&gt; &lt;code class="xml color1"&gt;version&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;1.0&amp;quot;&lt;/code&gt;&lt;code class="xml plain"&gt;?&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;configuration&lt;/code&gt; &lt;code class="xml color1"&gt;xmlns:xdt&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;&lt;a href="http://schemas.microsoft.com/XML-Document-Transform"&gt;http://schemas.microsoft.com/XML-Document-Transform&lt;/a&gt;&amp;quot;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;system.web&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;compilation&lt;/code&gt; &lt;code class="xml color1"&gt;xdt:Transform&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;RemoveAttributes(debug)&amp;quot;&lt;/code&gt; &lt;code class="xml plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;system.web&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;configuration&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;XML-Document-Transform&lt;/h3&gt;
&lt;p&gt;Este espacio de nombres tiene dos propiedades Principales:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Locator:&lt;/strong&gt;Se seleccionan los elementos que coinciden con la expresi&amp;oacute;n XPath combinada. 
&lt;ul&gt;
&lt;li&gt;&lt;span style="color:#666699;"&gt;&lt;strong&gt;Locator&lt;/strong&gt;=&amp;rdquo;Match(key)&amp;rdquo;&lt;/span&gt; &amp;ndash; Selecciona los elementos que concidan con el atributo key.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Transform:&lt;/strong&gt;Especifica la transformaci&amp;oacute;n de elemento o elementos seleccionados con la propiedad locator. 
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Replace:&lt;/strong&gt; Sustituye el elemento o primer elemento seleccionado por el informado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Insert:&lt;/strong&gt; Inserta un nuevo elemento como podr&amp;iacute;a ser una nueva cadena de conexi&amp;oacute;n, al final de la colecci&amp;oacute;n.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;InsertBefore:&lt;/strong&gt; Inserta un nuevo elemento justo antes del elemento seleccionado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;InsertAfter:&lt;/strong&gt; Inserta un nuevo elemento justo despu&amp;eacute;s del elemento seleccionado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remove:&lt;/strong&gt; Elimina el elemento o primer elemento seleccionado.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RemoveAll:&lt;/strong&gt; Elimina todos los elementos seleccionados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RemoveAttributes:&lt;/strong&gt; elimina el atributo especificado de los elementos seleccionados.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SetAttributes:&lt;/strong&gt; Modifica los atributos especificados de los elementos seleccionados.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Los ejemplos m&amp;aacute;s utilizados ser&amp;iacute;an:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;nbsp;&lt;ol&gt;
&lt;li&gt;Modificar el valor de una propiedad personalizada de la configuraci&amp;oacute;n por su clave.&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="syntaxhighlighter  xml" id="highlighter_415038"&gt;
&lt;div class="bar "&gt;
&lt;div class="toolbar"&gt;&lt;a href="http://geeks.ms/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=316&amp;amp;postid=203096#viewSource" title="ver fuente" class="item viewSource" style="width:16px;height:16px;"&gt;ver fuente&lt;/a&gt;
&lt;div class="item copyToClipboard"&gt;&lt;/div&gt;
&lt;a href="http://geeks.ms/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=316&amp;amp;postid=203096#printSource" title="imprimir" class="item printSource" style="width:16px;height:16px;"&gt;imprimir&lt;/a&gt;&lt;a href="http://geeks.ms/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=316&amp;amp;postid=203096#about" title="?" class="item about" style="width:16px;height:16px;"&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;add&lt;/code&gt; &lt;code class="xml color1"&gt;key&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;UrlEscritura&amp;quot;&lt;/code&gt; &lt;code class="xml color1"&gt;value&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;&lt;a href="http://test/"&gt;http://test/&lt;/a&gt; Solicitudes/ServicioEscritura.svc&amp;quot;&lt;/code&gt; &lt;code class="xml color1"&gt;xdt:Transform&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;SetAttributes&amp;quot;&lt;/code&gt; &lt;code class="xml color1"&gt;xdt:Locator&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;Match(key)&amp;quot;&lt;/code&gt;&lt;code class="xml plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;nbsp;&lt;ol&gt;
&lt;li&gt;Modificar una cadena de conexi&amp;oacute;n por su nombre: perfecto si atacamos a diferentes bases de datos en cada entorno.&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="syntaxhighlighter  xml" id="highlighter_45964"&gt;
&lt;div class="bar  "&gt;
&lt;div class="toolbar"&gt;&lt;a href="http://geeks.ms/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=316&amp;amp;postid=203096#viewSource" title="ver fuente" class="item viewSource" style="width:16px;height:16px;"&gt;ver fuente&lt;/a&gt;
&lt;div class="item copyToClipboard"&gt;&lt;/div&gt;
&lt;a href="http://geeks.ms/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=316&amp;amp;postid=203096#printSource" title="imprimir" class="item printSource" style="width:16px;height:16px;"&gt;imprimir&lt;/a&gt;&lt;a href="http://geeks.ms/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=316&amp;amp;postid=203096#about" title="?" class="item about" style="width:16px;height:16px;"&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;connectionStrings&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;add&lt;/code&gt; &lt;code class="xml color1"&gt;name&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;SqlCon&amp;quot;&lt;/code&gt; &lt;code class="xml color1"&gt;connectionString&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;Data Source=server;Initial Catalog=test;&amp;quot;&lt;/code&gt; &lt;code class="xml color1"&gt;providerName&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;System.Data.SqlClient&amp;quot;&lt;/code&gt; &lt;code class="xml color1"&gt;xdt:Transform&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;SetAttributes&amp;quot;&lt;/code&gt; &lt;code class="xml color1"&gt;xdt:Locator&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;Match(name)&amp;quot;&lt;/code&gt;&lt;code class="xml plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;connectionStrings&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&amp;nbsp;&lt;ol&gt;
&lt;li&gt;Eliminar el famoso atributo de modo Debug cuando compliamos en Release:&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="syntaxhighlighter  xml" id="highlighter_164506"&gt;
&lt;div class="bar "&gt;
&lt;div class="toolbar"&gt;&lt;a href="http://geeks.ms/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=316&amp;amp;postid=203096#viewSource" title="ver fuente" class="item viewSource" style="width:16px;height:16px;"&gt;ver fuente&lt;/a&gt;
&lt;div class="item copyToClipboard"&gt;&lt;/div&gt;
&lt;a href="http://geeks.ms/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=316&amp;amp;postid=203096#printSource" title="imprimir" class="item printSource" style="width:16px;height:16px;"&gt;imprimir&lt;/a&gt;&lt;a href="http://geeks.ms/controlpanel/blogs/posteditor.aspx?SelectedNavItem=Posts&amp;amp;sectionid=316&amp;amp;postid=203096#about" title="?" class="item about" style="width:16px;height:16px;"&gt;?&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;system.web&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;compilation&lt;/code&gt; &lt;code class="xml color1"&gt;xdt:Transform&lt;/code&gt;&lt;code class="xml plain"&gt;=&lt;/code&gt;&lt;code class="xml string"&gt;&amp;quot;RemoveAttributes(debug)&amp;quot;&lt;/code&gt; &lt;code class="xml plain"&gt;/&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;system.web&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;Conclusi&amp;oacute;n&lt;/h2&gt;
&lt;p style="text-align:justify;"&gt;Si nos preocupamos un poco en tener diferentes configuraciones de compilaci&amp;oacute;n para nuestros entornos, adem&amp;aacute;s de facilitarnos los despliegues y su configuraci&amp;oacute;n de forma autom&amp;aacute;tica.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Tambi&amp;eacute;n nos evita los t&amp;iacute;picos errores por descuido que tantos problemas nos suelen dar en los despliegues.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Cross-Posting: &lt;a href="http://mrubino.net"&gt;http://mrubino.net&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=203096" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/asp.net/default.aspx">asp.net</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/MVC/default.aspx">MVC</category></item><item><title>Push con SingalR</title><link>http://geeks.ms/blogs/mrubino/archive/2012/01/17/push-con-singalr.aspx</link><pubDate>Tue, 17 Jan 2012 20:10:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:202782</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=202782</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2012/01/17/push-con-singalr.aspx#comments</comments><description>&lt;p style="text-align:justify;"&gt;&amp;Uacute;ltimamente se est&amp;aacute; oyendo hablar mucho de SignalR en los en tornos de ASP.Net y no es para menos.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Los programadores web estamos acostumbrados a hacer peticiones al servidor &amp;ldquo;Pull&amp;rdquo; para poder consultar cualquier cosa y en m&amp;aacute;s de una ocasi&amp;oacute;n hemos tenido que tirar de un timer en el cliente para que cada X-tiempo consulte un recurso del servidor e ir informando al usuario del progreso de una tarea o de los datos que se tienen que actualizar constantemente.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Para evitar esto podr&amp;iacute;amos utilizar a d&amp;iacute;a de hoy varias opciones como la &lt;strong&gt;API de html5 WebSocket&lt;/strong&gt; que est&amp;aacute; en fase borrador y ha tenido alg&amp;uacute;n problema de seguridad, podemos utilizar el servidor &lt;a target="_blank" href="http://es.wikipedia.org/wiki/Openfire" title="OpenFire"&gt;&lt;strong&gt;Openfire&lt;/strong&gt; &lt;/a&gt;con el protocolo &lt;strong&gt;&lt;a target="_blank" href="http://es.wikipedia.org/wiki/Extensible_Messaging_and_Presence_Protocol" title="Xmpp"&gt;XMPP&lt;/a&gt;&lt;/strong&gt; o servidor &lt;strong&gt;&lt;a target="_blank" href="http://nodejs.org/" title="nodejs"&gt;Node.js&lt;/a&gt;&lt;/strong&gt; con la librer&amp;iacute;a &lt;strong&gt;&lt;a target="_blank" href="http://nowjs.com/"&gt;Nowjs&lt;/a&gt;&lt;/strong&gt; . Pero la ventaja que proporciona &lt;strong&gt;SignalR&lt;/strong&gt; frente los otros es que esta especialmente dise&amp;ntilde;ado para aprovechar las caracter&amp;iacute;sticas de las aplicaciones ASP.NET MVC tanto el lado del servidor como la parte cliente.&lt;/p&gt;
&lt;h2&gt;Como empezar&lt;/h2&gt;
&lt;p&gt;Para empezar tenemos que instalar la librer&amp;iacute;a que tenemos disponible desde Nuget.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/01/signalr.png"&gt;&lt;img height="362" width="483" src="http://marcrub.files.wordpress.com/2012/01/signalr.png?w=483&amp;amp;h=362" title="signalR" class="aligncenter" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;span id="more-1668"&gt;&lt;/span&gt;Tienes que tener en cuenta que tiene dependencias con la librer&amp;iacute;a JQuery .&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/01/signalr_error.png"&gt;&lt;img src="http://marcrub.files.wordpress.com/2012/01/signalr_error.png?w=604" title="signalR_error" class="alignnone size-full wp-image-1671" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;El Servidor&lt;/h2&gt;
&lt;p style="text-align:justify;"&gt;En el servidor solo necesitamos una clase que implemente Hub y si queremos hacer una devoluci&amp;oacute;n al cliente solo tenemos que a&amp;ntilde;adir una expresi&amp;oacute;n din&amp;aacute;mica a Clients que se resolver&amp;aacute; en tiempo de ejecuci&amp;oacute;n.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="syntaxhighlighter  csharp" id="highlighter_561746"&gt;
&lt;div class="bar"&gt;
&lt;div class="toolbar"&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp keyword"&gt;public&lt;/code&gt; &lt;code class="csharp keyword"&gt;class&lt;/code&gt; &lt;code class="csharp plain"&gt;NotificationHub : Hub&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp keyword"&gt;public&lt;/code&gt; &lt;code class="csharp keyword"&gt;void&lt;/code&gt; &lt;code class="csharp plain"&gt;Notificar(&lt;/code&gt;&lt;code class="csharp keyword"&gt;string&lt;/code&gt; &lt;code class="csharp plain"&gt;valor)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;Clients.AddValor(&lt;/code&gt;&lt;code class="csharp string"&gt;&amp;quot;Informamos al cliente&amp;quot;&lt;/code&gt;&lt;code class="csharp plain"&gt;);&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;7&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;El cliente&lt;/h2&gt;
&lt;p style="text-align:justify;"&gt;Recordar la dependencia con JQuery y adem&amp;aacute;s hay que poner una referencia a &amp;ldquo;/Signalr/Hubs&amp;rdquo; que es donde se crearan los scripts din&amp;aacute;micamente para las llamadas al servidor.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="syntaxhighlighter  jscript" id="highlighter_799937"&gt;
&lt;div class="bar"&gt;
&lt;div class="toolbar"&gt;&amp;nbsp;
&lt;div class="item copyToClipboard"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript plain"&gt;&amp;lt;script type=&lt;/code&gt;&lt;code class="jscript string"&gt;&amp;quot;text/javascript&amp;quot;&lt;/code&gt;&lt;code class="jscript plain"&gt;&amp;gt;&lt;/code&gt;&lt;code class="jscript comments"&gt;// &amp;lt;![CDATA[&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript plain"&gt;src&amp;lt;/span&amp;gt;=&lt;/code&gt;&lt;code class="jscript string"&gt;&amp;quot;/Scripts/jquery-1.7.1.js&amp;quot;&lt;/code&gt; &lt;code class="jscript plain"&gt;type=&lt;/code&gt;&lt;code class="jscript string"&gt;&amp;quot;text/javascript&amp;quot;&lt;/code&gt;&lt;code class="jscript plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript comments"&gt;// ]]&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript plain"&gt;&amp;lt;script type=&lt;/code&gt;&lt;code class="jscript string"&gt;&amp;quot;text/javascript&amp;quot;&lt;/code&gt;&lt;code class="jscript plain"&gt;&amp;gt;&lt;/code&gt;&lt;code class="jscript comments"&gt;// &amp;lt;![CDATA[&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript plain"&gt;src&amp;lt;/span&amp;gt;=&lt;/code&gt;&lt;code class="jscript string"&gt;&amp;quot;/Scripts/jquery.signalR.js&amp;quot;&lt;/code&gt; &lt;code class="jscript plain"&gt;type=&lt;/code&gt;&lt;code class="jscript string"&gt;&amp;quot;text/javascript&amp;quot;&lt;/code&gt;&lt;code class="jscript plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript comments"&gt;// ]]&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;7&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript plain"&gt;&amp;lt;script type=&lt;/code&gt;&lt;code class="jscript string"&gt;&amp;quot;text/javascript&amp;quot;&lt;/code&gt;&lt;code class="jscript plain"&gt;&amp;gt;&lt;/code&gt;&lt;code class="jscript comments"&gt;// &amp;lt;![CDATA[&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;8&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript plain"&gt;src&amp;lt;/span&amp;gt;=&lt;/code&gt;&lt;code class="jscript string"&gt;&amp;quot;/Signalr/Hubs&amp;quot;&lt;/code&gt; &lt;code class="jscript plain"&gt;type=&lt;/code&gt;&lt;code class="jscript string"&gt;&amp;quot;text/javascript&amp;quot;&lt;/code&gt;&lt;code class="jscript plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;9&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript comments"&gt;// ]]&amp;gt;&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="syntaxhighlighter  jscript" id="highlighter_763877"&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript plain"&gt;$.connection.hub.start();&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript keyword"&gt;var&lt;/code&gt; &lt;code class="jscript plain"&gt;hub = $.connection.notificationHub;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript plain"&gt;hub.AddValor = &lt;/code&gt;&lt;code class="jscript keyword"&gt;function&lt;/code&gt; &lt;code class="jscript plain"&gt;(valor) {&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript plain"&gt;alert(valor);&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="jscript plain"&gt;};&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;1. Abrimos la conexi&amp;oacute;n con el servidor.&lt;br /&gt;2. Inicializamos nuestro hub donde haremos las llamadas.&lt;br /&gt;3. Definimos la funci&amp;oacute;n de devoluci&amp;oacute;n para actuar cuando el servidor nos informe.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Ya esta !!!! Es s&amp;uacute;per sencillo !!!! &lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;EJEMPLO&lt;/h2&gt;
&lt;p style="text-align:justify;"&gt;Har&amp;eacute; un peque&amp;ntilde;o ejemplo para que se vea toda su potencia en acci&amp;oacute;n. Imaginaros un control de encuesta donde sea el servidor el que te informe que sus datos se han actualizado y solo permita votar una vez al usuario, toda la l&amp;oacute;gica estar&amp;aacute; en el servidor y no en la UI, de esta manera no mezclamos responsabilidades.&lt;br /&gt;Utilizar&amp;eacute; la librer&amp;iacute;a &lt;strong&gt;&lt;a target="_blank" href="http://www.jqplot.com/docs/files/usage-txt.html"&gt;jqplot.js&lt;/a&gt;&lt;/strong&gt; para mostrar la gr&amp;aacute;fica de la encuesta en tiempo real.&lt;/p&gt;
&lt;h3&gt;Servidor&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;Primero crear&amp;eacute; la parte del servidor donde estar&amp;aacute; la l&amp;oacute;gica de los votos.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;div class="syntaxhighlighter  csharp" id="highlighter_545508"&gt;
&lt;div class="item copyToClipboard"&gt;&lt;/div&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp keyword"&gt;public&lt;/code&gt; &lt;code class="csharp keyword"&gt;class&lt;/code&gt; &lt;code class="csharp plain"&gt;NotificationHub : Hub&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp keyword"&gt;public&lt;/code&gt; &lt;code class="csharp keyword"&gt;void&lt;/code&gt; &lt;code class="csharp plain"&gt;Notificar( &lt;/code&gt;&lt;code class="csharp keyword"&gt;string&lt;/code&gt; &lt;code class="csharp plain"&gt;valor)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp keyword"&gt;if&lt;/code&gt; &lt;code class="csharp plain"&gt;(valor != &lt;/code&gt;&lt;code class="csharp keyword"&gt;null&lt;/code&gt; &lt;code class="csharp plain"&gt;&amp;amp;&amp;amp; Encuesta.Instance != &lt;/code&gt;&lt;code class="csharp keyword"&gt;null&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;&amp;amp;&amp;amp; Encuesta.Datos.ContainsKey(valor))&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;var clientId = Context.ClientId;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp keyword"&gt;if&lt;/code&gt; &lt;code class="csharp plain"&gt;(Encuesta.Usuarios.Any(u =&amp;gt; u == clientId))&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp comments"&gt;// El usuario ya ha votado no hay que actuar&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp comments"&gt;// ni informar de actualizaciones&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;13&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;14&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp keyword"&gt;else&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;15&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;16&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;Encuesta.Usuarios.Add(clientId);&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;17&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;Encuesta.Datos[valor]++;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;18&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;var resultado = Encuesta.Datos.Keys.Select(&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;19&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;key =&amp;gt; &lt;/code&gt;&lt;code class="csharp keyword"&gt;new&lt;/code&gt; &lt;code class="csharp plain"&gt;List&amp;lt;/pre&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;20&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;21&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;&amp;lt;pre&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;22&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;23&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;key, Encuesta.Datos[key]&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;24&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;}).ToList();&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;25&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;26&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp comments"&gt;// Informamos al cliente&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;27&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;Clients.AddValor(resultado);&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;28&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;29&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;30&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;31&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Esta clase controla si el usuario ya ha votado y si no lo a&amp;ntilde;ade a la lista para no permitir votar la pr&amp;oacute;xima vez que llame el mismo cliente y como se puede observar, tenemos acceso al identificador del cliente para controlar quien es el que hace la llamada, pero adem&amp;aacute;s podemos acceder al dentity para hacer un seguimiento m&amp;aacute;s exhaustivo del usuario y sus credenciales.&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/01/signalr3.png"&gt;&lt;img height="325" width="604" src="http://marcrub.files.wordpress.com/2012/01/signalr3.png?w=604&amp;amp;h=325" title="signalR3" class="alignnone size-full wp-image-1680" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Luego si el voto es de un elemento correcto le incrementa el n&amp;uacute;mero de votos y retorna a todos los clientes conectados los nuevos datos de la encuesta actualizada.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;El cliente llamara a &lt;strong&gt;Notificar(valor)&lt;/strong&gt; para informar del voto y estar&amp;aacute; en espera que el servidor actualice los datos con &lt;strong&gt;AddValor(resultado).&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;Cliente&lt;/h3&gt;
&lt;p style="text-align:justify;"&gt;Tendremos una vista con varios radio buttons para seleccionar las opciones de la encuesta y un bot&amp;oacute;n que lanzara la llamada al servidor con la selecci&amp;oacute;n del usuario.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="syntaxhighlighter  jscript" id="highlighter_687456"&gt;
&lt;div class="bar"&gt;
&lt;div class="toolbar"&gt;&amp;nbsp;
&lt;div class="item copyToClipboard"&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript plain"&gt;$(&lt;/code&gt;&lt;code class="jscript keyword"&gt;function&lt;/code&gt; &lt;code class="jscript plain"&gt;() {&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript plain"&gt;inicializarEncuesta();&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript plain"&gt;$(&lt;/code&gt;&lt;code class="jscript string"&gt;&amp;quot;#btnSendNotificacion&amp;quot;&lt;/code&gt;&lt;code class="jscript plain"&gt;).click(&lt;/code&gt;&lt;code class="jscript keyword"&gt;function&lt;/code&gt; &lt;code class="jscript plain"&gt;() {&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript keyword"&gt;var&lt;/code&gt; &lt;code class="jscript plain"&gt;voto = $(&lt;/code&gt;&lt;code class="jscript string"&gt;&amp;#39;input:radio:checked&amp;#39;&lt;/code&gt;&lt;code class="jscript plain"&gt;).val();&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="jscript plain"&gt;hub.notificar(voto);&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="jscript plain"&gt;});&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="jscript plain"&gt;$.connection.hub.start();&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript keyword"&gt;var&lt;/code&gt; &lt;code class="jscript plain"&gt;hub = $.connection.notificationHub;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript plain"&gt;hub.AddValor = &lt;/code&gt;&lt;code class="jscript keyword"&gt;function&lt;/code&gt; &lt;code class="jscript plain"&gt;(valor) {&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="jscript plain"&gt;$.jqplot(&lt;/code&gt;&lt;code class="jscript string"&gt;&amp;#39;chart1&amp;#39;&lt;/code&gt;&lt;code class="jscript plain"&gt;, [valor], chartOption()).replot();&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="jscript plain"&gt;};&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="jscript plain"&gt;});&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Si el servidor devuelve nuevos datos &amp;ldquo;AddValor&amp;rdquo; entonces repintaremos el gr&amp;aacute;fico con la nueva informaci&amp;oacute;n.&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://marcrub.files.wordpress.com/2012/01/signalr2.png"&gt;&lt;img height="275" width="604" src="http://marcrub.files.wordpress.com/2012/01/signalr2.png?w=604&amp;amp;h=275" title="signalR2" class="alignnone size-full wp-image-1681" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;De esta manera todos los usuarios conectados a la encuesta reciben las actualizaciones en tiempo real.&lt;/p&gt;
&lt;h2&gt;Conclusi&amp;oacute;n&lt;/h2&gt;
&lt;p style="text-align:justify;"&gt;SignalR es un Framework potente y f&amp;aacute;cil de utilizar que nos permite mantener conexiones abiertas con el servidor de ASP.NET.&lt;br /&gt;Con este tipo de librer&amp;iacute;as podemos empezar a realizar aplicaciones realmente colaborativas y en tiempo real, donde se definen mejor las responsabilidades gracias a las llamadas Push y nos ayuda a no agregar l&amp;oacute;gica de negocios en nuestras UI.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Cross-Posting: &lt;a href="http://mrubino.net"&gt;http://mrubino.net&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=202782" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/SignalR/default.aspx">SignalR</category></item><item><title>Deserializar JSon a tipo anónimo .Net</title><link>http://geeks.ms/blogs/mrubino/archive/2011/12/05/deserializar-json-a-tipo-an-243-nimo-net.aspx</link><pubDate>Mon, 05 Dec 2011 10:26:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:201997</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=201997</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/12/05/deserializar-json-a-tipo-an-243-nimo-net.aspx#comments</comments><description>&lt;p style="text-align:justify;"&gt;En ciertas ocasiones podemos necesitar deserializar un objeto pasado desde un cliente en formato JSon a un tipo .net an&amp;oacute;nimo. Por ejemplo si utilizas MongoDB con el driver NORM y pretendes filtrar u ordenar de una manera din&amp;aacute;mica, es dif&amp;iacute;cil pasar estos objetos a la query para poder generar un filtro din&amp;aacute;mico.&lt;/p&gt;
&lt;p&gt;Para hacernos una idea esta ser&amp;iacute;a una consulta paginada y con un filtro sencillo con NORM:&lt;/p&gt;
&lt;div class="syntaxhighlighter  csharp" id="highlighter_478650"&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp comments"&gt;&lt;span style="color:#008200;"&gt;//NoRM anonymous objects:&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;GetRepository().GetCollection(&lt;/code&gt;&lt;code class="csharp string"&gt;&lt;span style="color:#0000ff;"&gt;&amp;quot;Personas&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;.Find(&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;{ Nombre = Q.IsNotNull() }, &lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;span style="color:#008200;"&gt;//Where&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;{ Fecha = OrderBy.Descending }, &lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;span style="color:#008200;"&gt;//OrderBy&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;10, &lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;span style="color:#008200;"&gt;// N&amp;ordm; elementos de la secuencia &amp;quot;Skip&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;7&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;0 &lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;span style="color:#008200;"&gt;// Primer elemento de la secuencia &amp;quot;Take&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;8&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;);&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Esta consulta nos devolver&amp;iacute;a las 10 primeras personas con Nombre que no sea null.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Tanto al utilizar los tipos an&amp;oacute;nimos como en las consultas LinQ se tiene que especificar la propiedad por la que se quiere filtrar u ordenar y eso nos limita a la hora de intentar hacer estas consultas de forma din&amp;aacute;mica.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Parara hacer una prueba crearemos un tipo espec&amp;iacute;fico para utilizar en las consultas desde javaScript.&lt;/p&gt;
&lt;p&gt;Lo ideal ser&amp;iacute;a:&lt;/p&gt;
&lt;div class="syntaxhighlighter  csharp" id="highlighter_201746"&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;class&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;QueryRequest&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;int&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Pagina { &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;get&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;set&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; }&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;int&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Registros { &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;get&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;set&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; }&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;object&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Orden { &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;get&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;set&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; }&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;object&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Filtro { &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;get&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;set&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; }&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;7&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Con este tipo nos pasar&amp;iacute;an como par&amp;aacute;metros lel n&amp;uacute;mero de p&amp;aacute;gina, la cantidad de registros y adem&amp;aacute;s un &lt;strong&gt;object &lt;/strong&gt;para filtrar y otro &lt;strong&gt;object&lt;/strong&gt; para ordenar.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p style="text-align:justify;"&gt;Pero esto no funciona porque NORM no lo reconoce como tipo an&amp;oacute;nimo y si lo intentamos pasar como string tampoco funciona.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style="text-align:justify;"&gt;Ahora solo nos queda intentar deserializar directamente nosotros el objeto JSON en un tipo an&amp;oacute;nimo y para eso utilizaremos el tipo &lt;strong&gt;dynamic &lt;/strong&gt;&lt;strong&gt;&lt;/strong&gt;que tenemos disponible desde c# 4.&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Para eso solo tenemos que deserializar un texto con datos en formato JSon utilizandoJavaScriptSerializerque te permite utilizar un tipo T.&lt;/p&gt;
&lt;div class="syntaxhighlighter  csharp" id="highlighter_779011"&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;var jss = &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;System.Web.Script.Serialization.JavaScriptSerializer();&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;var ObjetoAnonimo = jss.Deserialize(strJson);&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Con estas dos l&amp;iacute;neas lo tenemos solucionado y el nuevo tipo podr&amp;iacute;a quedar de esta manera para facilitar la entrada de los datos como &lt;strong&gt;string&lt;/strong&gt; y la salida como objeto din&amp;aacute;mico.&lt;/p&gt;
&lt;div class="syntaxhighlighter  csharp" id="highlighter_163442"&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;class&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;QueryRequest&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;int&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Pagina { &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;get&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;set&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; }&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;int&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;Registros { &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;get&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;set&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;; }&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;span style="color:#008200;"&gt;// input string - output dynamic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;private&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;orden;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;dynamic Orden { &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;get&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;DeserializarJSon(orden); } &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;set&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;{ orden = value; } }&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;span style="color:#008200;"&gt;// input string - output dynamic&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;private&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;filtro;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;dynamic Filtro { &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;get&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;{ &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;DeserializarJSon(filtro); } &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;set&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;{ filtro = value; } }&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;13&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;14&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;private&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;dynamic DeserializarJSon(&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;string&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;strJson)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;15&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;16&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;var jss = &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;JavaScriptSerializer();&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;17&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;dynamic resultado;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;18&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;try&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;19&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;20&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;resultado = jss.Deserialize(strJson);&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;21&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;22&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;catch&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;(Exception)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;23&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;24&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;resultado = &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;{ };&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;25&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;26&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;resultado;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;27&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;28&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;29&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ahora nuestro objeto es capaz de devolver un tipo an&amp;oacute;nimo al consultar la propiedad Filtro y Orden.&lt;/p&gt;
&lt;div class="syntaxhighlighter  csharp" id="highlighter_828809"&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;IEnumerable FindFiltradoDinamico( QueryRequest datos )&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;span style="color:#008200;"&gt;//NoRM anonymous objects:&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;GetRepository().GetCollection(&lt;/code&gt;&lt;code class="csharp string"&gt;&lt;span style="color:#0000ff;"&gt;&amp;quot;Personas&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;)&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;.Find(&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;datos.Filtro &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;as&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;object&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;,&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;datos.Orden &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;as&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;object&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;,&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;datos.Registros,&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;datos.Pagina * datos.Registros&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;);&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ahora si tenemos las consultas preparadas para aceptar par&amp;aacute;metros din&amp;aacute;micos.&lt;/p&gt;
&lt;div class="syntaxhighlighter  csharp" id="highlighter_150991"&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;01&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;ActionResult Index()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;02&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;03&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;var datos = &lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;new&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;QueryRequest()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;04&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;05&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;Pagina = 0,&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;06&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;Registros = 10,&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;07&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;Filtro = &lt;/code&gt;&lt;code class="csharp string"&gt;&lt;span style="color:#0000ff;"&gt;&amp;quot; { Edad : { &amp;#39;$gt&amp;#39;: 15 } } &amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;, &lt;/code&gt;&lt;code class="csharp comments"&gt;&lt;span style="color:#008200;"&gt;//mayor de 15 a&amp;ntilde;os&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;08&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;Orden = &lt;/code&gt;&lt;code class="csharp string"&gt;&lt;span style="color:#0000ff;"&gt;&amp;quot;{ Nombre : -1}&amp;quot;&lt;/span&gt;&lt;/code&gt; &lt;code class="csharp comments"&gt;&lt;span style="color:#008200;"&gt;// 1 Ascendente - -1 Descendente&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;09&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;};&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;10&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;11&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;var f2 = repositoryPersona.FindFiltradoDinamico(datos);&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;12&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;13&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;View();&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;14&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/dynamic.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/dynamic.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Cross-Posting: &lt;a href="http://mrubino.net"&gt;http://mrubino.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201997" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/JSon/default.aspx">JSon</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/MVC/default.aspx">MVC</category></item><item><title>Vistas &amp; View Engines en ASP.NET MVC</title><link>http://geeks.ms/blogs/mrubino/archive/2011/11/29/vistas-amp-amp-view-engines-en-asp-net-mvc.aspx</link><pubDate>Tue, 29 Nov 2011 11:52:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:201926</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=201926</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/11/29/vistas-amp-amp-view-engines-en-asp-net-mvc.aspx#comments</comments><description>&lt;p style="TEXT-ALIGN:justify;"&gt;Partiendo de que la intenci&amp;oacute;n de MVC es separar las responsabilidades de cada componente, me gustar&amp;iacute;a explicar cual es la responsabilidad de las vistas y como utilizarlas en ASP.NET MVC.&lt;/p&gt;
&lt;p style="TEXT-ALIGN:justify;"&gt;Lo que primero nos choca a los programadores que procedemos de los formularios web, es que han desaparecido los eventos y el famoso ciclo de vida, y eso se debe precisamente que ASP.NET MVC es mucho m&amp;aacute;s natural en los protocolos HTTP y HTML en su tratamiento.&lt;/p&gt;
&lt;p style="TEXT-ALIGN:center;"&gt;&lt;a href="http://marcrub.files.wordpress.com/2011/11/dd942833_fig01es-es.gif"&gt;&lt;img height="320" width="400" src="http://marcrub.files.wordpress.com/2011/11/dd942833_fig01es-es.gif?w=400&amp;amp;h=320" title="dd942833_fig01(es-es)" class="alignnone size-full wp-image-1594" style="border:0;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="TEXT-ALIGN:center;"&gt;&lt;a target="_blank" href="http://msdn.microsoft.com/es-es/magazine/dd942833.aspx" title="MVCvsWebForms"&gt;&lt;span style="color:#0071bb;"&gt;Mvc vs WebForms&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="TEXT-ALIGN:justify;"&gt;Como se puede apreciar en la imagen los formularios web se basaban en los eventos para procesar una petici&amp;oacute;n, entrar en el ciclo de vida del documento, tratar el evento, pintar los controles y devolver el resultado.&lt;/p&gt;
&lt;p style="TEXT-ALIGN:justify;"&gt;Sin embargo las peticiones en MVC son mucho mas simples y respetuosas con el protocolo HTTP. La petici&amp;oacute;n la recibe el motor de rutas que mediante la URL decide cual es el controlador que la debe procesar, el Controlador puede consultar al modelo si es necesario y posteriormente devuelve un ActionResult que puede ser un fichero, datos en formato JSon, una vista, etc.&lt;span id="more-1552"&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 style="TEXT-ALIGN:justify;"&gt;Vistas&lt;/h2&gt;
&lt;p style="TEXT-ALIGN:justify;"&gt;Como ya he comentado la vista encapsula la l&amp;oacute;gica de presentaci&amp;oacute;n y &lt;strong&gt;NO tiene que contener l&amp;oacute;gica de la aplicaci&amp;oacute;n&lt;/strong&gt; ni c&amp;oacute;digo de recuperaci&amp;oacute;n de datos.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p style="TEXT-ALIGN:justify;"&gt;Las vistas no son ficheros f&amp;iacute;sicos ligados a una URL como en los formularios web. Cuando quer&amp;iacute;amos consultar un formulario ten&amp;iacute;amos que poner su ruta f&amp;iacute;sica www.miaplicacion/&lt;strong&gt;personas.aspx&lt;/strong&gt; En MVC es el controlador el que decide que vista servir y eso facilita que las url sean descriptivas y que los buscadores puedan indexar mejor las p&amp;aacute;ginas de nuestra aplicaci&amp;oacute;n &amp;ldquo;&lt;strong&gt;SEO Friendly&lt;/strong&gt;&amp;ldquo;.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;ViewBag:&lt;/h3&gt;
&lt;p&gt;Las vistas pueden recibir datos desde el controlador gracias al ViewBag que devuelve un diccionario de datos din&amp;aacute;micos. La gran diferencia con ViewData de las versiones anteriores de MVC, es que ViewBag aprovecha la opci&amp;oacute;n de c#4 para generar tipos din&amp;aacute;micamente y evita tener que hacer conversiones en la vista para obtener el tipo adecuado de los datos.&lt;/p&gt;
&lt;p style="TEXT-ALIGN:justify;PADDING-LEFT:30px;"&gt;&lt;strong&gt;En el Controlador: &lt;/strong&gt;Definimos la propiedad que queremos pasar a la vista y el dato&lt;/p&gt;
&lt;div class="syntaxhighlighter  csharp" id="highlighter_119786"&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp plain"&gt;ViewBag.Message = &lt;/code&gt;&lt;code class="csharp string"&gt;&lt;span style="color:#0000ff;"&gt;&amp;quot;Welcome to ASP.NET MVC!&amp;quot;&lt;/span&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="PADDING-LEFT:30px;"&gt;&lt;strong&gt;En la vista: &lt;/strong&gt;desde la vista recuperamos el dato de una forma muy f&amp;aacute;cil.&lt;/p&gt;
&lt;div class="syntaxhighlighter  xml" id="highlighter_219872"&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;h2&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;@ViewBag.Message&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;h2&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="PADDING-LEFT:30px;"&gt;&lt;strong&gt;ViewData vs ViewBag:&lt;/strong&gt; la gran diferencia es que ya no tenemos la necesidad de hacer conversiones de los datos para poder tratarlos correctamente&lt;/p&gt;
&lt;div class="syntaxhighlighter  xml" id="highlighter_112102"&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;@*Tipo Fecha con tipos din&amp;aacute;micos*@&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;h1&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;@ViewBag.FechaVieBag.ToShortDateString()&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;h1&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;@*Tipo Fecha con ViewData*@&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;6&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;&amp;lt;&lt;/code&gt;&lt;code class="xml keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;h1&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;@(((DateTime)ViewData[&amp;quot;Fecha&amp;quot;]).ToShortDateString())&amp;lt;/&lt;/code&gt;&lt;code class="xml keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;h1&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt;&lt;code class="xml plain"&gt;&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;7&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="xml plain"&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style="TEXT-ALIGN:justify;"&gt;Tipos de Vistas de las que disponemos:&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&amp;nbsp; &lt;strong&gt;View Page:&lt;/strong&gt; Vista principal.&lt;/li&gt;
&lt;li&gt;
&lt;div style="TEXT-ALIGN:justify;"&gt;&lt;strong&gt;LayoutView:&lt;/strong&gt; Pagina Maestra.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="TEXT-ALIGN:justify;"&gt;&lt;strong&gt;ViewContentPage:&lt;/strong&gt; Vista que utiliza una p&amp;aacute;gina Maestra predefinida.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="TEXT-ALIGN:justify;"&gt;&lt;strong&gt;Partial View:&lt;/strong&gt; Vista que se utiliza desde otra vista y no se puede llamar directamente. Como se utilizaban los user controls en los webForms. La vista parcial tiene acceso a su ViewData y al dela vista primaria, pero las actualizaciones de los datos de la vista parcial solo afectan a su viewData y no a la de la vista primaria.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div style="TEXT-ALIGN:justify;"&gt;&lt;/div&gt;
&lt;h2 style="TEXT-ALIGN:justify;"&gt;View Engines&lt;/h2&gt;
&lt;p style="TEXT-ALIGN:justify;"&gt;ASP.NET MVC utiliza view engines para generar las vistas y desde MVC3 disponemos de dos motores de vistas incluidos para utilizar directamente.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div style="TEXT-ALIGN:justify;"&gt;&lt;strong&gt;ASPX:&lt;/strong&gt; Es el motor de vistas de ASP.NET con tipos personalizados &amp;ldquo;ViewPage, ViewMasterPage y ViewUserControl&amp;rdquo; que heredan de los tipos de p&amp;aacute;ginas existentes .aspx, .ascx, .master.&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="TEXT-ALIGN:justify;"&gt;&lt;strong&gt;Razor:&lt;/strong&gt; Motor de vistas m&amp;aacute;s cercano para los programadores de C# o VB&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="TEXT-ALIGN:justify;"&gt;&lt;strong&gt;Otros:&lt;/strong&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&amp;nbsp; &lt;a rel="nofollow" href="http://dev.dejardin.org/home"&gt;&lt;span style="color:#0071bb;"&gt;Spark&lt;/span&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;div style="TEXT-ALIGN:justify;"&gt;&lt;a rel="nofollow" href="http://ndjango.org/index.php?title=NDjango_Home"&gt;&lt;span style="color:#0071bb;"&gt;NDjango&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="TEXT-ALIGN:justify;"&gt;&lt;a target="_blank" href="http://www.castleproject.org/monorail/documentation/v20/viewengines/nvelocity/index.html" title="NVelocity"&gt;&lt;span style="color:#0071bb;"&gt;NVelocity &lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div style="TEXT-ALIGN:justify;"&gt;&amp;hellip;&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 style="TEXT-ALIGN:justify;"&gt;Convenciones&lt;/h2&gt;
&lt;p style="TEXT-ALIGN:justify;"&gt;Hay un par de convenciones que nos afectan al trabajar con las vistas y nos ahorran interminables ficheros de configuraci&amp;oacute;n.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div style="TEXT-ALIGN:justify;"&gt;&lt;strong&gt;Return View():&lt;/strong&gt; no tenemos que especificar expl&amp;iacute;citamente que vista estamos devolviendo, porque si no lo hacemos utilizar&amp;aacute; el nombre de la acci&amp;oacute;n para encontrar la vista. Este ejemplo retorna la vista Create.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="syntaxhighlighter  csharp" id="highlighter_29329"&gt;
&lt;div class="lines"&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;1&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp comments"&gt;&lt;span style="color:#008200;"&gt;// GET: /Peliculas/Create&lt;/span&gt;&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;2&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;public&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;ActionResult Create()&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;3&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;{&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt2"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;4&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="csharp keyword"&gt;&lt;strong&gt;&lt;span style="color:#006699;"&gt;return&lt;/span&gt;&lt;/strong&gt;&lt;/code&gt; &lt;code class="csharp plain"&gt;View();&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;div class="line alt1"&gt;
&lt;table&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="number"&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;
&lt;td class="content"&gt;&lt;code class="spaces"&gt;&lt;/code&gt;&lt;code class="csharp plain"&gt;}&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;div style="TEXT-ALIGN:justify;"&gt;&lt;strong&gt;Estructura Vista &amp;ndash; controlador:&lt;/strong&gt; Los controladores se tendr&amp;aacute;n que llamar &lt;span style="COLOR:#ff0000;"&gt;MyNombre&lt;/span&gt;Controller y las vistas estar&amp;aacute;n en una carpeta llamada &lt;span style="COLOR:#ff0000;"&gt;MyNombre&lt;/span&gt; dentro de la carpeta Views. De esta manera el controlador encontrar&amp;aacute; la vista sin problemas.&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://marcrub.files.wordpress.com/2011/11/convenciones.png"&gt;&lt;img height="346" width="207" src="http://marcrub.files.wordpress.com/2011/11/convenciones.png?w=207&amp;amp;h=346" title="convenciones" class="size-full wp-image-1601 aligncenter" style="border:0;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="TEXT-ALIGN:justify;"&gt;En esta imagen las extensiones de los ficheros son &lt;strong&gt;.cshtml&lt;/strong&gt; porque he utilizado el motor de vista Razor en C#, si utilizara VB seria &lt;strong&gt;.vbhtml&lt;/strong&gt; y si utilizara el motor de vista ASPX ser&amp;iacute;a (&lt;strong&gt;.aspx, .ascx, .Master&lt;/strong&gt;)&lt;/p&gt;
&lt;p style="TEXT-ALIGN:justify;"&gt;Creo que con esto hemos visto todo lo que tiene que ver con las vistas en MVC 3&lt;/p&gt;
&lt;p style="TEXT-ALIGN:justify;"&gt;Cross-Posting: &lt;a href="http://mrubino.net"&gt;http://mrubino.net&lt;/a&gt;&lt;/p&gt;
&lt;p style="TEXT-ALIGN:justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="TEXT-ALIGN:justify;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201926" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/MVC/default.aspx">MVC</category></item><item><title>[webCast] Auges MVC 3 + Html5 + CSS3</title><link>http://geeks.ms/blogs/mrubino/archive/2011/11/24/webcast-auges-mvc-3-html5-css3.aspx</link><pubDate>Thu, 24 Nov 2011 22:52:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:201872</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=201872</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/11/24/webcast-auges-mvc-3-html5-css3.aspx#comments</comments><description>&lt;p&gt;Os recuerdo que este lunes grabaremos el webCast sobre MVC 3 y Html5 con Visual Studio 2010 con la gente de Auges el grupo de usuarios de ASp.Net Spain.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://auges.org/post/2011/11/21/WebCast-ASPNET-MVC-HTML5-CSS3-Jquery-La-union-perfecta-.aspx"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://auges.org/post/2011/11/21/WebCast-ASPNET-MVC-HTML5-CSS3-Jquery-La-union-perfecta-.aspx"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/logoauges.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Despu&amp;eacute;s de participar en el Barcelona Developer Conference tengo la oportunidad de repetir evento pero esta ves online y con la posibilidad de hacerla completa y sin las restricciones de tiempo que mormalmente nos encontramos en los eventos presenciales.&lt;/p&gt;
&lt;p&gt;Pod&amp;eacute;is acceder al registro en &lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032500294&amp;amp;Culture=es-ES"&gt;https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032500294&amp;amp;Culture=es-ES&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ademas recordaros que el Martes desde SecondNug ten&amp;eacute;is otro webCast de &lt;strong&gt;&lt;a target="_blank" href="http://lluisfranco.com/" title="Lluis Franco"&gt;Lluis Franco&lt;/a&gt;&lt;/strong&gt; MVP de Visual C# sobre Mejorar el rendimiento con programaci&amp;oacute;n paralela.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.secondnug.com/EventosDesarrollo/tabid/57/Default.aspx"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://www.secondnug.com/EventosDesarrollo/tabid/57/Default.aspx"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/382e20f9_2D00_da2a_2D00_4a75_2D00_b220_2D00_5e7a844575ff.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Espero Veros a Todos ;-)&lt;/p&gt;
&lt;p&gt;Cross-Posting: &lt;a href="http://mrubino.net"&gt;http://mrubino.net&lt;/a&gt; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201872" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/eventos/default.aspx">eventos</category></item><item><title>Material BcnDevConf MVC + HTML</title><link>http://geeks.ms/blogs/mrubino/archive/2011/11/21/material-bcndevconf-mvc-html.aspx</link><pubDate>Mon, 21 Nov 2011 20:10:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:201808</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=201808</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/11/21/material-bcndevconf-mvc-html.aspx#comments</comments><description>&lt;p&gt;Esta semana se ha realizado el primer &lt;strong&gt;&lt;a target="_blank" href="http://geeks.ms/controlpanel/blogs/bcndevcon.org/" title="bcndevcon"&gt;&lt;span style="color:#0071bb;"&gt;Barcelona Developer Conference 2011&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt; y espero que no sea la &amp;uacute;ltima porque nos ha dejado a todos un gran sabor de boca y una innumerable lista de nuevos contactos.&lt;/p&gt;
&lt;p&gt;Ten&amp;eacute;is disponible el material y la presentaci&amp;oacute;n para que pod&amp;aacute;is jugar un poco con el ejemplo, ya que no tuvimos mucho tiempo para verlo todo.&lt;/p&gt;
&lt;p&gt;
&lt;div id="__ss_10259133" style="width:425px;"&gt;&lt;strong style="display:block;margin:12px 0 4px;"&gt;&lt;a target="_blank" href="http://www.slideshare.net/Marckys/mvc-html5-css3" title="Mvc + html5 + css3"&gt;Mvc + html5 + css3&lt;/a&gt;&lt;/strong&gt; &lt;iframe scrolling="no" marginwidth="0" width="425" frameborder="0" src="http://www.slideshare.net/slideshow/embed_code/10259133" marginheight="0" height="355"&gt;&lt;/iframe&gt;
&lt;div style="padding:5px 0 12px;"&gt;View more &lt;a target="_blank" href="http://www.slideshare.net/"&gt;presentations&lt;/a&gt; from &lt;a target="_blank" href="http://www.slideshare.net/Marckys"&gt;Marckys&lt;/a&gt; &lt;/div&gt;
&lt;/div&gt;
&lt;/p&gt;
&lt;p&gt;Proyecto de Ejemplo : &lt;a target="_blank" href="https://skydrive.live.com/?cid=3cceb8ed88799ace&amp;amp;sc=documents&amp;amp;id=3CCEB8ED88799ACE%21268" title="Material"&gt;&lt;img height="48" width="48" src="http://marcrub.files.wordpress.com/2011/03/nonemptydocumentfolder.png?w=48&amp;amp;h=48" align="middle" alt="Folder" border="0" title="Folder" style="border-width:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Para los que os supo a poco y tenga ganas de ver la charla completa seguro que no tendremos problemas de tiempo en el webCast que haremos el pr&amp;oacute;ximo lunes 28 en el grupo de usuarios de &lt;a target="_blank" href="http://auges.org/post/2011/11/21/WebCast-ASPNET-MVC-HTML5-CSS3-Jquery-La-union-perfecta-.aspx" title="AugesMVC"&gt;&lt;span style="color:#0071bb;"&gt;ASP.NET Spain&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Nos vemos el Lunes&lt;/p&gt;
&lt;p&gt;Cross-Posting:&amp;nbsp; &lt;a href="http://mrubino.net"&gt;http://mrubino.net&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201808" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/eventos/default.aspx">eventos</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/MVC/default.aspx">MVC</category></item><item><title>[Evento] BDNDevConf: MVC + JQuery + Html5</title><link>http://geeks.ms/blogs/mrubino/archive/2011/11/12/evento-bdndevconf-mvc-jquery-html5.aspx</link><pubDate>Sat, 12 Nov 2011 12:28:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:201633</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=201633</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/11/12/evento-bdndevconf-mvc-jquery-html5.aspx#comments</comments><description>&lt;p style="text-align:justify;"&gt;&lt;a href="http://marcrub.files.wordpress.com/2011/11/logospeaker_en_us_iab_180_150.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/LogoSpeaker_5F00_en_5F00_US_5F00_IAB_5F00_180_5F00_150.jpg"&gt;&lt;img height="176" width="209" src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/LogoSpeaker_5F00_en_5F00_US_5F00_IAB_5F00_180_5F00_150.jpg" border="0" style="border:0;float:left;margin:10px;" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Me encuentro en el CommunityDay 2011 de Fuengirola y desconecto un segundo de tanto networking, charlas y el hack-a-ton, para recordar que esta semana tendremos el evento Barcelona Developers Conference &amp;#39;11. Tres intensos d&amp;iacute;as con 18 Master Sessions, 32 Sesiones, 2 Mesas redondas, 3 WorkShops entre otras cosas. Una oportunidad impresionante para coincidir todo tipo de profesionales del sector y ampliar nuestra red de contactos.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Ademas no desaprovechar la oportunidad para hacer un poco de autobombo y recordaros que el viernes 18 yo mismo dar&amp;eacute; una sesi&amp;oacute;n sobre MVC, JQuery y HTML5.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Para m&amp;aacute;s informaci&amp;oacute;n pod&amp;eacute;is consultar la agenda en &lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&lt;a target="_blank" href="http://bcndevcon.org/en/content/scheduling" title="Agenda"&gt;http://bcndevcon.org/en/content/scheduling&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Espero que pod&amp;aacute;is venir al evento.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Cross-posting: &lt;a href="http://mrubino.net/"&gt;http://mrubino.net/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=201633" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/javascript/default.aspx">javascript</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/eventos/default.aspx">eventos</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/MVC/default.aspx">MVC</category></item><item><title>Cargar scripts bajo demanda con JQuery</title><link>http://geeks.ms/blogs/mrubino/archive/2011/10/05/cargar-scripts-bajo-demanda-con-jquery.aspx</link><pubDate>Wed, 05 Oct 2011 00:59:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:200996</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=200996</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/10/05/cargar-scripts-bajo-demanda-con-jquery.aspx#comments</comments><description>&lt;p&gt;Quien no se ha encontrado alguna vez que se va a&amp;ntilde;adiendo potencia y dinamismo a las p&amp;aacute;ginas web con diferentes librer&amp;iacute;as y al final tenemos una p&amp;aacute;gina que carga un mont&amp;oacute;n de ficheros que a veces no se utilizan porque el usuario no ha necesitado esa opci&amp;oacute;n en ese momento en concreto. Y con la aparici&amp;oacute;n hace tiempo de los MastersPages se ha aumentado esta pr&amp;aacute;ctica tanto si hablamos de webForms como con MVC. Pues gracias a JQuery podemos cargar las dependencias o ficheros .js que necesitemos solo cuando realmente se necesite esa funcionalidad de una forma din&amp;aacute;mica y no tener que descargar todo al cargar la p&amp;aacute;gina. Solo tendremos que utilizar &lt;strong&gt;getScript&lt;/strong&gt; para cargar un script remoto con una llamada as&amp;iacute;ncrona &amp;ldquo;AJAX&amp;rdquo; y adem&amp;aacute;s no tendremos problemas con cross-domain, porque utiliza &lt;strong&gt;JsonP&lt;/strong&gt; para cargar el script entre dominios. Pero que mejor que un ejemplo para que quede claro el concepto. &lt;/p&gt;
&lt;h4&gt;Ejemplo:&lt;/h4&gt;
&lt;p&gt;Imaginaros que tenemos una aplicaci&amp;oacute;n con una b&amp;uacute;squeda avanzada oculta que utiliza JQuery, un autocomplete y un watermark. &lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El bot&amp;oacute;n para mostrar el formulario.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/depend1.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/depend1.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Se muestra el contenido del formulario al hacer click en el bot&amp;oacute;n&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://mrubino.net/wp-content/uploads/2011/09/Depend2.jpg"&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/depend2.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/depend2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;El autocomplete est&amp;aacute; disponible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://mrubino.net/wp-content/uploads/2011/09/Depend3.jpg"&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/depend3.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/depend3.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;Lo normal ser&amp;iacute;a cargar todos los scripts que necesitamos al cargar la p&amp;aacute;gina.&lt;/p&gt;
&lt;p&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;Scripts/jquery-1.4.1.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt; &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;Scripts/jquery.watermark.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;Scripts/JScript.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;

&lt;pre&gt;&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;Pero ser&amp;iacute;a mucho m&amp;aacute;s optimo cargar las librer&amp;iacute;as del watermark y el autocomplete solo cuando se muestra el formulario de b&amp;uacute;squeda avanzada. &amp;iquest; NO ?&lt;/p&gt;
&lt;p&gt;Pues para cargar los script bajo demanda ser&amp;iacute;a:&lt;/p&gt;
&lt;p&gt;
$(&amp;#39;#btnBusqueda&amp;#39;).click(function () { $.getScript(&amp;quot;Scripts/jquery-autocomplete.js&amp;quot;, function (data, estado) { if (estado == &amp;#39;success&amp;#39;) { $(&amp;quot;#tags&amp;quot;).autocomplete({ source: availableTags }); } else{ alert(&amp;quot;Error al cargar la librer&amp;iacute;a autocomplete&amp;quot;); } }); $.getScript(&amp;quot;Scripts/jquery.watermark.min.js&amp;quot;, function (data, estado) { if (estado == &amp;#39;success&amp;#39;) { $(&amp;#39;#tags&amp;#39;).watermark(&amp;#39;Buscar...&amp;#39;); } else{ alert(&amp;quot;Error al cargar la librer&amp;iacute;a watermark&amp;quot;); } }); $(&amp;#39;.busquedaAvanzada&amp;#39;).show(); });

&lt;pre&gt;&lt;/pre&gt;
&lt;/p&gt;
&lt;p&gt;Como se puede comprobar solo se cargan las librer&amp;iacute;as si el usuario hace click en el bot&amp;oacute;n para ver el formulario de b&amp;uacute;squeda, entonces se carga el script y se utiliza una funci&amp;oacute;n an&amp;oacute;nima la cual&amp;nbsp;utiliza dos&amp;nbsp;par&amp;aacute;metors con el contenido del&amp;nbsp;script y el estado de la solicitud.&lt;/p&gt;
&lt;h4&gt;Posibles estados:&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;timeout&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;error&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;notmodified&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;success&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&amp;ldquo;parsererror&amp;rdquo;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Con este sencillo ejemplo podemos ver c&amp;oacute;mo podemos cargar scripts bajo demanda.&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200996" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/javascript/default.aspx">javascript</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/JQuery/default.aspx">JQuery</category></item><item><title>Instalar Windows 8 sin USB/DVD de inicio</title><link>http://geeks.ms/blogs/mrubino/archive/2011/09/19/instalar-windows-8-sin-usb-dvd-de-inicio.aspx</link><pubDate>Mon, 19 Sep 2011 20:43:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:200629</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>3</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=200629</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/09/19/instalar-windows-8-sin-usb-dvd-de-inicio.aspx#comments</comments><description>&lt;p&gt;Esta semana ha habido un gran revuelo con el BUILD y todo el mundo se ha vuelto loco intentando ser el primero en instalar windows 8 y poder probar la versi&amp;oacute;n Preview Development. &lt;/p&gt;
&lt;p&gt;Yo he tenido bastantes problemas para hacer la instalaci&amp;oacute;n desde un USB/DVD de arranque como explica Scott Hanselman en su &lt;a target="_blank" href="http://www.hanselman.com/blog/GuideToInstallingAndBootingWindows8DeveloperPreviewOffAVHDVirtualHardDisk.aspx" title="scott"&gt;blog&lt;/a&gt; sobre todo porque no quer&amp;iacute;a comprar un USB de 16 GB solo para poder probar win8. La &amp;uacute;nica opci&amp;oacute;n que me quedaba era instalar la ISO en una m&amp;aacute;quina virtual como VirtualBox, pero tener un disco virtual de arranque es mucho m&amp;aacute;s r&amp;aacute;pido y utilizas mejor los recursos del sistema, solo tienes que seleccionar el sistema operativo que quieres utilizar al encender el ordenador. &lt;/p&gt;
&lt;p&gt;Despu&amp;eacute;s de muchas pruebas mi compa&amp;ntilde;ero &lt;a target="_blank" href="http://twitter.com/#!/adiazcan" title="Alberto"&gt;Alberto Diaz&lt;/a&gt; me paso un link para poder hacer la instalaci&amp;oacute;n desde PowerShell que funciona de maravilla y sin necesidad de tener el famoso USB de 16 GB para realizar la instalaci&amp;oacute;n. &lt;/p&gt;
&lt;p&gt;Como esta soluci&amp;oacute;n me ha parecido muy interesante recompilar&amp;eacute; para la correcta instalaci&amp;oacute;n teniendo en cuenta que el origen de esta informaci&amp;oacute;n la he sacado de &lt;a target="_blank" href="http://sharpfellows.com/post/Fully-automated-VHD-install-of-Windows-8-Developer-Preview-using-PowerShell.aspx" title="SharpFellows"&gt;SharpFellows&lt;/a&gt; .&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Necesitamos la ISO de &lt;a target="_blank" href="http://msdn.microsoft.com/en-us/windows/apps/br229516" title="win8"&gt;Win8 Developer Preview&lt;/a&gt; para instalar.&lt;/li&gt;
&lt;li&gt;Utilizar una aplicaci&amp;oacute;n como &lt;a target="_blank" href="http://www.slysoft.com/en/download.html" title="clone"&gt;Virtual Clone Drive&lt;/a&gt; para utilizar directamente la ISO.&lt;/li&gt;
&lt;li&gt;Los Scripts de Instalaci&amp;oacute;n de &lt;strong&gt;&lt;a target="_blank" href="https://github.com/naeemkhedarun/CreateWindows8VHD/zipball/master" title="naem"&gt;naeemkhedarun&lt;/a&gt;&lt;/strong&gt; que est&amp;aacute; en GitHub.&lt;/li&gt;
&lt;li&gt;Utilizar los Scripts que tienen tres par&amp;aacute;metros ejecutar --&amp;gt;cmd --&amp;gt; PowerShell&lt;ol&gt;
&lt;li&gt;El path donde se crear&amp;aacute; el disco duro virtual &amp;quot;VHD&amp;quot;&lt;/li&gt;
&lt;li&gt;El tama&amp;ntilde;o de la imagen.&lt;/li&gt;
&lt;li&gt;La letra de la unidad del disco &amp;quot;Que no est&amp;eacute; en Uso&amp;quot;&lt;/li&gt;
&lt;/ol&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class="brush:js"&gt;// Donde tengais los ficheros
C:\projects\CreateWindows8VHD&amp;gt; Import-Module .\Create-Windows8VHD.ps1
C:\projects\CreateWindows8VHD&amp;gt; Create-Windows8VHD 
        &amp;quot;C:\vhd\windows8preview.vhd&amp;quot; &amp;quot;30000&amp;quot; &amp;quot;X&amp;quot;&amp;nbsp;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 5.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Finalmente poner el nuevo disco como unidad de arranque.&lt;/p&gt;
&lt;pre class="brush:js" style="padding-left:90px;"&gt;//En mi m&amp;aacute;quina e instalaci&amp;oacute;n
C:\Windows\System32\bcdboot.exe X:\Windows&lt;/pre&gt;
&lt;p&gt;Una cosa que te puede pasar la primera vez que utilizas PowerShell es que te da un error de permisos de ejecuci&amp;oacute;n de los scripts. Esto se soluciona con el mismo PowerShell. &lt;/p&gt;
&lt;pre class="brush:js"&gt;Set-ExecutionPolicy RemoteSigned&lt;/pre&gt;
&lt;p&gt;Todo listo ;-) &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p&gt;Cross-Posting: &lt;a href="http://mrubino.net"&gt;http://mrubino.net&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200629" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/Trucos/default.aspx">Trucos</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/Windows+8/default.aspx">Windows 8</category></item><item><title>[Tip] Intellisense entre ficheros .Js</title><link>http://geeks.ms/blogs/mrubino/archive/2011/09/12/tip-intellisense-entre-ficheros-js.aspx</link><pubDate>Mon, 12 Sep 2011 17:51:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:200448</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>4</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=200448</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/09/12/tip-intellisense-entre-ficheros-js.aspx#comments</comments><description>&lt;p&gt;Dedicado a mi colega &lt;a target="_blank" href="http://geeks.ms/blogs/pnunez/" title="Pablo Nu&amp;ntilde;ez"&gt;Pablo Nu&amp;ntilde;ez&lt;/a&gt; que &amp;uacute;ltimamente le veo muy desesperado con el uso de JavaScript. Pablo nunca pierdas la esperanza!!! Este truco es muy sencillo y nos sirve para poder tener la referencia de un fichero script desde otro fichero script y solo tenemos que insertar el path del fichero que queremos tener la referencia con tres barras estilo comentario. &lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://mrubino.net/wp-content/uploads/2011/09/intellisense.jpg"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/intellisense.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/intellisense.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Pero eso no es todo, tambi&amp;eacute;n podemos personalizar la informaci&amp;oacute;n que queremos mostrar como en el resto de nuestro c&amp;oacute;digo de la aplicaci&amp;oacute;n. &lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://mrubino.net/wp-content/uploads/2011/09/intellisense2.jpg"&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/intellisense2.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/intellisense2.jpg" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Espero que este truco sea de utilidad ;-) &amp;nbsp;&lt;/p&gt;
&lt;p&gt;Cross-Posting: &lt;a href="http://mrubino.net/"&gt;http://mrubino.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=200448" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/javascript/default.aspx">javascript</category></item><item><title>CSS.3 – HTML.5 &amp; Modernizr</title><link>http://geeks.ms/blogs/mrubino/archive/2011/07/26/css-3-html-5-amp-modernizr.aspx</link><pubDate>Tue, 26 Jul 2011 07:19:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:198301</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=198301</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/07/26/css-3-html-5-amp-modernizr.aspx#comments</comments><description>&lt;p&gt;A estas alturas nadie puede negar que Microsoft est&amp;aacute; haciendo una apuesta en firme para dar soporte a los est&amp;aacute;ndares web y un buen ejemplo de esto es en los nuevos proyectos web MVC 3 tenemos la posibilidad de crear aplicaciones con HTML 5 y CSS 3. Pero una cosa que puede que haya pasado m&amp;aacute;s desapercibido es la librer&amp;iacute;a script Modernizr que viene incluido con los ficheros scripts del proyecto. La versi&amp;oacute;n que viene incluida es la 1.7 pero actualmente ya tenemos disponible la versi&amp;oacute;n 2.0.4. &lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://mrubino.net/wp-content/uploads/2011/06/Moder.png"&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/Moder.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/Moder.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4 style="text-align:justify;"&gt;&amp;iquest;Qu&amp;eacute; es Modernizr?&lt;/h4&gt;
&lt;p style="text-align:justify;"&gt;Modernizr es una librer&amp;iacute;a javascript open-source que nos permite detectar que caracter&amp;iacute;sticas de HTML5 o CSS3 que son soportadas por el navegador. De esta manera podemos crear paginas con las &amp;uacute;ltimas funcionalidades que nos brindan estos nuevos est&amp;aacute;ndares sin preocuparnos si el navegador lo soporta o no, porque esta librer&amp;iacute;a nos avisar&amp;aacute; y nos brindar&amp;aacute; la posibilidad de utilizar otras librer&amp;iacute;as para simular esta funcionalidad.&lt;!--more--&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Modernizr ofrece la posibilidad de controlar m&amp;aacute;s exhaustivamente la experiencia de usuario atraves de la detecci&amp;oacute;n de funcionalidades a trav&amp;eacute;s de JavaScript.&lt;/p&gt;
&lt;h4&gt;Nuestro primer proyecto con HTML5 CSS3 y Modernizr&lt;/h4&gt;
&lt;p&gt;Para empezar a utilizar esta librer&amp;iacute;a y dotar a nuestra aplicaci&amp;oacute;n de las &amp;uacute;ltimas caracteristicas de Html5 y CSS3 lo primero que tenemos que hacer es crear un nuevo proyecto web y especificar que queremos utilizar la compatiblidad con HTMl5. &lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://mrubino.net/wp-content/uploads/2011/06/Modernizr1.jpg"&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/Modernizr1.jpg"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/Modernizr1.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Una vez que ya tenemos el proyecto creado ya podemos empezar a utilizar la librer&amp;iacute;a, porque MVC3 ya te incluye las referencias necesarias para poder trabajar desde el principio, si miramos la p&amp;aacute;gina maestra, veremos las referencias a las librer&amp;iacute;as script y seleccionamos el esquema correcto para la validaci&amp;oacute;n del c&amp;oacute;digo html5 del documento. &amp;quot;Se recomienda poner nuestras referencias de los estilos despues de la de modernizr por motivos de rendimiento&amp;quot; Lo siguiente que tenemos que hacer es a&amp;ntilde;adir la clase no-js &lt;/p&gt;
&lt;pre class="brush:xml"&gt;&amp;lt;html class=&amp;quot;no-js&amp;quot;&amp;gt;&lt;/pre&gt;
&lt;p style="text-align:justify;"&gt;Modernizr remplazar&amp;aacute; esta clase con js y de esta manera podremos saber si javascript est&amp;aacute; habilitado en el navegador, ademas de las caracter&amp;iacute;sticas que seon soportadas y no soportadas con el prefijo no- . Una vez ejecutada la p&amp;aacute;gina la clase del elemento html quedar&amp;iacute;a de esta manera con un IE9.&lt;/p&gt;
&lt;pre class="brush:xml"&gt;&amp;lt;html class=&amp;quot;js no-flexbox canvas canvastext no-webgl no-touch
   geolocation postmessage no-websqldatabase no-indexeddb
   hashchange no-history draganddrop no-websockets rgba hsla
   multiplebgs backgroundsize no-borderimage borderradius
   boxshadow no-textshadow opacity no-cssanimations no-csscolumns
   no-cssgradients no-cssreflections csstransforms no-csstransforms3d
   no-csstransitions fontface video audio localstorage sessionstorage
   no-webworkers no-applicationcache svg inlinesvg smil svgclippaths &amp;quot;&amp;gt;&lt;/pre&gt;
&lt;p style="text-align:justify;"&gt;Como podemos observar en IE9 a d&amp;iacute;a de hoy no soporta flexbox, webgl, touch, websqldatabase, indexddb, history, websockets, borderimage, textshadow, cssanimations, csscolumns, cssgradients, cssreflections, csstransforms3d, csstransactions, webworkers y applicationcache.&lt;/p&gt;
&lt;h4 style="text-align:justify;"&gt;&amp;iquest; Que podemos hacer con esta informaci&amp;oacute;n ?&lt;/h4&gt;
&lt;p style="text-align:justify;"&gt;Por ejemplo si decidimos utilizar border-image de css3 y sabemos que en IE9 por el momento no es compatible, podemos utilizar una clase de estilos alternativa para mostrar un efecto sustitutorio, en este caso un borde con sombra.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;En la p&amp;aacute;gina tendremos un contenedor con la class testBorderimg&lt;/p&gt;
&lt;pre class="brush:xml"&gt;&amp;lt;div id=&amp;quot;cuadro&amp;quot; class=&amp;quot;testBorderimg&amp;quot;&amp;gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Proin pretium pulvinar sodales. Vestibulum sem libero, congue pulvinar scelerisque eu, laoreet convallis tellus.
Fusce gravida lacinia dapibus. Pellentesque eget purus vitae elit iaculis accumsan in vel odio. In lorem ligula,
molestie at iaculis at, ultricies sit amet felis. &amp;lt;/div&amp;gt;&lt;/pre&gt;
&lt;p style="text-align:justify;"&gt;Y en nuestra hoja de estilos tendremos la clase testBorderimg con el estilo border-image y modernizr la sustituir&amp;aacute; por no-borderimage en los navegadores que no sea compatible esta opci&amp;oacute;n.&lt;/p&gt;
&lt;pre class="brush:css"&gt;.testBorderimg
{
    -webkit-border-image: url(border.png) 27 27 27 27 round round;
    -moz-border-image : url(border.png) 27 27 27 27 round round;
    width: 350px;
    padding: 5px;
    border-width: 15px;
}
.no-borderimage #cuadro
{
    width: 350px;
    padding: 5px 5px 5px 5px;
    border: thin solid;
    box-shadow: 0.2em 0.2em #CCC
}&lt;/pre&gt;
&lt;p style="text-align:justify;"&gt;La imagen que utilizo para el borde es:&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a href="http://mrubino.net/wp-content/uploads/2011/06/border.png"&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/border.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/border.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;En IE9 que no soporta border-image se ver&amp;iacute;a de esta manera:&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&lt;a href="http://mrubino.net/wp-content/uploads/2011/06/borderImg2.png"&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/borderImg2.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/borderImg2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;En Firefox 5.0 se ver&amp;iacute;a:&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&lt;a href="http://mrubino.net/wp-content/uploads/2011/06/borderImg.png"&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/borderImg.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/borderImg.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;De la misma manera podemos detectar que caracter&amp;iacute;sticas de HTML5 que soporta el navegador:&lt;/p&gt;
&lt;pre class="brush:js"&gt;    if (Modernizr.localstorage) {
        alert(&amp;quot;window.localStorage is available!&amp;quot;);
    } else {
        alet(&amp;quot;no native support for local storage&amp;quot; );
    }&lt;/pre&gt;
&lt;p style="text-align:justify;"&gt;Pero eso no se queda ah&amp;iacute;, como la librer&amp;iacute;a no puede abarcar todas las posibles pruebas de nuestra web, te permite extender de una forma facil utilizando su propia API.&lt;/p&gt;
&lt;h3&gt;addTest() Plugin API&lt;/h3&gt;
&lt;dl&gt;&lt;dt&gt;JavaScript method:&lt;/dt&gt;&lt;dd&gt;&lt;code&gt;Modernizr.&lt;strong&gt;addTest(str, fn)&lt;/strong&gt;&lt;/code&gt;&lt;/dd&gt;&lt;dd&gt;&lt;code&gt;Modernizr.&lt;strong&gt;addTest(str, bool)&lt;/strong&gt;&lt;/code&gt;&lt;/dd&gt;&lt;dd&gt;&lt;code&gt;Modernizr.&lt;strong&gt;addTest({str: fn, str2: fn2})&lt;/strong&gt;&lt;/code&gt;&lt;/dd&gt;&lt;dd&gt;&lt;code&gt;Modernizr.&lt;strong&gt;addTest({str: bool, str2: fn})&lt;/strong&gt;&lt;/code&gt;&lt;/dd&gt;&lt;/dl&gt;
&lt;p style="text-align:justify;"&gt;Si te interesa esta librer&amp;iacute;a y creo que si eres desarrollador web te tiene que interesar puedes obtener m&amp;aacute;s informaci&amp;oacute;n en su p&amp;aacute;gima web.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&lt;a href="http://www.modernizr.com/docs"&gt;http://www.modernizr.com/docs&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&amp;nbsp;Cross-Posting: &lt;a href="http://mrubino.net"&gt;http://mrubino.net&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=198301" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/javascript/default.aspx">javascript</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/html/default.aspx">html</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/css/default.aspx">css</category></item><item><title>Evento inaugural de catdotNet !!!</title><link>http://geeks.ms/blogs/mrubino/archive/2011/06/27/evento-inaugural-de-catdotnet.aspx</link><pubDate>Mon, 27 Jun 2011 10:16:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:196677</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>2</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=196677</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/06/27/evento-inaugural-de-catdotnet.aspx#comments</comments><description>&lt;h4&gt;S&amp;aacute;bado 2 de julio jornada inaugural de catdotNet&lt;/h4&gt;
&lt;p&gt;Este pr&amp;oacute;ximo s&amp;aacute;bado en la ciudad condal, en el Cybern&amp;agrave;rium de Barcelona Activa, diversos grupos de usuarios .NET catalanes inician juntos un nuevo proyecto destinado a ayudarnos en el dif&amp;iacute;cil proceso de mejorar como profesionales. No dejes escapar esta fecha tan destacada i aprovecha para conocer de primera mano todo lo que te propone el nuevo catdotNet, a la vez que tienes la oportunidad de aprender de profesionales con gran experiencia sobre tecnolog&amp;iacute;as .NET Reg&amp;iacute;strate ahora mismo &lt;strong&gt;&lt;a href="https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032489264&amp;amp;Culture=es-ES"&gt;aqu&amp;iacute; &lt;/a&gt;&lt;/strong&gt;per poder disfrutar de una ma&amp;ntilde;ana intensa con una agenda en este primer encuentro realmente de lujo: &lt;/p&gt;
&lt;h4&gt;Gesti&amp;oacute;n de dependencias con NuGet&lt;/h4&gt;
&lt;p&gt;NuGet es un proyecto Open Source el cual facilita la gesti&amp;oacute;n de dependencias de proyectos con librer&amp;iacute;as de terceros. Aprende como crear tus propios paquetes y repositorios de librer&amp;iacute;as para desarrollos internos y todas las posibilidades de gesti&amp;oacute;n de dependencias de terceros para proyectos. Con Jos&amp;eacute; Miguel Torres, co-fundador de CatDotNet, R&amp;amp;D+i Manger en MRW y MVP en movilidad. &lt;/p&gt;
&lt;h4&gt;ASP.NET MVC 3 en la pr&amp;aacute;ctica&lt;/h4&gt;
&lt;p&gt;Sesi&amp;oacute;n eminentemente pr&amp;aacute;ctica en la que veremos las caracter&amp;iacute;sticas m&amp;aacute;s importantes de ASP.NET MVC 3 como el motor de vistas Razor, el soporte para aplicar dependency injection, validaciones remotas, etc.&lt;/p&gt;
&lt;!--more--&gt;
&lt;p&gt; Tambi&amp;eacute;n veremos las &amp;uacute;ltimas novedades acabadas de salir del horno como el soporte para HTML5 y la generaci&amp;oacute;n autom&amp;aacute;tica de vistas y controladores mediante Data Scaffolding. Con Mar&amp;ccedil;al Serrate, Senior Architect en pasiona Consulting &lt;/p&gt;
&lt;h4&gt;Mejoras en la productividad con Entity Framework 4.1&lt;/h4&gt;
&lt;p&gt;El pasado abril, el equipo de ADO.NET liber&amp;oacute; la versi&amp;oacute;n final de Entity Framework 4.1 en la que se inclu&amp;iacute;an dos nuevas caracter&amp;iacute;sticas enfocadas a la mejora de la productividad: Code First y API DbContext. Estas mejoras proporcionan una API m&amp;aacute;s limpia y m&amp;aacute;s simple centrada en los escenarios m&amp;aacute;s comunes, pero que tambi&amp;eacute;n podemos utilizar en escenarios donde se requiera una funcionalidad m&amp;aacute;s avanzada. En esta sesi&amp;oacute;n ofreceremos una visi&amp;oacute;n general de los dos enfoques de desarrollo ya conocidos: DataBase First y Model First, e introduciremos el nuevo patr&amp;oacute;n de desarrollo &amp;quot;CodeFirst&amp;quot;, que nos permite definir nuestro modelo utilizando clases .NET, y utilizar estas clases para asignarlas a una base de datos existente o generar un nuevo esquema. Veremos tambi&amp;eacute;n c&amp;oacute;mo podemos utilizar este modelo con la nueva API simplificada as&amp;iacute; como otras t&amp;eacute;cnicas destinadas a reducir el tiempo de desarrollo utilizando Entity Framework. Con &amp;Aacute;lex Casquete, Coordinador en el DotNetClub de la UOC y Architect en pasiona Consulting. &lt;/p&gt;
&lt;h4&gt;JavaScript i Ajax para programadores ASP.NET&lt;/h4&gt;
&lt;p&gt;Las aplicaciones web modernas no ser&amp;iacute;an posibles sin JavaScript, descubre de qu&amp;eacute; manera podemos utilizar JavaScript, JQuery y Ajax de una manera &amp;oacute;ptima en nuestras aplicaciones web ASP.NET y ASP.NET MVC. En esta charla lo que veremos es como de una forma totalmente pr&amp;aacute;ctica y con Visual Studio 2010, como se integran perfectamente JQuery y las llamadas as&amp;iacute;ncronas Ajax con nuestras aplicaciones ASP.NET y qu&amp;eacute; buenas pr&amp;aacute;cticas tenemos que seguir para que nuestra web sea lo m&amp;aacute;s &amp;oacute;ptima posible y c&amp;oacute;mo podemos depurar los scripts para solucionar posibles problemas. &amp;iexcl;C&amp;oacute;digo, C&amp;oacute;digo, C&amp;oacute;digo! Con Marc Rubi&amp;ntilde;o, fundador de LoNetCamp, Consultant en Renacimiento y MVP en ASP.NET &lt;/p&gt;
&lt;h4&gt;&amp;iexcl;Te esperamos!&lt;/h4&gt;
&lt;p&gt;Sabemos que son fechas de playa, pese a todo, hemos hecho el esfuerzo de preparar una buena selecci&amp;oacute;n de temas, y nos gustar&amp;iacute;a tener la oportunidad de explicarte de primera mano que nos depara la vuelta de vacaciones. Tu asistencia es importante; catdotNet es un proyecto creado por la comunidad, para la comunidad, &amp;iquest;quieres formar parte? &amp;iexcl;Te esperamos! (Para m&amp;aacute;s informaci&amp;oacute;n puedes visitar nuestra web en &lt;a href="http://catdotnet.net"&gt;http://catdotnet.net&lt;/a&gt; )&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=196677" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/eventos/default.aspx">eventos</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/CatDotNet/default.aspx">CatDotNet</category></item></channel></rss>

