<?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>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>0</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><item><title>CodeBars con ASP.NET MVC</title><link>http://geeks.ms/blogs/mrubino/archive/2011/06/22/codebars-con-asp-net-mvc.aspx</link><pubDate>Wed, 22 Jun 2011 20:31:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:196489</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=196489</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/06/22/codebars-con-asp-net-mvc.aspx#comments</comments><description>&lt;p style="text-align:justify;"&gt;Hace tiempo que quiero pasar todos los art&amp;iacute;culos que tengo en &lt;a href="http://geeks.ms/blogs/mrubino"&gt;geeks.ms&lt;/a&gt; a mi`p&amp;aacute;gina personal &lt;a href="http://mrubino.net"&gt;http://mrubino.net&lt;/a&gt; , pero pasar tantos articulos de varios a&amp;ntilde;os no es nada f&amp;aacute;cil y por m&amp;aacute;s inri tengo el problema que he perdido la mayor&amp;iacute;a del material que se encontraba en el anterior server.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Por eso he decidido ir pasando los art&amp;iacute;culos m&amp;aacute;s vistos y si puedo rehacer los ejemplos para que est&amp;eacute;n disponibles desde mi nuevo site.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Para empezar he recuperado uno de los art&amp;iacute;culos m&amp;aacute;s vistos que es como crear una imagen din&amp;aacute;micamente con un Handler para ASP.NET Web forms y mostrar un c&amp;oacute;digo de barras con la informaci&amp;oacute;n que pasa el usuario como par&amp;aacute;metros.&lt;/p&gt;
&lt;p style="text-align:left;"&gt;Estos art&amp;iacute;culos los puedes repasar en Geeks: &lt;a href="http://geeks.ms/blogs/mrubino/archive/2008/12/04/asp-net-codebars.aspx"&gt;http://geeks.ms/blogs/mrubino/archive/2008/12/04/asp-net-codebars.aspx&lt;/a&gt; y en mi site &lt;a href="http://mrubino.net/2008/12/asp-net-codebars"&gt;http://mrubino.net/2008/12/asp-net-codebars&lt;/a&gt; .&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Pero estos ejemplos no sirven para la gente que utiliza ASP.NET MVC porque ya no es necesario los Handlers para tratar las imagen y en su defecto podemos crear un controlador que devuelva directamente la imagen din&amp;aacute;mica.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Pero mejor hacer un nuevo ejemplo para ver m&amp;aacute;s claro como funcionar&amp;iacute;a un controlador que nos devuelva la imagen din&amp;aacute;mica.&lt;!--more--&gt;&lt;/p&gt;
&lt;div style="text-align:justify;"&gt;&lt;a href="http://mrubino.net/wp-content/uploads/2011/06/CodeBarMVC.png"&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p style="text-align:justify;"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/CodeBarMVC.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/CodeBarMVC.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Como en MVC separamos las responsabilidades pues solo necesitamos:&lt;/p&gt;
&lt;h4 style="text-align:justify;"&gt;Vista:&lt;/h4&gt;
&lt;div style="text-align:justify;padding-left:30px;"&gt;Solo necesitamos una p&amp;aacute;gina con una lista para seleccionar la fuente para el c&amp;oacute;digo de barras, un textBox para que el usuario pueda introducir el texto para generar en c&amp;oacute;digo y finalmente una imagen para mostrar el resultado.&lt;/div&gt;
&lt;div style="text-align:justify;padding-left:30px;"&gt;Con Razor quedar&amp;iacute;a de esta manera:&lt;/div&gt;
&lt;p style="padding-left:30px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush:xml"&gt;@model CodeBar_MVC.Models.Fuente                

@Html.DropDownListFor(Model =&amp;gt; Model.Id,
        new SelectList(ViewBag.Fuentes, &amp;quot;Id&amp;quot;, &amp;quot;Nombre&amp;quot;),
        new { id = &amp;quot;ddlFuentes&amp;quot; })
@Html.TextBox(&amp;quot;txtFuentes&amp;quot;)

&amp;lt;input type=&amp;quot;button&amp;quot; id=&amp;quot;btnImagen&amp;quot; value=&amp;quot;clik&amp;quot; /&amp;gt;
&amp;lt;img id=&amp;quot;imgCodeBar&amp;quot;  alt=&amp;quot;codeBar&amp;quot; /&amp;gt;&lt;/pre&gt;
&lt;div style="text-align:justify;padding-left:30px;"&gt;El DropDownList se alimenta de una lista devuelta por el controlador &amp;quot;Fuentes&amp;quot; y con el esquema definido en el modelo Fuente.&lt;/div&gt;
&lt;h4&gt;Controlador:&lt;/h4&gt;
&lt;div style="text-align:justify;padding-left:30px;"&gt;Tendremos dos acciones, la principal que cargar&amp;aacute; la lista con las fuentes y la que sustituir&amp;aacute; al anterior Handler y devolver&amp;aacute; un array de bytes con File, intent&amp;eacute; utilizar la funci&amp;oacute;n FileStreamResult pero al generar la imagen en memoria y devolver el Stream me retornaba el error. &lt;span style="color:#ffcc00;"&gt;&amp;quot;cannot access a closed stream&amp;quot;&lt;/span&gt;.&lt;/div&gt;
&lt;h4 style="text-align:justify;padding-left:60px;"&gt;1. Carga de la lista de fuentes:&lt;/h4&gt;
&lt;div style="text-align:justify;padding-left:30px;"&gt;
&lt;pre class="brush:csharp"&gt;public ActionResult Index()
{
   ViewBag.Fuentes = CodeBarService.GetDatos();
   return View();
}&lt;/pre&gt;
&lt;/div&gt;
&lt;h4 style="text-align:justify;padding-left:60px;"&gt;2. Carga la Imagen din&amp;aacute;mica con el c&amp;oacute;digo de Barras:&lt;/h4&gt;
&lt;div style="text-align:justify;padding-left:30px;"&gt;
&lt;pre class="brush:csharp"&gt;public ActionResult GetCodeBar(string code , string format,
            int width, int height, int size)
{
   return File(CodeBarService.GenerarCodigo(code, format,
                width, height, size), &amp;quot;image/jpg&amp;quot;);
}&lt;/pre&gt;
&lt;/div&gt;
&lt;h4&gt;Modelo:&lt;/h4&gt;
&lt;div style="padding-left:30px;"&gt;El modelo es muy sencillito y solo tenemos la entidad Fuente.&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;
&lt;pre class="brush:csharp"&gt;public class Fuente
{
   [Key]
   public string Id { get; set; }
   public string Nombre { get; set; }
   public string Fichero { get; set; }
}&lt;/pre&gt;
&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;No entrar&amp;eacute; en como utilizar el patr&amp;oacute;n MVC, porque eso no es garantiza de que siempre se realicen las cosas correctamente y yo para este ejemplo he creado un servicio en el modelo que contiene toda la l&amp;oacute;gica&lt;/div&gt;
&lt;div style="padding-left:30px;"&gt;CodeBarService:&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;span style="color:#cc6633;"&gt;&lt;strong&gt;GetDatos():&lt;/strong&gt;&lt;/span&gt; La funci&amp;oacute;n que se utiliza el controlador para cargar la lista con las fuentes existentes.&lt;/li&gt;
&lt;li&gt;&lt;span style="color:#cc6633;"&gt;&lt;strong&gt;CargarFuente(string fuente, int size): &lt;/strong&gt;&lt;/span&gt;Se encarga de buscar la fuente y cargarla para utilizar en la imagen.&lt;/li&gt;
&lt;li&gt;&lt;span style="color:#cc6633;"&gt;&lt;strong&gt;FormatBarCode(string code): &lt;/strong&gt;&lt;/span&gt;Las fuente CodeBars necesitan un c&amp;oacute;digo de escape para identificar cuando empieza y termina el c&amp;oacute;digo que el lector tiene que leer. Estas fuentes utilizan * como c&amp;oacute;digo de escape, pero cada fuente tiene su propia especificaci&amp;oacute;n.&lt;/li&gt;
&lt;li&gt;&lt;span style="color:#cc6633;"&gt;&lt;strong&gt;GenerarCodigo(string code, string format, int width, int height, int size): &lt;/strong&gt;&lt;/span&gt;donde se crea la imagen en memoria y se le a&amp;ntilde;ade el texto con la fuente de c&amp;oacute;digo de barras y se retorna en formato de bytes[].&lt;/li&gt;
&lt;/ul&gt;
&lt;p style="padding-left:30px;"&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre class="brush:csharp"&gt; public static byte[] GenerarCodigo(string code, string format,
            int width, int height, int size)
{
   var resultado = new byte[]{};
   width = (width == 0) ? 200 : width;
   height = (width == 0) ? 60 : height;
   size = (width == 0) ? 60 : size;

   if (!string.IsNullOrEmpty(code))
   {
      using (var stream = new MemoryStream())
      {
         var bitmap = new Bitmap(width, height);
         var grafic = Graphics.FromImage(bitmap);
         var fuente = CargarFuente(format, size);
         var point = new Point();
         var brush = new SolidBrush(Color.Black);

         grafic.FillRectangle(new SolidBrush(Color.White), 0, 0, width, height);
         grafic.DrawString(FormatBarCode(code.ToUpper()), fuente, brush, point);
         bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
         stream.Seek(0, SeekOrigin.Begin);
         resultado =  stream.ToArray();
      }
   }

   return resultado;
}&lt;/pre&gt;
&lt;p&gt;Si recordamos en el controlador devolvemos un File Action y con eso tenemos bastante para cargar la im&amp;aacute;gen din&amp;aacute;micamente para eso nos ayudaremos con un poco de JavaScript con JQuery. &lt;/p&gt;
&lt;pre class="brush:js"&gt;$(document).ready(function () {

    var img = $(&amp;quot;#imgCodeBar&amp;quot;);
    if (img) img.hide();

    $(&amp;quot;#btnImagen&amp;quot;).click(cargarCodeBar);

    function cargarCodeBar() {
        var btn = $(&amp;quot;#btnImagen&amp;quot;);

        if (img) {
            var code = $(&amp;quot;#txtFuentes&amp;quot;);
            var fonts = $(&amp;quot;#ddlFuentes&amp;quot;);

            if (code &amp;amp;&amp;amp; fonts) {

                img[0].src = &amp;quot;/home/GetCodeBar?code=&amp;quot; +
                code.val() +
                &amp;quot;&amp;amp;format=&amp;quot; + fonts.val() +
                &amp;quot;&amp;amp;width=400&amp;amp;height=60&amp;amp;size=50&amp;quot;;
                img.show();
            }
        }
    }
});&lt;/pre&gt;
&lt;p&gt;Lo que hace este script es: &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Ocultar la imagen de inicio y enlazar el evento clic al bot&amp;oacute;n de una forma no intrusiva.&lt;/li&gt;
&lt;li&gt;La funci&amp;oacute;n cargarCodeBar : recupera la informaci&amp;oacute;n del documento, enlaza la imagen al controlador y la muestra actualizada.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Con esto ya lo tenemos todo. &lt;/p&gt;
&lt;table border="0"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="center" valign="middle"&gt;&lt;strong&gt;&lt;img height="48" width="42" src="http://mrubino.net/wp-content/uploads/2011/03/NonEmptyDocumentFolder.png" align="middle" alt="streaming" border="0" title="video" /&gt; &lt;strong&gt;&lt;a target="_blank" href="http://mrubino.net/wp-content/uploads/2011/06/CodeBarMVC.zip" title="Material"&gt;Material&lt;/a&gt; &lt;/strong&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td align="center" valign="middle"&gt;&lt;/td&gt;
&lt;td align="center" valign="middle"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp; &amp;nbsp;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=196489" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/JQuery/default.aspx">JQuery</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/MVC/default.aspx">MVC</category></item><item><title>VS2010 - Soporte HTML5, CSS3</title><link>http://geeks.ms/blogs/mrubino/archive/2011/06/17/vs2010-soporte-html5-css3.aspx</link><pubDate>Fri, 17 Jun 2011 09:44:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:196222</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=196222</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/06/17/vs2010-soporte-html5-css3.aspx#comments</comments><description>&lt;p&gt;Pues eso que Visual Studio no se quiere quedar atras en esta fren&amp;eacute;tica carrera por los nuevos estandares y ya tenemos disponible para descargar la primera revisi&amp;oacute;n de los estandares web para Visual Studio 2010 y Visual Studio Expres 2010 SP1 .&lt;/p&gt;
&lt;p&gt;En esta primera versi&amp;oacute;n de la actualizaci&amp;oacute;n, el equipo de VS se ha centrado en actualizar el soporte a HTML5 , agregar soporte a CSS 3 y a&amp;ntilde;adir nuevas API para el intellisense de JavaScript. El plan es hacer una versi&amp;oacute;n cada 3 meses para mantener Visual Studio actualizado con los cambios realizados por el W3C.&lt;/p&gt;
&lt;p&gt;M&amp;aacute;s informaci&amp;oacute;n en el blog de &lt;a target="_blank" href="http://www.hanselman.com/blog/AnnouncingTheWebStandardsUpdateHTML5SupportForTheVisualStudio2010Editor.aspx" title="scott"&gt;Scott Hanselman &lt;/a&gt;o desde el blog de VS y la actualizaci&amp;oacute;n desde &lt;a target="_blank" href="http://visualstudiogallery.msdn.microsoft.com/a15c3ce9-f58f-42b7-8668-53f6cdc2cd83" title="msdnVS"&gt;MSDN&lt;/a&gt; .&lt;/p&gt;
&lt;p style="text-align:center;"&gt;&lt;a target="_blank" href="http://visualstudiogallery.msdn.microsoft.com/a15c3ce9-f58f-42b7-8668-53f6cdc2cd83" title="actualizacion"&gt;&lt;/a&gt;&lt;a target="_blank" href="http://visualstudiogallery.msdn.microsoft.com/a15c3ce9-f58f-42b7-8668-53f6cdc2cd83" title="d"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/image_5F00_axd.png" border="0" 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=196222" 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/Visual+Studio/default.aspx">Visual Studio</category></item><item><title>Material [Webcast] La web desde cero II – JQuery</title><link>http://geeks.ms/blogs/mrubino/archive/2011/06/12/material-webcast-la-web-desde-cero-ii-jquery.aspx</link><pubDate>Sun, 12 Jun 2011 16:26:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:195976</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=195976</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/06/12/material-webcast-la-web-desde-cero-ii-jquery.aspx#comments</comments><description>&lt;p&gt;Ya ten&amp;eacute;is disponible el webcast y todo el mater&amp;iacute;a que utilic&amp;eacute; en la sesi&amp;oacute;n sobre JQuery, para todo aquel que no pudo asistir en directo lo puede ver ahora gravado y descargar el proyecto para probar las demos.&lt;/p&gt;
&lt;p&gt;&lt;img height="280" width="368" src="http://mrubino.net/wp-content/uploads/2011/06/90330eac-2cbe-46a1-ae37-0c1a6e03b8931.jpg" title="webcast" class="size-full wp-image-452 alignleft" style="margin:5px;border-width:0px;" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;Os lo pod&amp;eacute;is descargar desde :&lt;/p&gt;
&lt;table border="0" class="alignleft"&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td align="center" valign="middle"&gt;&lt;strong&gt;&lt;img height="48" width="42" src="http://mrubino.net/wp-content/uploads/2011/03/NonEmptyDocumentFolder.png" align="middle" alt="streaming" border="0" title="video" /&gt; &lt;strong&gt;&lt;a target="_blank" href="http://mrubino.net/wp-content/uploads/2011/06/DemoJQquery.zip" title="Material"&gt;Material&lt;/a&gt; &lt;/strong&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td align="center" valign="middle"&gt;&lt;img height="48" width="42" src="http://mrubino.net/wp-content/uploads/2011/03/video.jpg" align="middle" alt="streaming" border="0" title="video" /&gt; &lt;strong&gt;&lt;a target="_blank" href="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=es-AR&amp;amp;EventID=1032486645&amp;amp;CountryCode=AR" title="WebCast"&gt;WebCast&lt;/a&gt; &lt;/strong&gt;&lt;/td&gt;
&lt;td align="center" valign="middle"&gt;&lt;img height="55" width="55" src="http://mrubino.net/wp-content/uploads/2011/06/imagesCAK20QE0-150x150.png" align="middle" alt="streaming" border="0" title="video" style="border-width:0px;" /&gt; &lt;strong&gt;&lt;a target="_blank" href="http://mrubino.net/wp-content/uploads/2011/06/La-Web-desde-cero-II.pdf" title="PPT"&gt;PPT &lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&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;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=195976" 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/JQuery/default.aspx">JQuery</category></item><item><title>Material [Webcast] La web desde cero I - JavaScript</title><link>http://geeks.ms/blogs/mrubino/archive/2011/05/23/material-webcast-la-web-desde-cero-i-javascript.aspx</link><pubDate>Mon, 23 May 2011 14:58:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:194809</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>1</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=194809</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/05/23/material-webcast-la-web-desde-cero-i-javascript.aspx#comments</comments><description>&lt;a href="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=es-AR&amp;amp;EventID=1032486642&amp;amp;CountryCode=AR" target="_blank"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px 15px 0px 0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top:0px;border-right:0px;padding-top:0px;" title="8c6e7655-3d3e-4cad-8fdd-1e4dfcc785f2" border="0" alt="8c6e7655-3d3e-4cad-8fdd-1e4dfcc785f2" align="left" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/8c6e7655_2D00_3d3e_2D00_4cad_2D00_8fdd_2D00_1e4dfcc785f2_5F00_6DB59BA6.jpg" width="244" height="182" /&gt;&lt;/a&gt;    &lt;p align="justify"&gt;&amp;#160;&lt;/p&gt;  &lt;p align="justify"&gt;Ya tenéis disponible el webcast que hicimos con la gente de &lt;a href="http://secondnug.com"&gt;http://secondnug.com&lt;/a&gt; para dar soporte a temas que normalmente suelen estar en todos los foros de programación web.&lt;/p&gt;  &lt;p align="justify"&gt;En esta ocasión hemos empezado con lo más básico, pero imprescindible a la hora de hacer páginas web interactivas &amp;quot;JavaScript&amp;quot;.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;WebCast:&lt;/strong&gt; &lt;a href="https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=es-AR&amp;amp;EventID=1032486642&amp;amp;CountryCode=AR"&gt;https://msevents.microsoft.com/CUI/WebCastEventDetails.aspx?culture=es-AR&amp;amp;EventID=1032486642&amp;amp;CountryCode=AR&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;Espero veros en la próxima que ampliaremos el tema atacando de cara a JQuery y AJAX.&lt;/p&gt;  &lt;p align="justify"&gt;CrossPosting: &lt;a href="http://mrubino.net"&gt;http://mrubino.net&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=194809" width="1" height="1"&gt;</description><enclosure url="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.19.48.09/La-Web-desde-cero-_2800_I_2900_.rar" length="264158" type="application/octet-stream" /><category domain="http://geeks.ms/blogs/mrubino/archive/tags/eventos/default.aspx">eventos</category></item><item><title>Pluralize Visual Studio 2010</title><link>http://geeks.ms/blogs/mrubino/archive/2011/05/12/pluralize-visual-studio-2010.aspx</link><pubDate>Thu, 12 May 2011 21:22:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:194128</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>0</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=194128</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/05/12/pluralize-visual-studio-2010.aspx#comments</comments><description>&lt;p&gt;Una cosa buena de las que tiene EF 4 es la posibilidad de elegir pluralizar o no las entidades a la hora de materializar las entidades.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/ThePluralizeorSingula_5F00_29EA81CF.jpg"&gt;&lt;img height="244" width="214" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/ThePluralizeorSingula_5F00_thumb_5F00_71CE255A.jpg" alt="ThePluralizeorSingula" border="0" title="ThePluralizeorSingula" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Generaci&amp;oacute;n de la entidad &lt;strong&gt;CON&lt;/strong&gt; Pluralize: &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/Pluralize2_5F00_6808BDE2.png"&gt;&lt;img height="178" width="409" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/Pluralize2_5F00_thumb_5F00_7334D8DD.png" alt="Pluralize2" border="0" title="Pluralize2" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:block;float:none;margin-left:auto;border-top:0px;margin-right:auto;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Generaci&amp;oacute;n de la entidad &lt;strong&gt;SIN&lt;/strong&gt; Pluralize: &lt;/li&gt;
&lt;/ul&gt;
&lt;p align="center"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/Pluralize1_5F00_07508618.png"&gt;&lt;img height="158" width="198" src="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/Pluralize1_5F00_thumb_5F00_2FEEF21F.png" alt="Pluralize1" border="0" title="Pluralize1" style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Cuando trabajas con Linq2Sql la tarea de definir si pluralizar o no tus entidades no es tan f&amp;aacute;cil y adem&amp;aacute;s tienes que buscar la configuraci&amp;oacute;n en las propiedades de Visual Studio.&lt;/p&gt;
&lt;p&gt;En el men&amp;uacute; de Visual Studio : Tools --&amp;gt; Options --&amp;gt; Data Base Tools --&amp;gt; O/R Designer --&amp;gt; &amp;quot;True&amp;quot;&lt;/p&gt;
&lt;p&gt;Esto en mi opini&amp;oacute;n es un error, porque depende de la configuraci&amp;oacute;n del IDE la generaci&amp;oacute;n de las entidades y si diferentes componentes de un equipo de desarrollo tiene diferentes configuraciones, puede causar m&amp;aacute;s de un dolor de cabeza y doy fe XD.&lt;/p&gt;
&lt;p&gt;Por eso cuidado al generar vuestras entidades y si puede ser que siempre lo haga la misma persona pare evitar incompatibilidades entre formatos.&lt;/p&gt;
&lt;p&gt;Cross-Posting: &lt;a href="http://mrubino.net/" title="http://mrubino.net/"&gt;http://mrubino.net/&lt;/a&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=194128" 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/Tip_2F00_Trick/default.aspx">Tip/Trick</category></item><item><title>Error en IIS BadImageFormatException </title><link>http://geeks.ms/blogs/mrubino/archive/2011/04/20/error-en-iis-badimageformatexception.aspx</link><pubDate>Wed, 20 Apr 2011 07:51:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:192661</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>6</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=192661</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/04/20/error-en-iis-badimageformatexception.aspx#comments</comments><description>&lt;p class="MsoNormal"&gt;&lt;span&gt;Subiendo una aplicaci&amp;oacute;n web al servidor me encontr&amp;eacute; con un error muy raro y que hasta el momento no me hab&amp;iacute;a pasado nunca. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span style="line-height:115%;font-size:14pt;"&gt;Error&lt;/span&gt;&lt;span style="font-size:small;"&gt; &lt;/span&gt;&lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="line-height:115%;color:red;font-size:14pt;"&gt;System.BadImageFormatException&lt;/span&gt;&lt;/b&gt;&lt;span style="color:red;"&gt;&lt;span style="font-size:small;"&gt; !!!&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;La p&amp;aacute;gina del error en el IIS es: &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/errorComp.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/errorComp.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;La aplicaci&amp;oacute;n hasta ese momento estaba funcionando y despu&amp;eacute;s de a&amp;ntilde;adirle un nuevo ensamblado &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;Masivos.Application.Interfaces dej&amp;oacute; de funcionar. Lo curioso es que en el servidor de desarrollo funcionaba perfectamente, pero en el servidor de Pre no hab&amp;iacute;a manera que funcionara.&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Lo primero que tenemos que saber es que la m&amp;aacute;quina de desarrollo estaba corriendo en un Windows7&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;32bits y el servidor de Pre en un Windows Server 2008 R2 64 bits.&lt;/span&gt;&lt;/p&gt;
&lt;h4 class="MsoNormal"&gt;&lt;span style="line-height:115%;font-size:14pt;"&gt;&lt;span&gt;La configuraci&amp;oacute;n de la soluci&amp;oacute;n&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Lo primero que hay que mirar es la configuraci&amp;oacute;n de la soluci&amp;oacute;n. &lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/errorComp2.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/errorComp2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;A simple vista se ve algo raro, justamente el proyecto que est&amp;aacute; fallando esta compilando siempre en x86 y eso no es lo correcto, la compilaci&amp;oacute;n tendr&amp;iacute;a que ser igual que el resto de proyectos de librer&amp;iacute;as para Any CPU. Lo peor de todo es que al intentar modificar esta configuraci&amp;oacute;n no aparece la opci&amp;oacute;n y solo permite compilar para x86.&lt;/span&gt;&lt;/p&gt;
&lt;h4 class="MsoNormal" style="text-align:justify;margin:0cm 0cm 10pt;"&gt;&lt;span style="line-height:115%;font-size:14pt;"&gt;El porqu&amp;eacute; de todo esto&lt;/span&gt;&lt;/h4&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;El error est&amp;aacute; bastante claro: Una&lt;/span&gt;&lt;span class="sentence"&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:9.5pt;"&gt; DLL o aplicaci&amp;oacute;n ejecutable se carga como un ensamblado de 64 bits, pero contiene caracter&amp;iacute;sticas o recursos de 32 bits.&lt;/span&gt;&lt;/span&gt;&lt;span style="line-height:115%;font-family:&amp;#39;Segoe UI&amp;#39;,&amp;#39;sans-serif&amp;#39;;color:black;font-size:9.5pt;"&gt; &lt;span class="sentence"&gt;&lt;span id="xn36_4fd5320ae54029f3a4deb5c95df99888"&gt;Por ejemplo, usa la interoperabilidad COM o llama a m&amp;eacute;todos en una biblioteca de v&amp;iacute;nculos din&amp;aacute;micos de 32 bits.&lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;a href="http://msdn.microsoft.com/es-es/library/system.badimageformatexception.aspx"&gt;http://msdn.microsoft.com/es-es/library/system.badimageformatexception.aspx&lt;/a&gt;. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Mis intentos para solucionar el problema pasaron por:&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpFirst"&gt;&lt;span&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span&gt;1.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;intentar obligar al pool de aplicaciones del IIS en que la soluci&amp;oacute;n corriera en x86. &lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="color:red;"&gt;FAIL !!&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="mso-bidi-font-family:Calibri;mso-bidi-theme-font:minor-latin;"&gt;&lt;span style="mso-list:Ignore;"&gt;&lt;span&gt;2.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;Intentar por todos los medios que el proyecto de Interfaces se compilara en Any CPU. &lt;b style="mso-bidi-font-weight:normal;"&gt;&lt;span style="color:red;"&gt;FAIL!!&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;h4 class="MsoListParagraphCxSpMiddle" style="text-align:justify;margin:0cm 0cm 0pt;mso-add-space:auto;"&gt;&lt;span style="line-height:115%;font-size:14pt;"&gt;La Soluci&amp;oacute;n&lt;/span&gt;&lt;/h4&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span style="font-family:Calibri;font-size:small;"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span&gt;Lo que me mosqueaba era porque motivo un proyecto de librer&amp;iacute;a no me dejaba poder establecer la compilaci&amp;oacute;n en Any CPU y la respuesta surgi&amp;oacute; cuando el que cre&amp;oacute; el proyecto comento que en principio seleccion&amp;oacute; la plantilla de consola y luego modifico el proyecto a librer&amp;iacute;as.&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;Argggg !!!!!&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpMiddle"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoListParagraphCxSpLast"&gt;&lt;span&gt;&lt;span&gt;&lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;Visual Studio cuando crea un proyecto de consola siempre lo configura como x86 y la &amp;uacute;nica manera de poder cambiar esto es modificando a mano la configuraci&amp;oacute;n del proyecto. Pues la soluci&amp;oacute;n r&amp;aacute;pida fue crear un nuevo proyecto directamente de librer&amp;iacute;a y copiar todos los ficheros al nuevo proyecto. &lt;span style="mso-spacerun:yes;"&gt;&amp;nbsp;&lt;/span&gt;Una vez todos los ensamblados compilados en 64bits el deploy funcion&amp;oacute; y todos felices.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&lt;span&gt;Experiencias del d&amp;iacute;a a d&amp;iacute;a de un desarrollador ;-)&lt;/span&gt;&lt;/p&gt;
&lt;p class="MsoNormal"&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=192661" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/IIS/default.aspx">IIS</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/errores/default.aspx">errores</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/Trucos/default.aspx">Trucos</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/Tip_2F00_Trick/default.aspx">Tip/Trick</category></item><item><title>¡Enhorabuena MVP de Microsoft 2011!</title><link>http://geeks.ms/blogs/mrubino/archive/2011/04/03/161-enhorabuena-mvp-de-microsoft-2011.aspx</link><pubDate>Sun, 03 Apr 2011 14:32:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:191590</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>10</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=191590</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/04/03/161-enhorabuena-mvp-de-microsoft-2011.aspx#comments</comments><description>&lt;p style="text-align:justify;"&gt;&lt;a href="http://mvp.support.microsoft.com/"&gt;&lt;img width="95" src="http://mrubino.net/wp-content/uploads/2011/04/microsoft_mvp_logosmall.png" alt="MVP" height="150" style="border-width:0px;border:0;margin-left:10px;margin-right:10px;margin-top:5px;margin-bottom:5px;float:left;" title="microsoft_mvp_logosmall" class="alignleft size-full wp-image-394" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;&lt;strong&gt;D&lt;/strong&gt;espues de tantos a&amp;ntilde;os participando en las comunidades intentando compartir mi granito de arena me ha llegado&amp;nbsp;el famoso email de Microsoft .&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Enhorabuena. Nos complace presentarle el programa de nombramiento MVP de Microsoft&amp;reg; de 2011. 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 a lo largo del pasado a&amp;ntilde;o.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Para m&amp;iacute; es un placer recibir este reconocimiento por parte de Microsoft y no hace m&amp;aacute;s que animarme a continuar con mi empe&amp;ntilde;o de poder compartir mis experiencias y aprender de tantas otras de mis pares.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;No se si es una promesa o una amenaza pero seguir&amp;eacute; intentando aportar todo lo que pueda como lo he estado haciendo todos estos a&amp;ntilde;os.&lt;/p&gt;
&lt;p style="text-align:justify;"&gt;Muchas gracias a todos los que me hab&amp;eacute;is apoyado durante todo este tiempo y a todos los MVP&amp;rsquo;s nuevos y a los que hab&amp;eacute;is renovado para este a&amp;ntilde;o.&lt;/p&gt;
&lt;h2 style="text-align:justify;"&gt;Gracias a Todos !!&lt;/h2&gt;
&lt;p style="text-align:justify;"&gt;&amp;nbsp;CrossPosting: &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;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://geeks.ms/aggbug.aspx?PostID=191590" 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/Personal/default.aspx">Personal</category></item><item><title>MongoDB con Norm</title><link>http://geeks.ms/blogs/mrubino/archive/2011/02/24/mongodb-con-norm.aspx</link><pubDate>Thu, 24 Feb 2011 08:33:00 GMT</pubDate><guid isPermaLink="false">2a2e7ade-7474-448b-9de5-1515d8bb7d1b:189493</guid><dc:creator>Marc Rubiño</dc:creator><slash:comments>7</slash:comments><wfw:commentRss>http://geeks.ms/blogs/mrubino/rsscomments.aspx?PostID=189493</wfw:commentRss><comments>http://geeks.ms/blogs/mrubino/archive/2011/02/24/mongodb-con-norm.aspx#comments</comments><description>&lt;p&gt;&amp;Uacute;ltimamente se ha puesto de moda las bases de datos NoSql y realmente es una buena alternativa si no necesitas una base de datos relacional y es mucho m&amp;aacute;s potente que utilizar por ejemplo un fichero XML.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;MongoDB es una base de datos documental no existe el concepto de tabla, solo contamos con colecciones de objetos en formato JSon y de c&amp;oacute;digo abierto. Una soluci&amp;oacute;n escalable y de alto rendimiento que nos permite trabajar con &amp;iacute;ndices, replicaci&amp;oacute;n y alta disponibilidad. MongoDB est&amp;aacute; realizado en C++ pero su cliente soporta m&amp;uacute;ltiples Drivers de lenguajes de programaci&amp;oacute;n, tanto por mongodb.org como por la comunidad de desarrolladores. Para .Net tiene &lt;a target="_blank" href="http://www.mongodb.org/display/DOCS/CSharp+Community+Projects"&gt;drivers para C# y F#.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Para mis ejemplo utilizar&amp;eacute; &lt;a target="_blank" href="https://github.com/atheken/NoRM"&gt;Norm&lt;/a&gt; un driver para C# que facilita la interacci&amp;oacute;n con las colecciones, la serializaci&amp;oacute;n/deserializaci&amp;oacute;n de objetos JSOn como documentos &lt;strong&gt;&amp;quot;BSON&amp;quot;&lt;/strong&gt; a tipos .NET y la utilizaci&amp;oacute;n de LinQ-To-Mongo. Otra de las utilidades que he utilizado es &lt;a target="_blank" href="http://blog.mongovue.com/"&gt;mongoVUE&lt;/a&gt; para administrar nuestras bases de datos de una forma gr&amp;aacute;fica. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://mrubino.net/wp-content/uploads/2011/02/Vue.png"&gt;&lt;/a&gt;&amp;nbsp;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/Vue.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/Vue.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Con esta utilidad pod&amp;eacute;is ver los datos en formato &amp;aacute;rbol o en JSon.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://mrubino.net/wp-content/uploads/2011/02/Vue2.png"&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/Vue2.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/Vue2.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;a href="http://mrubino.net/wp-content/uploads/2011/02/Vue3.png"&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/Vue3.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/Vue3.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;La Instalaci&amp;oacute;n&lt;/h3&gt;
&lt;p&gt;La instalaci&amp;oacute;n es muy simple: &lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;div&gt;Crear los directorios &amp;quot;C:MongoDBdata&amp;quot; y &amp;quot;C:MongoDBlogs&amp;quot;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;div&gt;Copiar los ficheros de la instalaci&amp;oacute;n &lt;a target="_blank" href="http://www.mongodb.org/downloads"&gt;MongoDB&lt;/a&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;li&gt;En el directorio &amp;quot;C:MongoDBbin&amp;quot; ejecutar: &amp;quot;mongod --dbpath C:MongoDBdata --directoryperdb --install --logpath C:MongoDBlogslog.txt&amp;quot; &lt;span style="color:#000000;"&gt;&lt;span style="background-color:#ffffff;"&gt;&lt;strong&gt;&amp;ldquo;En Windows 7, ejecutar el CMD como administrador para no tener problemas&amp;rdquo;&lt;/strong&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;Arrancar el servicio de MongoDB&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;a href="http://mrubino.net/wp-content/uploads/2011/02/image.png"&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/image.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/image.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;El Modelo&lt;/h3&gt;
&lt;p&gt;Una de las ventajas de Norm es que podemos utilizar nuestras entidades sin necesidad de realizar grandes cambios, el &amp;uacute;nico requerimiento es utilizar el objeto &lt;strong&gt;ObjectId &lt;/strong&gt;para que MongoDb lo utilice como identificador de los registros. &lt;/p&gt;
&lt;pre class="brush: csharp; title: ;"&gt; [DataContract]
    public class Persona
    {
        public ObjectId Id { get; set; }
        [DataMember]
        public string Nombre { get; set; }
        [DataMember]
        public string Apellidos { get; set; }
        [DataMember]
        public DateTime Fecha { get; set; }
        [DataMember]
        public string Poblacion { get; set; }
        [DataMember]
        public int Hermanos { get; set; }
        [DataMember]
        public List Aficiones { get; set; }

    }
    [DataContract]
    public class Aficion
    {
         [DataMember]
        public string Nombre { get; set; }
         [DataMember]
        public string Descripcion { get; set; }
    }&lt;/pre&gt;
&lt;h3&gt;La Conexi&amp;oacute;n&lt;/h3&gt;
&lt;p&gt;Para conectar con nuestra base de datos tenemos que especificar el nombre de la base de datos, el servidor el puerto y un string con las opciones. &lt;/p&gt;
&lt;pre class="brush: csharp; title: ;"&gt;private Mongo mongo;
public RepositoyNomgoDB()
{
   mongo = new Mongo(&amp;quot;EjMongoDB&amp;quot;, &amp;quot;localhost&amp;quot;, &amp;quot;27017&amp;quot;, string.Empty);
}&lt;/pre&gt;
&lt;h3&gt;Las Consultas&lt;/h3&gt;
&lt;p&gt;Para todas nuestras consultas podemos utilizar objetos an&amp;oacute;nimos o consultas LinQ. Lo primero que tenemos que hacer e obtener la colecci&amp;oacute;n que queremos utilizar, como si fuera una tabla de una base de datos relacional. &lt;/p&gt;
&lt;pre class="brush: csharp;"&gt;var collection = (MongoCollection)mongo&amp;lt;Personas&amp;gt;.GetCollection(&amp;quot;Personas&amp;quot;);&lt;/pre&gt;
&lt;p&gt;Una vez que tenemos la colecci&amp;oacute;n podemos utilizar las t&amp;iacute;picas sentencias CRUD. &lt;/p&gt;
&lt;pre class="brush: csharp; title: ;"&gt; collection.Insert(persona);
 collection.Delete(persona);
 collection.Save(persona);
 collection.UpdateOne(persona.Id, persona);&lt;/pre&gt;
&lt;p&gt;Ahora ya podemos realizar nuestras consultas utilizando la forma que nos sea m&amp;aacute;s c&amp;oacute;moda; &lt;/p&gt;
&lt;h4&gt;Buscar un Resultado:&lt;/h4&gt;
&lt;pre class="brush: csharp; "&gt;//NoRM anonymous objects:
var persona = mongo.GetCollection&amp;lt;Personas&amp;gt;(&amp;quot;Personas&amp;quot;)
                             .FindOne(new { Nombre = &amp;quot;Marc&amp;quot; });
//NoRM Linq:
var personalinQ = mongo.GetCollection&amp;lt;Personas&amp;gt;(&amp;quot;Personas&amp;quot;)
                                                 .AsQueryable()
                                  .Where(per =&amp;gt; per.Nombre == &amp;quot;Marc&amp;quot;
                                &amp;amp;&amp;amp; per.Apellidos == &amp;quot;Rubi&amp;ntilde;o&amp;quot;).ToList();&lt;/pre&gt;
&lt;h4&gt;Buscar Varios Resultados o paginar los resultados:&lt;/h4&gt;
&lt;pre class="brush: csharp; title: ;"&gt;//NoRM anonymous objects:
var persona = mongo.GetCollection&amp;lt;Personas&amp;gt;(&amp;quot;Personas&amp;quot;).Find(new { },
                                new { Fecha = OrderBy.Descending }, 2, 1)
                                 .ToList();
//NoRM Linq:
var persona = mongo.GetCollection&amp;lt;Personas&amp;gt;(&amp;quot;Personas&amp;quot;).AsQueryable()
                                 .OrderByDescending(per =&amp;gt; per.Fecha)
                                  .Skip(1)
                                  .Take(2).ToList();&lt;/pre&gt;
&lt;h4&gt;Operadores Condicionales:&lt;/h4&gt;
&lt;pre class="brush: csharp; title: ;"&gt; //Mayor que
var persona = mongo.GetCollection&amp;lt;Personas&amp;gt;(&amp;quot;Personas&amp;quot;).AsQueryable()
                            .Where(per =&amp;gt; per.Hermanos &amp;gt; 3).ToList();
//Igual o Mayor
var persona = mongo.GetCollection&amp;lt;Personas&amp;gt;(&amp;quot;Personas&amp;quot;).AsQueryable()
                             .Where(per =&amp;gt; per.Hermanos &amp;gt;= 3).ToList();
//Diferente
var persona = mongo.GetCollection&amp;lt;Personas&amp;gt;(&amp;quot;Personas&amp;quot;).AsQueryable()
                              .Where(per =&amp;gt; per.Hermanos != 3).ToList();
//En
var persona = mongo.GetCollection&amp;lt;Personas&amp;gt;(&amp;quot;Personas&amp;quot;).Find(
                   new { Aficiones = Q.In(&amp;quot;Futbol&amp;quot;, &amp;quot;M&amp;uacute;sica&amp;quot;) }).ToList();
//NO En
var persona = mongo.GetCollection&amp;lt;Personas&amp;gt;(&amp;quot;Personas&amp;quot;).Find(
             new { Aficiones = Q.NotIn(&amp;quot;Futbol&amp;quot;, &amp;quot;M&amp;uacute;sica&amp;quot;) }).ToList();
//Existe
var persona = mongo.GetCollection&amp;lt;Personas&amp;gt;(&amp;quot;Personas&amp;quot;).Find(
                           new { Apellidos = Q.Exists(true) }).ToList();
//OR
var persona = mongo.GetCollection&amp;lt;Personas&amp;gt;(&amp;quot;Personas&amp;quot;)
                             .Find(Q.Or(new { Nombre = &amp;quot;Marc&amp;quot; },
                             new { Aficiones = &amp;quot;Futbol&amp;quot; })).ToList();&lt;/pre&gt;
&lt;h4&gt;Distinto y Count:&lt;/h4&gt;
&lt;pre class="brush: csharp; title: ;"&gt;//Count
 var persona = mongo.GetCollection&amp;lt;Personas&amp;gt;(&amp;quot;Personas&amp;quot;)
                        .Count(new { Poblacion = &amp;quot;Cambrils&amp;quot; });
//Distinct
var persona = mongo.GetCollection&amp;lt;Personas&amp;gt;(&amp;quot;Personas&amp;quot;)
                                 .Distinct(&amp;quot;Aficiones&amp;quot;);&lt;/pre&gt;
&lt;h4&gt;Con expresiones Regulares:&lt;/h4&gt;
&lt;pre class="brush: csharp; title: ;"&gt;//Empieza por Ma
 var persona = mongo.GetCollection&amp;lt;Personas&amp;gt;(&amp;quot;Personas&amp;quot;).AsQueryable()
                         .Where(per =&amp;gt; Regex.IsMatch(per.Nombre, &amp;quot;^Ma&amp;quot;))
                          .ToList();&lt;/pre&gt;
&lt;p&gt;Ya podemos a&amp;ntilde;adir y obtener los registros desde nuestra base de datos NoSql de Personas &lt;/p&gt;
&lt;p&gt;&lt;a href="http://mrubino.net/wp-content/uploads/2011/02/Personas.png"&gt;&lt;/a&gt;&lt;a href="http://geeks.ms/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/Personas.png"&gt;&lt;img src="http://geeks.ms/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/mrubino/Personas.png" border="0" alt="" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Espero que en la pr&amp;oacute;xima entrega pueda hacer un ejemplo m&amp;aacute;s espec&amp;iacute;fico para una aplicaci&amp;oacute;n ASP.NET.&lt;/p&gt;
&lt;p&gt;CrossPosting: &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;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=189493" width="1" height="1"&gt;</description><category domain="http://geeks.ms/blogs/mrubino/archive/tags/MongoDB/default.aspx">MongoDB</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/NoSQL/default.aspx">NoSQL</category><category domain="http://geeks.ms/blogs/mrubino/archive/tags/LinQ/default.aspx">LinQ</category></item></channel></rss>

