<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;D0ECQnozeSp7ImA9WhRaFUU.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217</id><updated>2012-02-18T12:21:03.481-05:00</updated><category term="Inyecciones XPATH" /><category term="Google Hacks" /><category term="Miscelaneas" /><category term="Subversion" /><category term="Javascript" /><category term="Segundo Serrano Panduro" /><category term="Programación" /><category term="Inyecciones SQL" /><category term="Seguridad Web" /><category term="Base de datos" /><category term="Aplicaciones seguras" /><category term="Seguridad en dispositivos" /><category term="ASP.NET" /><category term="css" /><category term="Inyecciones HTML" /><category term="AJAX CONTROL TOOLKIT" /><category term="HTML" /><category term="Visual Studio .net" /><category term="SQL SERVER" /><category term="Jquery" /><category term="XSS" /><category term="TortoiseSVN" /><category term="Facebook" /><category term=".NET" /><category term="Utilitarios" /><title>NEURONASOFT</title><subtitle type="html">Artículos sobre tecnologías para desarrollar sistemas informáticos, con especial énfasis en ASP.NET.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://www.neuronasoft.net/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>234</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/Neuronasoft" /><feedburner:info uri="neuronasoft" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;C0AMQXgzfCp7ImA9WhRUFk8.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-959650440013518319</id><published>2012-01-26T18:48:00.000-05:00</published><updated>2012-01-26T18:49:40.684-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-01-26T18:49:40.684-05:00</app:edited><title>ASP.NET - Asignar Linkbutton como DefaultButton del Panel</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Dk-fD86ORFS6tPauFXCbyUToRdg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Dk-fD86ORFS6tPauFXCbyUToRdg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Dk-fD86ORFS6tPauFXCbyUToRdg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Dk-fD86ORFS6tPauFXCbyUToRdg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://lh6.ggpht.com/-eWHlj1kfKT8/TyHmCS2zt-I/AAAAAAAABQ0/cYVhe5VPEug/s1600-h/Login%25255B3%25255D.png"&gt;&lt;img align="left" alt="Login" border="0" height="87" src="http://lh4.ggpht.com/-pEatcGHPpTo/TyHmDUP5i7I/AAAAAAAABQ8/Xyu6ftvGuJ0/Login_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; float: left; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Login" width="454" /&gt;&lt;/a&gt;Si incluyes dentro de un panel un grupo de controles, entre ellos botones simples (Button), botones con imágen (ImageButton), tienes la opción de elegir cuál será el botón que se ejecute cuando presiones la tecla ENTER estando dentro del formulario.&lt;br /&gt;
Esta funcionalidad es útil para formularios que incluyen cajas de texto y botones, donde el usuario luego de llenar el formulario simplemente quiere presionar la tecla ENTER en lugar de ir con el mouse hasta el botón que enviará la información.&lt;br /&gt;
&lt;br /&gt;
Y cómo hacemos esto? &lt;br /&gt;
simple… en este ejemplo muestro un formulario de autenticación el cual está dentro de un control Panel, si el usuario estando dentro de una de las cajas de diálogo presiona la tecla ENTER, el formulario se enviará, como si se hubiera hecho click en el botón Login.&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Panel &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="pnlLogin" &lt;/span&gt;&lt;span style="color: red;"&gt;DefaultButton&lt;/span&gt;&lt;span style="color: blue;"&gt;="imgLogin" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;table&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Label3" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="Correo:"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TextBox &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="txtLogin"&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Label4" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="Contraseña:"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TextBox &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="txtPassword"&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;TextMode&lt;/span&gt;&lt;span style="color: blue;"&gt;="Password"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;            &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;ImageButton &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="imgLogin"&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" /&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;table&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Panel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
Para que esto funcione simplemente le asignas a la propiedad DefaultButton el control que quieres que se ejecute… pero ojo este control a ejecutar sólo puede ser Button o ImageButton.&lt;br /&gt;
Lamentablemente, esta funcionalidad no está disponible para el control LinkButton, como dice este enlace de MSDN &lt;a href="http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.panel.defaultbutton.aspx" target="_blank"&gt;Panel DefaultButton Property&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Pero, lo que podemos hacer es un truco, el cual consiste en incluir un LinkButton y un ImageButton, al imageButton le ponemos style=display: none para que sea invisible… pero esto no impedirá que igual se ejecute al presionar ENTER estando dentro del formulario. Veamos:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Panel &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="pnlLogin" &lt;/span&gt;&lt;span style="color: red;"&gt;DefaultButton&lt;/span&gt;&lt;span style="color: blue;"&gt;="imgLogin" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;table&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Label3" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="Correo:"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TextBox &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="txtLogin"&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Label4" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="Contraseña:"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TextBox &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="txtPassword"&lt;/span&gt;&lt;span style="color: blue;"&gt; &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;TextMode&lt;/span&gt;&lt;span style="color: blue;"&gt;="Password"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;LinkButton &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="lnkLogin" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;&lt;/span&gt;Login&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;LinkButton&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;ImageButton &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="imgLogin" &lt;/span&gt;&lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: red;"&gt;display&lt;/span&gt;&lt;span style="color: blue;"&gt;: none" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" /&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;table&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Panel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
Te invito a que ejecutes el ejemplo.&lt;br /&gt;
Espero que les sea de utilidad &lt;img alt="Guiño" class="wlEmoticon wlEmoticon-winkingsmile" src="http://lh3.ggpht.com/-9oGXzjK6NJo/TyHmD1hGgrI/AAAAAAAABRE/p2poazvUIyo/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-959650440013518319?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/itIc3McCO7U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/959650440013518319/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=959650440013518319&amp;isPopup=true" title="1 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/959650440013518319?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/959650440013518319?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/itIc3McCO7U/aspnet-asignar-linkbutton-como.html" title="ASP.NET - Asignar Linkbutton como DefaultButton del Panel" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-pEatcGHPpTo/TyHmDUP5i7I/AAAAAAAABQ8/Xyu6ftvGuJ0/s72-c/Login_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.neuronasoft.net/2012/01/aspnet-asignar-linkbutton-como.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIFRHs8eip7ImA9WhRQFEs.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-7093528965269889603</id><published>2011-12-09T15:50:00.000-05:00</published><updated>2011-12-09T16:01:55.572-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-09T16:01:55.572-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Aplicaciones seguras" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>ASP.NET - Recuperando imagenes desde carpeta fuera de tu sitio web</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/eJSN81zCWVNMa3CUR_jvdGqKq34/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eJSN81zCWVNMa3CUR_jvdGqKq34/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/eJSN81zCWVNMa3CUR_jvdGqKq34/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/eJSN81zCWVNMa3CUR_jvdGqKq34/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://lh3.ggpht.com/-aT2w2XjZ_20/TuJ29E2QHPI/AAAAAAAABQM/0FwUO7CAsaU/s1600-h/block_image%25255B5%25255D.png"&gt;&lt;img align="left" alt="block_image" border="0" height="240" src="http://lh6.ggpht.com/-lMoeg7MEXMM/TuJ294ashqI/AAAAAAAABQU/pZqCTpbvF8I/block_image_thumb%25255B3%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; float: left; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="block_image" width="199" /&gt;&lt;/a&gt;Cómo hacemos para mostrar en nuestro sitio web imágenes que están guardadas en carpetas que están fuera de nuestro sitio web? Tienes dos posibilidades:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Conviertes dicha carpeta con imágenes en directorio virtual, y luego accedes a dichas imágenes a través de una url.  &lt;/li&gt;
&lt;li&gt;Añades un archivo handler, digamos Handler1.ashx, para que a través de él accedas a cada imagen ubicada en dicha carpeta.&lt;/li&gt;
&lt;/ol&gt;
Si eligieras la primera opción, tendrías el inconveniente de que si le usuario pone ver el código html de tu página… vería cuál es la ruta de cada imagen y podría acceder a ellas.&lt;br /&gt;
La segunda opción, al contrario te brinda muchas ventajas… como es la privacidad de las imágenes: no se menciona dónde están guardadas las imágenes… sólo se puede acceder a ellas a través de este handler… &lt;br /&gt;
además si quisieras poner algunas validaciones adicionales antes de despachar la imagen… podrías incluirlas en este handler. Hace algún tiempo escribí algo al respecto, puedes leerlo desde aquí:&lt;br /&gt;
&lt;a href="http://www.neuronasoft.net/2010/04/aspnet-imagenes-solo-para-usuarios.html"&gt;http://www.neuronasoft.net/2010/04/aspnet-imagenes-solo-para-usuarios.html&lt;/a&gt;&lt;br /&gt;
Vamos entonces a demostrar entonces cómo servimos imágenes a través de un handler.ashx:&lt;br /&gt;
Primero, tendrás que ponerle a tus controles imagen una ruta como esta:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Image &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Image1" &lt;/span&gt;&lt;span style="color: red;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;="Handler1.ashx?&lt;u&gt;img=banner.png&lt;/u&gt;" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" /&amp;gt;&lt;/span&gt;&lt;/pre&gt;
Date cuenta que estoy pasando el nombre de la imagen como un querystring.&lt;br /&gt;
Luego, el código del handler sería el siguiente:&lt;br /&gt;
&lt;pre class="code"&gt;    &lt;span style="color: blue;"&gt;Sub &lt;/span&gt;ProcessRequest(&lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;context &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;HttpContext&lt;/span&gt;) &lt;span style="color: blue;"&gt;Implements &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IHttpHandler&lt;/span&gt;.ProcessRequest

        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;Path &lt;span style="color: blue;"&gt;As String &lt;/span&gt;= &lt;span style="color: #a31515;"&gt;"C:\PrivateImages\"

        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;img &lt;span style="color: blue;"&gt;As String &lt;/span&gt;= context.Request.QueryString(&lt;span style="color: #a31515;"&gt;"img"&lt;/span&gt;)

        context.Response.ContentType = &lt;span style="color: #a31515;"&gt;"image/png"

        &lt;/span&gt;context.Response.TransmitFile(Path &amp;amp; img)

    &lt;span style="color: blue;"&gt;End Sub&lt;/span&gt;&lt;/pre&gt;
Como ves, es muy simple, sin embargo nos resuelve muchos contratiempos.&lt;br /&gt;
Espero que te sea de utilidad &lt;img alt="Guiño" class="wlEmoticon wlEmoticon-winkingsmile" src="http://lh6.ggpht.com/-DcsuVwAUi2Y/TuJ2-G8TUlI/AAAAAAAABQc/mhNGck0zSf4/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-7093528965269889603?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/LQ4ajOj2zGs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/7093528965269889603/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=7093528965269889603&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/7093528965269889603?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/7093528965269889603?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/LQ4ajOj2zGs/aspnet-recuperando-imagenes-desde.html" title="ASP.NET - Recuperando imagenes desde carpeta fuera de tu sitio web" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-lMoeg7MEXMM/TuJ294ashqI/AAAAAAAABQU/pZqCTpbvF8I/s72-c/block_image_thumb%25255B3%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/12/aspnet-recuperando-imagenes-desde.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0UCQXcyfyp7ImA9WhRQEk0.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-2593765905923481086</id><published>2011-11-30T15:35:00.000-05:00</published><updated>2011-12-06T16:01:00.997-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-06T16:01:00.997-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="css" /><title>ASP.NET - Multiples skins y una sola hoja de estilos</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/vlrSmP87SqXBfxG80QjTxsV5XHQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vlrSmP87SqXBfxG80QjTxsV5XHQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/vlrSmP87SqXBfxG80QjTxsV5XHQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/vlrSmP87SqXBfxG80QjTxsV5XHQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Vamos a mostrar una alternativa a la creación de aplicaciones web que necesitan tener múltiples skins, pero que al mismo tiempo eviten mantener múltiples hojas de estilos CSS, a la cual sólo le cambien el color o las imágenes, lo cual parece inapropiado. &lt;br /&gt;
Ojo que esta forma que propongo no contradice con lo que son los Themes en ASP.NET, al contrario, si se le usa convenientemente, lograrán un mejor aprovechamiento de los Themes.&lt;br /&gt;
Al final de este post estoy adjuntando tres imágenes para que tengan una idea de cómo va cambiando el skin.&lt;br /&gt;
Ahora sí, les explico cómo funciona el cambio de skin. La idea central consiste en dividir los estilos css del aplicativo web en dos archivos css:&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Una hoja de estilos base… llamada base.css, esta hoja de estilos tendría todos los estilos que no necesitan cambiar y son los estilos generales.  &lt;/li&gt;
&lt;li&gt;Otra hoja de estilos, la cual realmente será una página .aspx, yo la llamo DinamitaCSS.css… esta segunda hoja de estilos será la encargada de generar los estilos que diferencian a los skins( colores, imágenes, etc)… a veces esta hoja de estilos generará estilos css con el mismo nombre de los ya existentes en el archivo base.css, pero no sobreescribirá esos estilos, sino que más bien: los completará. Osea, si tienes estilos que para el primer skin debe mostrar un color celeste y letras en negrilla, y luego tienes otro estilo para un segundo skin que debe mostrar un color amarillo y letras en negrilla… entonces crearás en base.css dicho estilo… pero no incluirás el color… sí la negrilla. El cambio de color debes programarlo en la segunda hoja de estilos llamada DinamitaCSS.css, espero haberme hecho entender.  &lt;/li&gt;
&lt;li&gt;Para cambiar entre skins, he puesto un dropdownList en la cabecera de la página… al cambiar de opción en el dropdownlist, cambia el skin. &lt;/li&gt;
&lt;/ol&gt;
Les muestro el código que va en DinamitaCSS.css para que tengan una idea de cómo voy generando una parte del css.&lt;br /&gt;
&lt;pre class="code"&gt;    &lt;span style="color: blue;"&gt;Protected Sub &lt;/span&gt;Page_Load(&lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;sender &lt;span style="color: blue;"&gt;As Object&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;e &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;EventArgs&lt;/span&gt;) &lt;span style="color: blue;"&gt;Handles Me&lt;/span&gt;.Load
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;url &lt;span style="color: blue;"&gt;As String &lt;/span&gt;= &lt;span style="color: #2b91af;"&gt;Utils&lt;/span&gt;.GetApplicationPath()

        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;css &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;StringBuilder
        &lt;/span&gt;css.Append(&lt;span style="color: #a31515;"&gt;"a {color: @header_color; }"&lt;/span&gt;)
        css.Append(&lt;span style="color: #a31515;"&gt;"fieldset  {border: 1px solid @tableheader_color;}"&lt;/span&gt;)
        css.Append(&lt;span style="color: #a31515;"&gt;"th{    background-color: @tableheader_color;    border: solid 1px @tableheader_color;}"&lt;/span&gt;)
        css.Append(&lt;span style="color: #a31515;"&gt;".head{    background-color: @header_color; }"&lt;/span&gt;)
        css.Append(&lt;span style="color: #a31515;"&gt;".headLine{    background-color: @tableheader_color; }"&lt;/span&gt;)
        css.Append(&lt;span style="color: #a31515;"&gt;"hr{    border: solid 2px @header_color;}"&lt;/span&gt;)
        css.Append(&lt;span style="color: #a31515;"&gt;".tableForm{    background-color: @background_color;}"&lt;/span&gt;)
        css.Append(&lt;span style="color: #a31515;"&gt;".tdTitle{    background-color: @header_color;     border: solid 1px @header_color;}"&lt;/span&gt;)

        css.Append(&lt;span style="color: #a31515;"&gt;".button"&lt;/span&gt;)
        css.Append(&lt;span style="color: #a31515;"&gt;"{"&lt;/span&gt;)
        css.AppendFormat(&lt;span style="color: #a31515;"&gt;"background: url(&lt;/span&gt;&lt;span style="color: mediumseagreen;"&gt;{0}&lt;/span&gt;&lt;span style="color: #a31515;"&gt;images/overlay.png) repeat-x center @tableheader_color;"&lt;/span&gt;, url)
        css.Append(&lt;span style="color: #a31515;"&gt;"border: 1px solid @background_color;"&lt;/span&gt;)
        css.Append(&lt;span style="color: #a31515;"&gt;"}"&lt;/span&gt;)
        css.Append(&lt;span style="color: #a31515;"&gt;".button:hover { background-color: @background_color; border: solid 1px @header_color; }"&lt;/span&gt;)

        css.Replace(&lt;span style="color: #a31515;"&gt;"@background_color"&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;cCurrentSession&lt;/span&gt;.BackgroundColor)
        css.Replace(&lt;span style="color: #a31515;"&gt;"@header_color"&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;cCurrentSession&lt;/span&gt;.HeaderColor)
        css.Replace(&lt;span style="color: #a31515;"&gt;"@tableheader_color"&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;cCurrentSession&lt;/span&gt;.TableHeaderColor)

        Response.Clear()
        Response.ContentType = &lt;span style="color: #a31515;"&gt;"text/css"
        &lt;/span&gt;Response.Write(css.ToString)
        Response.End()

    &lt;span style="color: blue;"&gt;End Sub&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
Analicen el código, verán que es muy simple, para ello estoy adjuntando también el proyecto completo para que lo descargues y lo examines con calma.&lt;br /&gt;
&lt;iframe frameborder="0" height="120" marginheight="0" marginwidth="0" scrolling="no" src="https://skydrive.live.com/embed?cid=F5CAD8C1ED1C13F9&amp;amp;resid=F5CAD8C1ED1C13F9%21256&amp;amp;authkey=AKumH50_wbPOqkU" style="background-color: #fcfcfc; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="Preview" width="98"&gt;&lt;/iframe&gt;&lt;br /&gt;
Imágenes:&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/-Xiopuvt7pQQ/Tt6BwOQw58I/AAAAAAAABOg/sQ0Sszkj5aE/s1600-h/skin014.png"&gt;&lt;img alt="skin01" border="0" height="516" src="http://lh6.ggpht.com/-JBG4TYatEL8/Tt6BxX3KKkI/AAAAAAAABOo/X0cXM5zhw5o/skin01_thumb2.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="skin01" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-wvHBBd5iRAM/Tt6ByNSefZI/AAAAAAAABOw/1tZpMgL9ax0/s1600-h/skin023.png"&gt;&lt;img alt="skin02" border="0" height="480" src="http://lh5.ggpht.com/--G1Jd2RzdnM/Tt6BzIGWUsI/AAAAAAAABO4/HSYZYPd8BjI/skin02_thumb1.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="skin02" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/-GjYaCWsITBQ/Tt6B0eg_0jI/AAAAAAAABPA/oDMAVBP1fP4/s1600-h/skin033.png"&gt;&lt;img alt="skin03" border="0" height="482" src="http://lh6.ggpht.com/-EvY_wMTcIZQ/Tt6B19X0YJI/AAAAAAAABPI/cy3C0sL4cJE/skin03_thumb1.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="skin03" width="640" /&gt;&lt;/a&gt;&lt;br /&gt;
Espero que les sea de utilidad &lt;img alt="Guiño" class="wlEmoticon wlEmoticon-winkingsmile" src="http://lh6.ggpht.com/--z96Mulb4zI/Tt6B2Z32loI/AAAAAAAABPQ/N8eGg2gyDfM/wlEmoticon-winkingsmile2.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-2593765905923481086?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/R8wGtCHr9bs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/2593765905923481086/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=2593765905923481086&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/2593765905923481086?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/2593765905923481086?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/R8wGtCHr9bs/aspnet-multiples-skins-y-una-sola-hoja.html" title="ASP.NET - Multiples skins y una sola hoja de estilos" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-JBG4TYatEL8/Tt6BxX3KKkI/AAAAAAAABOo/X0cXM5zhw5o/s72-c/skin01_thumb2.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/11/aspnet-multiples-skins-y-una-sola-hoja.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQESHc5eCp7ImA9WhRREUw.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-4102840423822349287</id><published>2011-11-21T11:29:00.001-05:00</published><updated>2011-11-24T00:41:49.920-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-24T00:41:49.920-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>ASP.NET–Generar PDF al vuelo con imagenes, enlaces y tablas</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/O6tFV7WCUG5bP8qcpdRTYYEvGVY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O6tFV7WCUG5bP8qcpdRTYYEvGVY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/O6tFV7WCUG5bP8qcpdRTYYEvGVY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/O6tFV7WCUG5bP8qcpdRTYYEvGVY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://lh3.ggpht.com/-YTBPBL5CT74/Tsp8RtvGudI/AAAAAAAABOI/G1RIRIvKFio/s1600-h/pdf_on_the_fly%25255B3%25255D.png"&gt;&lt;img align="left" alt="pdf_on_the_fly" border="0" height="409" src="http://lh3.ggpht.com/-fBJvWVG3A-M/Tsp8Un_aHlI/AAAAAAAABOQ/PCCRS0rhAQI/pdf_on_the_fly_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; float: left; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="pdf_on_the_fly" width="475" /&gt;&lt;/a&gt;Hace varios años, cuando necesité generar un archivo pdf formateado se me hizo muy difícil hallar información para construir un catálogo de productos en PDF que incluya imágenes tablas y enlaces. &lt;br /&gt;
Es por este motivo que surge este post: para facilitarle la vida a los desarrolladores que necesitan crear un documento con imágenes y enlaces en un archivo PDF.&lt;br /&gt;
Para la generación del PDF vamos a usar la ya reconocida librería iTextSharp.&lt;br /&gt;
Algo más, el archivo se generará al vuelo, osea en el momento que el usuario solicite el archivo… esto tiene la ventaja de que el pdf siempre estará actualizado… dado que suponemos que el pdf se generará con información guardada en la base de datos, pero nosotros en este post obviaremos ese paso para simplificar el post.&lt;br /&gt;
Para solicitar el archivo pdf, tendremos un hyperlink en cual tiene un parámetro querystring con el id del documento a solicitar… y este hyperlink, hará el llamado a un manejador genérico o handler, quien finalmente será quien genere el pdf.&lt;br /&gt;
Algo como esto:&lt;br /&gt;
&amp;lt;asp:HyperLink ID="hplDownload" NavigateUrl&lt;u&gt;="~/PdfGenerator.ashx?did=5&lt;/u&gt;" runat="server"&amp;gt;Descargar...&amp;lt;/asp:HyperLink&amp;gt;&lt;br /&gt;
Como pueden observar, el enlace del hyperlink llama a un manejador de peticiones, el cual recibe el id del documento.&lt;br /&gt;
Bueno, ya hemos dicho a grandes rasgos en que consiste este post, ahora vamos al código:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;html &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://www.w3.org/1999/xhtml"&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;head &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Generar documento pdf al vuelo con imagenes y enlaces&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;head&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;form &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="form1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &lt;/span&gt;Haga click en el enlace para descargar el archivo pdf
            &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;HyperLink &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="hplDownload" &lt;/span&gt;&lt;span style="color: red;"&gt;NavigateUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;="~/PdfGenerator.ashx?did=5" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;&lt;/span&gt;Descargar...&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;HyperLink&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;form&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;html&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
Este es un extracto del código que va en el manejador de peticiones web:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;Imports &lt;/span&gt;System.Web
&lt;span style="color: blue;"&gt;Imports &lt;/span&gt;System.IO
&lt;span style="color: blue;"&gt;Imports &lt;/span&gt;iTextSharp.text
&lt;span style="color: blue;"&gt;Imports &lt;/span&gt;iTextSharp.text.pdf

&lt;span style="color: blue;"&gt;Public Class &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;PdfGenerator
    &lt;/span&gt;&lt;span style="color: blue;"&gt;Implements &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IHttpHandler&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;

    &lt;/span&gt;&lt;span style="color: blue;"&gt;Sub &lt;/span&gt;ProcessRequest(&lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;ctx &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;HttpContext&lt;/span&gt;) &lt;span style="color: blue;"&gt;Implements &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IHttpHandler&lt;/span&gt;.ProcessRequest

        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;did &lt;span style="color: blue;"&gt;As String &lt;/span&gt;= ctx.Request.QueryString(&lt;span style="color: #a31515;"&gt;"did"&lt;/span&gt;)
        &lt;span style="color: blue;"&gt;If &lt;/span&gt;IsNumeric(did) &lt;span style="color: blue;"&gt;Then &lt;/span&gt;CreatePDFDocument(did)

    &lt;span style="color: blue;"&gt;End Sub

    Private Sub &lt;/span&gt;CreatePDFDocument(&lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;did &lt;span style="color: blue;"&gt;As Integer&lt;/span&gt;)
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;MStream &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;MemoryStream&lt;/span&gt;()
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;document &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Document&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;PageSize&lt;/span&gt;.A4, 80, 50, 30, 65)
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;writer &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;PdfWriter &lt;/span&gt;= &lt;span style="color: #2b91af;"&gt;PdfWriter&lt;/span&gt;.GetInstance(document, MStream)
        writer.CloseStream = &lt;span style="color: blue;"&gt;False

        &lt;/span&gt;document.Open()

        &lt;span style="color: green;"&gt;'header....................
        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;logo &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Image &lt;/span&gt;= &lt;span style="color: #2b91af;"&gt;Image&lt;/span&gt;.GetInstance(GetApplicationPhysicalPath() &amp;amp; &lt;span style="color: #a31515;"&gt;"images\header.jpg"&lt;/span&gt;)
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;cell &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Cell&lt;/span&gt;(logo)
        cell.BorderWidth = 0
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;TableHead &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Table&lt;/span&gt;(1, 1)
        TableHead.Width = 100
        TableHead.Border = 0
        TableHead.Cellpadding = 10
        TableHead.BorderColor = iTextSharp.text.&lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;.WHITE
        TableHead.AddCell(cell)
        document.Add(TableHead)

        &lt;span style="color: green;"&gt;'content...................

        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;TableContent &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Table&lt;/span&gt;(2, 4)
        TableContent.Width = 100
        TableContent.Cellpadding = 2
        TableContent.Border = 0
        TableContent.BorderColor = iTextSharp.text.&lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;.WHITE

        &lt;span style="color: green;"&gt;'first row
        '-----------------------------------------------
        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;image0 &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Image &lt;/span&gt;= &lt;span style="color: #2b91af;"&gt;Image&lt;/span&gt;.GetInstance(GetApplicationPhysicalPath() &amp;amp; &lt;span style="color: #a31515;"&gt;"images\" &lt;/span&gt;&amp;amp; &lt;span style="color: #a31515;"&gt;"image0.jpg"&lt;/span&gt;)
        cell = &lt;span style="color: blue;"&gt;New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Cell&lt;/span&gt;()
        cell.BorderWidth = 0
        cell.SetWidth(&lt;span style="color: #a31515;"&gt;"30%"&lt;/span&gt;)
        cell.AddElement(image0)
        TableContent.AddCell(cell)

        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;pMarca &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Phrase&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Marca:"&lt;/span&gt;, &lt;span style="color: blue;"&gt;New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Font&lt;/span&gt;(&lt;span style="color: #2b91af;"&gt;Font&lt;/span&gt;.BOLD))
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;m &lt;span style="color: blue;"&gt;As String &lt;/span&gt;= &lt;span style="color: #a31515;"&gt;"Este es otro título" &lt;/span&gt;&amp;amp; vbCr
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;pMarcaContent &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Phrase&lt;/span&gt;(m)

        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;pLinea &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Phrase&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Línea:"&lt;/span&gt;)
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;l &lt;span style="color: blue;"&gt;As String &lt;/span&gt;= &lt;span style="color: #a31515;"&gt;"Comics" &lt;/span&gt;&amp;amp; vbCr
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;pLineaContent &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Phrase&lt;/span&gt;(l)

        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;pNombre &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Phrase&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Nombre:"&lt;/span&gt;)
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;n &lt;span style="color: blue;"&gt;As String &lt;/span&gt;= &lt;span style="color: #a31515;"&gt;"La historia del Comic" &lt;/span&gt;&amp;amp; vbCr
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;pNombreContent &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Phrase&lt;/span&gt;(n)

        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;pCodigo &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Phrase&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Código:"&lt;/span&gt;)
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;c &lt;span style="color: blue;"&gt;As String &lt;/span&gt;= &lt;span style="color: #a31515;"&gt;"1234567890"
        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;pCodigoContent &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Phrase&lt;/span&gt;(c)

        cell = &lt;span style="color: blue;"&gt;New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Cell&lt;/span&gt;()
        cell.BorderWidth = 0
        cell.SetWidth(&lt;span style="color: #a31515;"&gt;"70%"&lt;/span&gt;)
        cell.AddElement(pMarca)
        cell.AddElement(pMarcaContent)

        cell.AddElement(pLinea)
        cell.AddElement(pLineaContent)

        cell.AddElement(pNombre)
        cell.AddElement(pNombreContent)

        cell.AddElement(pCodigo)
        cell.AddElement(pCodigoContent)
        TableContent.AddCell(cell)

        &lt;span style="color: green;"&gt;'second row
        '-----------------------------------------------
        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;pDescripcion &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Phrase&lt;/span&gt;(&lt;span style="color: blue;"&gt;String&lt;/span&gt;.Format(&lt;span style="color: #a31515;"&gt;"Descripción General:&lt;/span&gt;&lt;span style="color: mediumseagreen;"&gt;{0}&lt;/span&gt;&lt;span style="color: #a31515;"&gt;"&lt;/span&gt;, vbCr))
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;desc &lt;span style="color: blue;"&gt;As String &lt;/span&gt;= &lt;span style="color: #a31515;"&gt;"Al hablar de los antecesores de la historieta, es inevitable " &lt;/span&gt;&amp;amp; _
            &lt;span style="color: #a31515;"&gt;"nombrar a los antiguos egipcios, que representaban muchos de sus mitos en dibujos y " &lt;/span&gt;&amp;amp; _
            &lt;span style="color: #a31515;"&gt;"jeroglíficos que realizaban sobre hojas de papiro, y también hacían murales en forma de tira, " &lt;/span&gt;&amp;amp; _
            &lt;span style="color: #a31515;"&gt;"que incluían imagen y texto. Otros ejemplos son las cristaleras, el tapiz de Bayeux, las bandas que " &lt;/span&gt;&amp;amp; _
            &lt;span style="color: #a31515;"&gt;"rodean las columnas romanas conmemorativas (como la Trajana o la de Marco Aurelio), los retablos " &lt;/span&gt;&amp;amp; _
            &lt;span style="color: #a31515;"&gt;"medievales (con los que, mediante imágenes, se explicaban al pueblo historias, crímenes y sucesos " &lt;/span&gt;&amp;amp; _
            &lt;span style="color: #a31515;"&gt;"en general), los dibujos de las civilizaciones precolombinas (como los códices, pintados por los mayas y " &lt;/span&gt;&amp;amp; _
            &lt;span style="color: #a31515;"&gt;"los aztecas) e incluso las primitivas pinturas rupestres. A estos ejemplos citados se pueden agregar algunas " &lt;/span&gt;&amp;amp; _
            &lt;span style="color: #a31515;"&gt;"obras pictóricas de Hyeronnimus Bosh, Brueghel o Goya, las cuales adquieren un carácter narrativo."

        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;pDescripcionContent &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Phrase&lt;/span&gt;(desc)
        cell = &lt;span style="color: blue;"&gt;New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Cell&lt;/span&gt;()
        cell.BorderWidth = 0
        cell.Colspan = 2
        cell.AddElement(pDescripcion)
        cell.AddElement(pDescripcionContent)
        TableContent.AddCell(cell)

        &lt;span style="color: green;"&gt;'third row
        '-----------------------------------------------
        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;pInformacion &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Phrase&lt;/span&gt;(&lt;span style="color: blue;"&gt;String&lt;/span&gt;.Format(&lt;span style="color: #a31515;"&gt;"Información:&lt;/span&gt;&lt;span style="color: mediumseagreen;"&gt;{0}&lt;/span&gt;&lt;span style="color: #a31515;"&gt;"&lt;/span&gt;, vbCr))
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;inf &lt;span style="color: blue;"&gt;As String &lt;/span&gt;= &lt;span style="color: #a31515;"&gt;"Pero quizás los antecedentes más cercanos a la historietas sean las Aucas y Aleluyas, " &lt;/span&gt;&amp;amp; _
            &lt;span style="color: #a31515;"&gt;"destinadas fundamentalmente a satisfacer las necesidades de instrucción de niños y adolescentes. " &lt;/span&gt;&amp;amp; _
            &lt;span style="color: #a31515;"&gt;"Estas publicaciones, que comenzaron a editarse en Francia a partir de 1820, se caracterizaban por narrar " &lt;/span&gt;&amp;amp; _
            &lt;span style="color: #a31515;"&gt;"pequeños cuentos y aventuras mediante ilustraciones, aunque, a diferencia de la historieta, los textos no " &lt;/span&gt;&amp;amp; _
            &lt;span style="color: #a31515;"&gt;"se integraban orgánicamente dentro de los dibujos, sino que se adicionaban a modo de explicación " &lt;/span&gt;&amp;amp; _
            &lt;span style="color: #a31515;"&gt;"complementaria al pie de los grabados. Sin embargo, la historia del cómic se relaciona más correctamente " &lt;/span&gt;&amp;amp; _
            &lt;span style="color: #a31515;"&gt;"con la de la imprenta y la caricatura. "

        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;pInformacionContent &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Phrase&lt;/span&gt;(inf)
        cell = &lt;span style="color: blue;"&gt;New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Cell&lt;/span&gt;()
        cell.BorderWidth = 0
        cell.Colspan = 2
        cell.AddElement(pInformacion)
        cell.AddElement(pInformacionContent)
        TableContent.AddCell(cell)

        &lt;span style="color: green;"&gt;'fourth row
        '-----------------------------------------------
        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;miniTable &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Table&lt;/span&gt;(2, 1)
        miniTable.Width = 50
        miniTable.Alignment = &lt;span style="color: #2b91af;"&gt;Table&lt;/span&gt;.ALIGN_LEFT
        miniTable.Border = 0
        miniTable.BorderColor = iTextSharp.text.&lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;.WHITE

        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;miniCell &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Cell&lt;/span&gt;()
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;image2 &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Image &lt;/span&gt;= &lt;span style="color: #2b91af;"&gt;Image&lt;/span&gt;.GetInstance(GetApplicationPhysicalPath() &amp;amp; &lt;span style="color: #a31515;"&gt;"images\" &lt;/span&gt;&amp;amp; &lt;span style="color: #a31515;"&gt;"image2.jpg"&lt;/span&gt;)
        miniCell.BorderWidth = 0
        miniCell.AddElement(image2)
        miniTable.AddCell(miniCell)

        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;image3 &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Image &lt;/span&gt;= &lt;span style="color: #2b91af;"&gt;Image&lt;/span&gt;.GetInstance(GetApplicationPhysicalPath() &amp;amp; &lt;span style="color: #a31515;"&gt;"images\" &lt;/span&gt;&amp;amp; &lt;span style="color: #a31515;"&gt;"image3.gif"&lt;/span&gt;)
        miniCell = &lt;span style="color: blue;"&gt;New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Cell&lt;/span&gt;()
        miniCell.BorderWidth = 0
        miniCell.AddElement(image3)
        miniTable.AddCell(miniCell)

        cell = &lt;span style="color: blue;"&gt;New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Cell&lt;/span&gt;()
        cell.Colspan = 2
        cell.BorderWidth = 0
        cell.Add(miniTable)
        TableContent.AddCell(cell)

        document.Add(TableContent)

        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;TableLine &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Table&lt;/span&gt;(1, 1)
        TableLine.Width = 100
        TableLine.Border = 0
        TableLine.Cellpadding = 10
        TableLine.BorderColor = iTextSharp.text.&lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;.WHITE
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;Line &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Image &lt;/span&gt;= &lt;span style="color: #2b91af;"&gt;Image&lt;/span&gt;.GetInstance(GetApplicationPhysicalPath() &amp;amp; &lt;span style="color: #a31515;"&gt;"images\Line.png"&lt;/span&gt;)
        cell = &lt;span style="color: blue;"&gt;New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Cell&lt;/span&gt;()
        cell.BorderWidth = 0
        cell.AddElement(Line)
        TableLine.AddCell(cell)
        document.Add(TableLine)

        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;ph &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Phrase&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Contáctenos en: "&lt;/span&gt;)
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;a &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Anchor &lt;/span&gt;= &lt;span style="color: blue;"&gt;New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Anchor&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"Neuronasoft"&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;FontFactory&lt;/span&gt;.GetFont(&lt;span style="color: #2b91af;"&gt;FontFactory&lt;/span&gt;.HELVETICA, 12, &lt;span style="color: #2b91af;"&gt;Font&lt;/span&gt;.UNDERLINE, &lt;span style="color: blue;"&gt;New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Color&lt;/span&gt;(0, 0, 255)))
        a.Reference = &lt;span style="color: #a31515;"&gt;"http://www.neuronasoft.net"

        &lt;/span&gt;document.Add(ph)
        document.Add(a)

        document.Close()

        &lt;span style="color: #2b91af;"&gt;HttpContext&lt;/span&gt;.Current.Response.ContentType = &lt;span style="color: #a31515;"&gt;"application/pdf"
        &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;HttpContext&lt;/span&gt;.Current.Response.Buffer = &lt;span style="color: blue;"&gt;True
        &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;HttpContext&lt;/span&gt;.Current.Response.ClearContent()
        &lt;span style="color: #2b91af;"&gt;HttpContext&lt;/span&gt;.Current.Response.ClearHeaders()

        &lt;span style="color: #2b91af;"&gt;HttpContext&lt;/span&gt;.Current.Response.AddHeader(&lt;span style="color: #a31515;"&gt;"Content-Disposition"&lt;/span&gt;, &lt;span style="color: #a31515;"&gt;"attachment;filename=Comics_virtual.pdf"&lt;/span&gt;)
        &lt;span style="color: #2b91af;"&gt;HttpContext&lt;/span&gt;.Current.Response.BinaryWrite(MStream.GetBuffer())
        &lt;span style="color: #2b91af;"&gt;HttpContext&lt;/span&gt;.Current.Response.End()

    &lt;span style="color: blue;"&gt;End Sub

    Private Function &lt;/span&gt;GetApplicationPhysicalPath() &lt;span style="color: blue;"&gt;As String
        Return &lt;/span&gt;System.Web.&lt;span style="color: #2b91af;"&gt;HttpContext&lt;/span&gt;.Current.Request.PhysicalApplicationPath
    &lt;span style="color: blue;"&gt;End Function
    
    ReadOnly Property &lt;/span&gt;IsReusable() &lt;span style="color: blue;"&gt;As Boolean Implements &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;IHttpHandler&lt;/span&gt;.IsReusable
        &lt;span style="color: blue;"&gt;Get
            Return False
        End Get
    End Property

End Class&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
Estoy adjuntando el proyecto completo, para que hagan las pruebas con un ejemplo funcionando.&lt;br /&gt;
&lt;br /&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://skydrive.live.com/embedicon.aspx/neuronasoft/GeneratePDF.zip?cid=f5cad8c1ed1c13f9&amp;amp;sc=documents" style="background-color: #fcfcfc; height: 115px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 98px;" title="Preview"&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
Es todo, espero que les sea de utilidad &lt;img alt="Guiño" class="wlEmoticon wlEmoticon-winkingsmile" src="http://lh4.ggpht.com/-lcEjfWGU_6A/Tsp8Uy5i8OI/AAAAAAAABOY/MpKprROfS4k/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-4102840423822349287?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/oyqc4EJ1D8g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/4102840423822349287/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=4102840423822349287&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/4102840423822349287?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/4102840423822349287?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/oyqc4EJ1D8g/hace-varios-anos-cuando-necesite.html" title="ASP.NET–Generar PDF al vuelo con imagenes, enlaces y tablas" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-fBJvWVG3A-M/Tsp8Un_aHlI/AAAAAAAABOQ/PCCRS0rhAQI/s72-c/pdf_on_the_fly_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/11/hace-varios-anos-cuando-necesite.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYFQHk5fip7ImA9WhRSEU4.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-8836998119992091729</id><published>2011-11-12T11:51:00.001-05:00</published><updated>2011-11-12T16:41:51.726-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-12T16:41:51.726-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL SERVER" /><title>SQL SERVER - Consulta hardcodeada que devuelve el ID de la fila insertada</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/5SbaAKsu68X4wFo6pj6gUjutun4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5SbaAKsu68X4wFo6pj6gUjutun4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/5SbaAKsu68X4wFo6pj6gUjutun4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/5SbaAKsu68X4wFo6pj6gUjutun4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-RZe8uXT7erM/Tr7edaeU1HI/AAAAAAAABN8/7nmbLEYoTZQ/s1600/sql_hardcodear.png" imageanchor="1" style="clear: left; float: left;"&gt;&lt;img border="0" src="http://2.bp.blogspot.com/-RZe8uXT7erM/Tr7edaeU1HI/AAAAAAAABN8/7nmbLEYoTZQ/s1600/sql_hardcodear.png" /&gt;&lt;/a&gt;&lt;/div&gt;
Esta pregunta se hizo en los foros, y algunos decían que no era posible recuperar el ID de la fila insertada, esto es un error porque sí se puede recuperar ese valor.&amp;nbsp;Por ese motivo surgió este post.&lt;br /&gt;
&lt;br /&gt;
Algunos dirán: "para qué hardcodeas la consulta SQL? simplemente haz un procedimiento almacenado y asunto solucionado".&lt;br /&gt;
La verdad que a veces necesitamos este tipo de soluciones que no siempre parecen ser las óptimas, no en vano tenemos la opción de hardcodear &lt;img alt="Guiño" class="wlEmoticon wlEmoticon-winkingsmile" src="http://lh3.ggpht.com/-c8_qYt87XvM/Tr7cOA4EDFI/AAAAAAAABN0/IgqakqyY13g/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /&gt;&lt;br /&gt;
&lt;br /&gt;
Además, una consulta hardcodeada también puede evitar las inyecciones SQL si pasas la información mediante parámetros.&lt;br /&gt;
&lt;br /&gt;
Ahora sí, vamos al ejemplo.&lt;br /&gt;
1.- Abrimos el SQL SERVER Y creamos una tabla llamada cmon_group, con este script:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;CREATE TABLE &lt;/span&gt;[dbo].[cmon_group]
(
    [groupid] [int] &lt;span style="color: blue;"&gt;IDENTITY&lt;/span&gt;(1,1) &lt;span style="color: blue;"&gt;NOT NULL&lt;/span&gt;,
    [title] [varchar](150) &lt;span style="color: blue;"&gt;NULL&lt;/span&gt;,
    [description] [varchar](500) &lt;span style="color: blue;"&gt;NULL&lt;/span&gt;,
    [icon] [varchar](50) &lt;span style="color: blue;"&gt;NULL&lt;/span&gt;,
    &lt;span style="color: blue;"&gt;CONSTRAINT &lt;/span&gt;[pk_cmon_group] &lt;span style="color: blue;"&gt;PRIMARY KEY CLUSTERED &lt;/span&gt;( [groupid] &lt;span style="color: blue;"&gt;ASC &lt;/span&gt;)
)&lt;/pre&gt;
2.- Abrimos Visual Studio y creamos un nuevo proyecto de tipo ASP.NET con Visual Basic, agregamos una páginas aspx y ponemos este código: &lt;br /&gt;
&lt;pre class="code"&gt;    &lt;span style="color: blue;"&gt;Protected Sub &lt;/span&gt;Page_Load(&lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;sender &lt;span style="color: blue;"&gt;As Object&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;e &lt;span style="color: blue;"&gt;As &lt;/span&gt;System.&lt;span style="color: #2b91af;"&gt;EventArgs&lt;/span&gt;) &lt;span style="color: blue;"&gt;Handles Me&lt;/span&gt;.Load
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;Title &lt;span style="color: blue;"&gt;As String &lt;/span&gt;= &lt;span style="color: #a31515;"&gt;"title"
        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;description &lt;span style="color: blue;"&gt;As String &lt;/span&gt;= &lt;span style="color: #a31515;"&gt;"description"
        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;icon &lt;span style="color: blue;"&gt;As String &lt;/span&gt;= &lt;span style="color: #a31515;"&gt;"icon"

        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;connectionString &lt;span style="color: blue;"&gt;As New &lt;/span&gt;SqlClient.&lt;span style="color: #2b91af;"&gt;SqlConnection&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"LA_CADENA_DE_CONEXION_VA_AQUI"&lt;/span&gt;)
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;t_sql &lt;span style="color: blue;"&gt;As String &lt;/span&gt;= &lt;span style="color: #a31515;"&gt;"INSERT INTO [cmon_group](Title,description,icon) "
        &lt;/span&gt;t_sql &amp;amp;= &lt;span style="color: #a31515;"&gt;"VALUES(@title,@description,@icon) "
        &lt;/span&gt;t_sql &amp;amp;= &lt;span style="color: #a31515;"&gt;"SET @groupid = SCOPE_IDENTITY()"

        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;command &lt;span style="color: blue;"&gt;As New &lt;/span&gt;SqlClient.&lt;span style="color: #2b91af;"&gt;SqlCommand&lt;/span&gt;(t_sql, connectionString)
        command.CommandType = &lt;span style="color: #2b91af;"&gt;CommandType&lt;/span&gt;.Text

        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;p_groupid &lt;span style="color: blue;"&gt;As New &lt;/span&gt;SqlClient.&lt;span style="color: #2b91af;"&gt;SqlParameter&lt;/span&gt;(&lt;span style="color: #a31515;"&gt;"@groupid"&lt;/span&gt;, &lt;span style="color: #2b91af;"&gt;SqlDbType&lt;/span&gt;.Int)
        p_groupid.Direction = &lt;span style="color: #2b91af;"&gt;ParameterDirection&lt;/span&gt;.Output
        command.Parameters.Add(p_groupid)

        command.Parameters.AddWithValue(&lt;span style="color: #a31515;"&gt;"@title"&lt;/span&gt;, Title)
        command.Parameters.AddWithValue(&lt;span style="color: #a31515;"&gt;"@description"&lt;/span&gt;, description)
        command.Parameters.AddWithValue(&lt;span style="color: #a31515;"&gt;"@icon"&lt;/span&gt;, icon)

        command.Connection.Open()
        command.ExecuteNonQuery()
        command.Connection.Close()

        &lt;span style="color: green;"&gt;'here is the return value
        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;groupid &lt;span style="color: blue;"&gt;As Integer &lt;/span&gt;= &lt;span style="color: blue;"&gt;CInt&lt;/span&gt;(p_groupid.Value)

    &lt;span style="color: blue;"&gt;End Sub&lt;/span&gt;&lt;/pre&gt;
Así de simple, aquí la parte interesante está en las líneas donde añado un parámetro llamado groupid, el cual es de tipo OUTPUT… lo cual me permite obtener el valor de retorno de la clave primaria, la cual se almacena en SCOPE_IDENTITY().&lt;br /&gt;
&lt;br /&gt;
Es todo, espero que les sea de utilidad &lt;img alt="Guiño" class="wlEmoticon wlEmoticon-winkingsmile" src="http://lh3.ggpht.com/-c8_qYt87XvM/Tr7cOA4EDFI/AAAAAAAABN0/IgqakqyY13g/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-8836998119992091729?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/hdbaArQuJT8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/8836998119992091729/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=8836998119992091729&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/8836998119992091729?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/8836998119992091729?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/hdbaArQuJT8/sql-server-consulta-hardcodeada-que.html" title="SQL SERVER - Consulta hardcodeada que devuelve el ID de la fila insertada" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-RZe8uXT7erM/Tr7edaeU1HI/AAAAAAAABN8/7nmbLEYoTZQ/s72-c/sql_hardcodear.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/11/sql-server-consulta-hardcodeada-que.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AGR3szeip7ImA9WhRSF0g.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-5421903086994467296</id><published>2011-11-02T14:00:00.000-05:00</published><updated>2011-11-19T20:15:26.582-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-19T20:15:26.582-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>ASP.NET - Creando un cliente de correo POP3 en pagina aspx</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/L3ed2Qvf7aQftG6yuMVIEdWeE7k/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L3ed2Qvf7aQftG6yuMVIEdWeE7k/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/L3ed2Qvf7aQftG6yuMVIEdWeE7k/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/L3ed2Qvf7aQftG6yuMVIEdWeE7k/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://lh6.ggpht.com/-4iUYh4lNQfk/TrF_73PBopI/AAAAAAAABNM/z-3wFLXQZ5U/s1600-h/aspnet_pop3%25255B3%25255D.png"&gt;&lt;img align="left" alt="aspnet_pop3" border="0" height="315" src="http://lh5.ggpht.com/-mJCK0Cu75bg/TrF_83DcJYI/AAAAAAAABNU/80vKpw-5brc/aspnet_pop3_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; float: left; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="aspnet_pop3" width="212" /&gt;&lt;/a&gt;Por si alguien está interesado en crear un cliente de correo Pop3 desde ASP.NET, vamos a ver cómo lo desarrollamos.&lt;br /&gt;
Antes que nada debo decirles que he probado muchos componentes free del mercado y la verdad que no me han gustado, luego he conocido Lumisoft.net, el cual me ha encantado y es con quien actualmente trabajo.&lt;br /&gt;
Lumisoft tiene un componente .NET que me permite gestionar de manera eficiente mis correos desde una página aspx, este componente lo pueden hallar en &lt;a href="http://www.lumisoft.ee/lsWWW/ENG/index_eng.aspx?type=main"&gt;http://www.lumisoft.ee/lsWWW/ENG/index_eng.aspx?type=main&lt;/a&gt;, pero al final de este post estoy adjuntando un archivo adjunto con un proyecto completo de muestra, así que no se preocupen por hallar el componente.&lt;br /&gt;
Los datos que necesito para conectarme a mi correo son:&lt;br /&gt;
1.- Servidor de correo&lt;br /&gt;
2.- Puerto a usar&lt;br /&gt;
3.- Cuenta de correo&lt;br /&gt;
4.- Contraseña&lt;br /&gt;
Entonces, vamos a crear una pequeña aplicación que me permita ingresar esos datos y luego de una autenticación exitosa, vamos a recuperar los emails en una colección genérica para luego mostrarlos en un control repeater.&lt;br /&gt;
Código aspx:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;html &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://www.w3.org/1999/xhtml"&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;head &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Cliente de correo POP3 en pagina aspx&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;link &lt;/span&gt;&lt;span style="color: red;"&gt;href&lt;/span&gt;&lt;span style="color: blue;"&gt;="StyleSheet1.css" &lt;/span&gt;&lt;span style="color: red;"&gt;rel&lt;/span&gt;&lt;span style="color: blue;"&gt;="stylesheet" &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="text/css" /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;head&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;form &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="form1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;table &lt;/span&gt;&lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: red;"&gt;width&lt;/span&gt;&lt;span style="color: blue;"&gt;: 200px; &lt;/span&gt;&lt;span style="color: red;"&gt;margin&lt;/span&gt;&lt;span style="color: blue;"&gt;: auto auto"&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &lt;/span&gt;Cliente POP3
                &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td &lt;/span&gt;&lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: red;"&gt;white-space&lt;/span&gt;&lt;span style="color: blue;"&gt;: nowrap"&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Label1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="Servidor de correo:"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TextBox &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="txtEmailServer" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;TabIndex&lt;/span&gt;&lt;span style="color: blue;"&gt;="1"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Label2" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="Puerto:"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TextBox &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="txtPort" &lt;/span&gt;&lt;span style="color: red;"&gt;Width&lt;/span&gt;&lt;span style="color: blue;"&gt;="50px" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;TabIndex&lt;/span&gt;&lt;span style="color: blue;"&gt;="2"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Label3" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="Correo:"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TextBox &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="txtEmail" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;TabIndex&lt;/span&gt;&lt;span style="color: blue;"&gt;="3"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Label4" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="Contraseña:"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TextBox &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="txtPassword" &lt;/span&gt;&lt;span style="color: red;"&gt;TabIndex&lt;/span&gt;&lt;span style="color: blue;"&gt;="4" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;TextMode&lt;/span&gt;&lt;span style="color: blue;"&gt;="Password"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;TextBox&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td &lt;/span&gt;&lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: red;"&gt;vertical-align&lt;/span&gt;&lt;span style="color: blue;"&gt;: bottom;"&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;ImageButton &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="imgLogin" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;="~/images/go.png" /&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;table&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;div &lt;/span&gt;&lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: red;"&gt;margin-top&lt;/span&gt;&lt;span style="color: blue;"&gt;: 20px"&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Repeater &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="rptPOP3" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;HeaderTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;table &lt;/span&gt;&lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: red;"&gt;width&lt;/span&gt;&lt;span style="color: blue;"&gt;: 100%"&amp;gt;
                        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                                &lt;/span&gt;UID
                            &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                                &lt;/span&gt;Remite
                            &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                                &lt;/span&gt;Asunto
                            &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                                &lt;/span&gt;Adjuntos
                            &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;                                
                            &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                        &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;HeaderTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td &lt;/span&gt;&lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: red;"&gt;width&lt;/span&gt;&lt;span style="color: blue;"&gt;: 30px;"&amp;gt;
                            &lt;/span&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue;"&gt;# &lt;/span&gt;Eval(&lt;span style="color: #a31515;"&gt;"uid"&lt;/span&gt;).ToString().Remove(1,35) &lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial;"&gt;%&amp;gt;&lt;/span&gt;                        &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                            &lt;/span&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue;"&gt;# &lt;/span&gt;Eval(&lt;span style="color: #a31515;"&gt;"from"&lt;/span&gt;)&lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial;"&gt;%&amp;gt;&lt;/span&gt;                        &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                            &lt;/span&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue;"&gt;# &lt;/span&gt;Eval(&lt;span style="color: #a31515;"&gt;"subject"&lt;/span&gt;)&lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial;"&gt;%&amp;gt;&lt;/span&gt;                            &lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;br &lt;/span&gt;&lt;span style="color: blue;"&gt;/&amp;gt;
                            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;span &lt;/span&gt;&lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: red;"&gt;color&lt;/span&gt;&lt;span style="color: blue;"&gt;: gray"&amp;gt;&lt;/span&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue;"&gt;# &lt;/span&gt;Eval(&lt;span style="color: #a31515;"&gt;"body"&lt;/span&gt;)&lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;span&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                        &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td &lt;/span&gt;&lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: red;"&gt;width&lt;/span&gt;&lt;span style="color: blue;"&gt;: 5%; &lt;/span&gt;&lt;span style="color: red;"&gt;text-align&lt;/span&gt;&lt;span style="color: blue;"&gt;: center"&amp;gt;
                            &lt;/span&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue;"&gt;# &lt;/span&gt;HaveAttachments(Eval(&lt;span style="color: #a31515;"&gt;"Attachments"&lt;/span&gt;))&lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial;"&gt;%&amp;gt;&lt;/span&gt;                        &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;td &lt;/span&gt;&lt;span style="color: red;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: red;"&gt;width&lt;/span&gt;&lt;span style="color: blue;"&gt;: 5%"&amp;gt;
                            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;ImageButton &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="imgDelete" &lt;/span&gt;&lt;span style="color: red;"&gt;CommandName&lt;/span&gt;&lt;span style="color: blue;"&gt;="Delete" 
                                &lt;/span&gt;&lt;span style="color: red;"&gt;CommandArgument&lt;/span&gt;&lt;span style="color: blue;"&gt;='&lt;/span&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: blue;"&gt;# &lt;/span&gt;Eval("uid") &lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: blue;"&gt;'
                                &lt;/span&gt;&lt;span style="color: red;"&gt;OnClientClick&lt;/span&gt;&lt;span style="color: blue;"&gt;="if(!confirm('Está seguro que desea eliminar el correo?')) return false;"
                                &lt;/span&gt;&lt;span style="color: red;"&gt;ImageUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;="images/delete.png" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" /&amp;gt;
                        &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;ItemTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;FooterTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;table&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;FooterTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Repeater&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;

    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;form&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;html&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
Código VB.NET:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;Imports &lt;/span&gt;LumiSoft.Net.POP3.Client
&lt;span style="color: blue;"&gt;Imports &lt;/span&gt;LumiSoft.Net.Mail

&lt;span style="color: blue;"&gt;Public Class &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;_Default
    &lt;/span&gt;&lt;span style="color: blue;"&gt;Inherits &lt;/span&gt;System.Web.UI.&lt;span style="color: #2b91af;"&gt;Page

    &lt;/span&gt;&lt;span style="color: blue;"&gt;Protected Sub &lt;/span&gt;Page_Load(&lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;sender &lt;span style="color: blue;"&gt;As Object&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;e &lt;span style="color: blue;"&gt;As &lt;/span&gt;System.&lt;span style="color: #2b91af;"&gt;EventArgs&lt;/span&gt;) &lt;span style="color: blue;"&gt;Handles Me&lt;/span&gt;.Load

    &lt;span style="color: blue;"&gt;End Sub

    Protected Sub &lt;/span&gt;imgLogin_Click(&lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;sender &lt;span style="color: blue;"&gt;As Object&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;e &lt;span style="color: blue;"&gt;As &lt;/span&gt;System.Web.UI.&lt;span style="color: #2b91af;"&gt;ImageClickEventArgs&lt;/span&gt;) &lt;span style="color: blue;"&gt;Handles &lt;/span&gt;imgLogin.Click

        GetEmails()

    &lt;span style="color: blue;"&gt;End Sub

    Private Sub &lt;/span&gt;GetEmails()
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;pop3 &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;POP3_Client

        &lt;/span&gt;&lt;span style="color: green;"&gt;'Conectándose al servidor de correo
        &lt;/span&gt;pop3.Connect(txtEmailServer.Text, txtPort.Text, &lt;span style="color: blue;"&gt;False&lt;/span&gt;)

        &lt;span style="color: green;"&gt;'Autenticando al usuario
        &lt;/span&gt;pop3.Authenticate(txtEmail.Text, txtPassword.Text, &lt;span style="color: blue;"&gt;True&lt;/span&gt;)

        &lt;span style="color: green;"&gt;'creo una colección para guardar los correos
        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;ItemEmails &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;(&lt;span style="color: blue;"&gt;Of &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ItemEmail&lt;/span&gt;)
        &lt;span style="color: blue;"&gt;Try

            For Each &lt;/span&gt;message &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;POP3_ClientMessage &lt;/span&gt;&lt;span style="color: blue;"&gt;In &lt;/span&gt;pop3.Messages
                &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;mime &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Mail_Message &lt;/span&gt;= &lt;span style="color: #2b91af;"&gt;Mail_Message&lt;/span&gt;.ParseFromByte(message.MessageToByte())

                &lt;span style="color: blue;"&gt;If &lt;/span&gt;mime.&lt;span style="color: blue;"&gt;From IsNot Nothing Then
                    Dim &lt;/span&gt;mail &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ItemEmail&lt;/span&gt;()

                    &lt;span style="color: green;"&gt;'Guardo los datos del email
                    &lt;/span&gt;mail.Subject = mime.Subject
                    mail.UID = message.UID
                    mail.From = mime.From(0).Address
                    mail.Body = mime.BodyText

                    &lt;span style="color: green;"&gt;'reviso si hay archivos adjuntos
                    &lt;/span&gt;&lt;span style="color: blue;"&gt;If &lt;/span&gt;(mime.Attachments.Length() &amp;gt; 0) &lt;span style="color: blue;"&gt;Then

                        &lt;/span&gt;&lt;span style="color: green;"&gt;'Guardo los archivos adjuntos en una carpeta de mi aplicación
                        &lt;/span&gt;&lt;span style="color: blue;"&gt;For &lt;/span&gt;XAttach &lt;span style="color: blue;"&gt;As Integer &lt;/span&gt;= 0 &lt;span style="color: blue;"&gt;To &lt;/span&gt;mime.Attachments.Length - 1
                            &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;guid &lt;span style="color: blue;"&gt;As String &lt;/span&gt;= &lt;span style="color: #2b91af;"&gt;Utils&lt;/span&gt;.GenerateUniqueGUID()
                            &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;FileName &lt;span style="color: blue;"&gt;As String &lt;/span&gt;= mime.Attachments(XAttach).ContentDisposition.Param_FileName
                            IO.&lt;span style="color: #2b91af;"&gt;File&lt;/span&gt;.WriteAllBytes(&lt;span style="color: #2b91af;"&gt;Utils&lt;/span&gt;.GetApplicationPhysicalPath() &amp;amp; &lt;span style="color: #a31515;"&gt;"Attachments\" &lt;/span&gt;&amp;amp; _
                            guid, &lt;span style="color: blue;"&gt;DirectCast&lt;/span&gt;(mime.Attachments(XAttach).Body, LumiSoft.Net.MIME.&lt;span style="color: #2b91af;"&gt;MIME_b_SinglepartBase&lt;/span&gt;).Data)

                            mail.AddAttachment(&lt;span style="color: blue;"&gt;New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ListItem&lt;/span&gt;(FileName, guid))
                        &lt;span style="color: blue;"&gt;Next

                    End If

                    &lt;/span&gt;ItemEmails.Add(mail)

                &lt;span style="color: blue;"&gt;End If

            Next
        Catch &lt;/span&gt;x &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Exception
            &lt;/span&gt;&lt;span style="color: green;"&gt;'x.Message
        &lt;/span&gt;&lt;span style="color: blue;"&gt;Finally
            &lt;/span&gt;pop3.Dispose()
        &lt;span style="color: blue;"&gt;End Try

        &lt;/span&gt;rptPOP3.DataSource = ItemEmails
        rptPOP3.DataBind()

        &lt;span style="color: blue;"&gt;For Each &lt;/span&gt;email &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ItemEmail &lt;/span&gt;&lt;span style="color: blue;"&gt;In &lt;/span&gt;ItemEmails

            &lt;span style="color: green;"&gt;'desde aquí puedes insertar los datos en tu base de datos
            'email.Subject
            'email.Body

            'obtienes los archivos
            &lt;/span&gt;&lt;span style="color: blue;"&gt;If Not &lt;/span&gt;IsNothing(email.Attachments) &lt;span style="color: blue;"&gt;Then
                For Each &lt;/span&gt;att &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ListItem &lt;/span&gt;&lt;span style="color: blue;"&gt;In &lt;/span&gt;email.Attachments
                    &lt;span style="color: green;"&gt;'att.Text, 
                    'Attribute.value
                &lt;/span&gt;&lt;span style="color: blue;"&gt;Next
            End If

        Next

    End Sub

    Protected Function &lt;/span&gt;HaveAttachments(&lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;obj &lt;span style="color: blue;"&gt;As Object&lt;/span&gt;) &lt;span style="color: blue;"&gt;As String
        If &lt;/span&gt;IsNothing(obj) &lt;span style="color: blue;"&gt;Then
            Return String&lt;/span&gt;.Empty
        &lt;span style="color: blue;"&gt;Else
            Return &lt;/span&gt;&lt;span style="color: #a31515;"&gt;"&amp;lt;img src='images/attachment.png' /&amp;gt;"
        &lt;/span&gt;&lt;span style="color: blue;"&gt;End If
    End Function

    Protected Sub &lt;/span&gt;rptPOP3_ItemCommand(&lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;source &lt;span style="color: blue;"&gt;As Object&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;e &lt;span style="color: blue;"&gt;As &lt;/span&gt;System.Web.UI.WebControls.&lt;span style="color: #2b91af;"&gt;RepeaterCommandEventArgs&lt;/span&gt;) &lt;span style="color: blue;"&gt;Handles &lt;/span&gt;rptPOP3.ItemCommand

        &lt;span style="color: blue;"&gt;If &lt;/span&gt;e.CommandName.ToString = &lt;span style="color: #a31515;"&gt;"Delete" &lt;/span&gt;&lt;span style="color: blue;"&gt;And &lt;/span&gt;e.CommandArgument.ToString &amp;lt;&amp;gt; &lt;span style="color: #a31515;"&gt;"" &lt;/span&gt;&lt;span style="color: blue;"&gt;Then

            Dim &lt;/span&gt;uid &lt;span style="color: blue;"&gt;As String &lt;/span&gt;= e.CommandArgument.ToString
            &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;pop3 &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;POP3_Client

            &lt;/span&gt;&lt;span style="color: green;"&gt;'Conectándose al servidor de correo
            &lt;/span&gt;pop3.Connect(txtEmailServer.Text, txtPort.Text, &lt;span style="color: blue;"&gt;False&lt;/span&gt;)

            &lt;span style="color: green;"&gt;'Autenticando al usuario
            &lt;/span&gt;pop3.Authenticate(txtEmail.Text, txtPassword.Text, &lt;span style="color: blue;"&gt;True&lt;/span&gt;)

            &lt;span style="color: green;"&gt;'Elimino el correo
            &lt;/span&gt;pop3.Messages.Item(uid).MarkForDeletion()
            pop3.Dispose()

            &lt;span style="color: green;"&gt;'recupero nuevamente la lista de correos
            &lt;/span&gt;GetEmails()

        &lt;span style="color: blue;"&gt;End If

    End Sub

End Class&lt;/span&gt;&lt;/pre&gt;
Luego de ingresar los datos, presionen el botón VER, para que se cargue el repeater… verán algo como esta imagen:&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-FdVRjRRPhm8/TrF__1foYkI/AAAAAAAABNc/_cswgBakXek/s1600-h/aspnet_pop3_2%25255B3%25255D.png"&gt;&lt;img alt="aspnet_pop3_2" border="0" height="257" src="http://lh4.ggpht.com/-DvR_vNXbJIU/TrGABffJYJI/AAAAAAAABNk/Cg6u9xdmIlY/aspnet_pop3_2_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="aspnet_pop3_2" width="715" /&gt;&lt;/a&gt;&lt;br /&gt;
Analicen el código, es muy simple… inclusive estoy verificando si cada correo tiene archivos adjuntos… y estoy descargando los archivos adjuntos en una carpeta llamada attachments. No se olviden que si desean descargar los archivos en una carpeta, deben darle permiso de escritura al usuario NETWORK SERVICE en dicha carpeta.&lt;br /&gt;
&lt;br /&gt;
Espero que les sea de utilidad &lt;img alt="Guiño" class="wlEmoticon wlEmoticon-winkingsmile" src="http://lh6.ggpht.com/-ugnqVX1L16M/TrGABjnGePI/AAAAAAAABNs/qNKoOf_fqHc/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /&gt;&lt;br /&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://skydrive.live.com/embedicon.aspx/neuronasoft/POP3.zip?cid=f5cad8c1ed1c13f9&amp;amp;sc=documents" style="background-color: #fcfcfc; height: 115px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 98px;" title="Preview"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-5421903086994467296?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/I9ObtGqggZw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/5421903086994467296/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=5421903086994467296&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/5421903086994467296?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/5421903086994467296?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/I9ObtGqggZw/aspnet-creando-un-cliente-de-correo.html" title="ASP.NET - Creando un cliente de correo POP3 en pagina aspx" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-mJCK0Cu75bg/TrF_83DcJYI/AAAAAAAABNU/80vKpw-5brc/s72-c/aspnet_pop3_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/11/aspnet-creando-un-cliente-de-correo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMNRH4zfCp7ImA9WhdaF0k.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-2340803857958626271</id><published>2011-10-27T15:07:00.000-05:00</published><updated>2011-10-27T15:14:55.084-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-27T15:14:55.084-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>ASP.NET - Mostrando frases aleatoriamente cada x segundos</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Hl82uGxXfcTC4pn6Qc9qmzsrcOs/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Hl82uGxXfcTC4pn6Qc9qmzsrcOs/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Hl82uGxXfcTC4pn6Qc9qmzsrcOs/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Hl82uGxXfcTC4pn6Qc9qmzsrcOs/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://lh4.ggpht.com/-ARw3hXP9Cgk/Tqm4OcYR3ZI/AAAAAAAABMg/7KD3afWNAUw/s1600-h/random_aspnet%25255B3%25255D.png"&gt;&lt;img align="left" alt="random_aspnet" border="0" height="432" src="http://lh4.ggpht.com/-hc_lVtCAkd4/Tqm4PMLqQwI/AAAAAAAABMo/7vXRGQfpoDs/random_aspnet_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; float: left; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="random_aspnet" width="408" /&gt;&lt;/a&gt;En posts anteriores ya habíamos escrito sobre:&lt;br /&gt;
1.- &lt;a href="http://www.neuronasoft.net/2009/02/aspnet-refescado-automatico-de.html"&gt;cómo actualizar una sección de página&lt;/a&gt;.&lt;br /&gt;
2.- &lt;a href="http://www.neuronasoft.net/2009/02/aspnet-refrescado-de-multiples.html"&gt;Refrescar múltiples secciones de página&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Y es que muchos sitios web necesitan esta funcionalidad de actualización sin refrescar la página entera.&lt;br /&gt;
&lt;br /&gt;
Ahora hablemos sobre cómo hacer una funcionalidad que me permita mostrar una frase aleatoria cada x segundos, pero también podría servirte para mostrar imágenes, &amp;nbsp;etc.&lt;br /&gt;
&lt;br /&gt;
Hay muchas formas de lograr esto. Nosotros vamos a ponernos en el caso de que recuperamos un conjunto de frases de la base de datos y por eso hacemos uso de tecnología del lado del servidor.&lt;br /&gt;
&lt;br /&gt;
Haremos un ejemplo muy simple.&lt;br /&gt;
En el siguiente ejemplo añadimos un ScriptManager a la página aspx, luego un control Timer y un UpdatePanel… este UpdatePanel tendrá un label, el cual visualizará las frases elegidas al azar.&lt;br /&gt;
Veamos:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;html &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://www.w3.org/1999/xhtml"&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;head &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="Head1"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;style &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="text/css"&amp;gt;
        &lt;/span&gt;&lt;span style="color: maroon;"&gt;.box
        &lt;/span&gt;{
            &lt;span style="color: red;"&gt;padding&lt;/span&gt;: &lt;span style="color: blue;"&gt;20px&lt;/span&gt;;
            &lt;span style="color: red;"&gt;border&lt;/span&gt;: &lt;span style="color: blue;"&gt;Dotted 2px orange&lt;/span&gt;;
            &lt;span style="color: red;"&gt;background-color&lt;/span&gt;: &lt;span style="color: blue;"&gt;yellowgreen&lt;/span&gt;;
            &lt;span style="color: red;"&gt;font&lt;/span&gt;: &lt;span style="color: blue;"&gt;16px tahoma&lt;/span&gt;;
        }
    &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Mostrando frases aleatorias con ASP.NET&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;head&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;form &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="form1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;ScriptManager &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="ScriptManager1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;ScriptManager&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Timer &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Timer1" &lt;/span&gt;&lt;span style="color: red;"&gt;Interval&lt;/span&gt;&lt;span style="color: blue;"&gt;="5000" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;OnTick&lt;/span&gt;&lt;span style="color: blue;"&gt;="Timer1_Tick" /&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;UpdatePanel &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="up1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Triggers&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;AsyncPostBackTrigger &lt;/span&gt;&lt;span style="color: red;"&gt;ControlID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Timer1" /&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Triggers&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;div &lt;/span&gt;&lt;span style="color: red;"&gt;class&lt;/span&gt;&lt;span style="color: blue;"&gt;="box"&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Label1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" /&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;UpdatePanel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;form&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;html&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;h3&gt;






C Sharp:&lt;/h3&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;protected void &lt;/span&gt;Page_Load(&lt;span style="color: blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af;"&gt;EventArgs &lt;/span&gt;e)
{
    &lt;span style="color: blue;"&gt;if &lt;/span&gt;(Page.IsPostBack) &lt;span style="color: blue;"&gt;return&lt;/span&gt;;

    Quote();
}

&lt;span style="color: blue;"&gt;private void &lt;/span&gt;Quote()
{
    &lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt; quotes = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&amp;gt;();
    quotes.Add(&lt;span style="color: #a31515;"&gt;"Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas."&lt;/span&gt;);
    quotes.Add(&lt;span style="color: #a31515;"&gt;"Si buscas resultados distintos, no hagas siempre lo mismo."&lt;/span&gt;);
    quotes.Add(&lt;span style="color: #a31515;"&gt;"El mundo no está en peligro por las malas personas sino por aquellas que permiten la maldad."&lt;/span&gt;);
    quotes.Add(&lt;span style="color: #a31515;"&gt;"Cada día sabemos más y entendemos menos."&lt;/span&gt;);
    quotes.Add(&lt;span style="color: #a31515;"&gt;"En los momentos de crisis, sólo la imaginación es más importante que el conocimiento."&lt;/span&gt;);
    
    &lt;span style="color: #2b91af;"&gt;Random &lt;/span&gt;rnd = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Random&lt;/span&gt;();
    Label1.Text = quotes[rnd.Next(quotes.Count)];
}

&lt;span style="color: blue;"&gt;protected void &lt;/span&gt;Timer1_Tick(&lt;span style="color: blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af;"&gt;EventArgs &lt;/span&gt;e)
{
    Quote();
}&lt;/pre&gt;
Para este caso, no he recuperado de la base de datos… sino que hay que suponer que así fue, Yo sólo estoy guardando las frases en una lista de Strings.&lt;br /&gt;
&lt;br /&gt;
Luego, con la clase Random(), puedo elegir una frase aleatoria.&lt;br /&gt;
&lt;br /&gt;
Es todo, espero que les sea de utilidad &lt;img alt="Guiño" class="wlEmoticon wlEmoticon-winkingsmile" src="http://lh6.ggpht.com/-gSzJQiNrnSM/Tqm4PVN3gKI/AAAAAAAABMw/sIz2-ABpBGw/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-2340803857958626271?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/6qwi74gqPJ4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/2340803857958626271/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=2340803857958626271&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/2340803857958626271?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/2340803857958626271?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/6qwi74gqPJ4/aspnet-mostrando-frases-aleatoriamente.html" title="ASP.NET - Mostrando frases aleatoriamente cada x segundos" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-hc_lVtCAkd4/Tqm4PMLqQwI/AAAAAAAABMo/7vXRGQfpoDs/s72-c/random_aspnet_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/10/aspnet-mostrando-frases-aleatoriamente.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D04FRHc-fyp7ImA9WhdaF0k.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-8272119932515972287</id><published>2011-10-21T12:57:00.000-05:00</published><updated>2011-10-27T15:05:15.957-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-27T15:05:15.957-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>ASP.NET - Visualizar contenido XML en pagina aspx</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3codYvDHoHgt3JoSMBCKWl6mKAk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3codYvDHoHgt3JoSMBCKWl6mKAk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3codYvDHoHgt3JoSMBCKWl6mKAk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3codYvDHoHgt3JoSMBCKWl6mKAk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://lh5.ggpht.com/-z9dPDCker8E/TqGyEFj34ZI/AAAAAAAABME/i8G1wQMuPfw/s1600-h/xmL_with_xslt%25255B3%25255D.png"&gt;&lt;img align="left" alt="xmL_with_xslt" border="0" height="439" src="http://lh3.ggpht.com/-ZrJ_PwtgSSo/TqGyFHqZtyI/AAAAAAAABMM/gfGXSuGvDtY/xmL_with_xslt_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; float: left; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="xmL_with_xslt" width="466" /&gt;&lt;/a&gt;He visto que aún existe mucho desconocimiento y miedo al trabajar con documentos XML. &lt;br /&gt;
En realidad no debería ser así, la tecnología está bastante madura en cuanto a la manipulación de contenidos XML, y es mucho más fácil aún si haces uso de una tecnología como .NET.&lt;br /&gt;
En este post vamos a mostrar contenidos XML en una página aspx, vamos a demostrar lo fácil que es aplicar una hoja de estilos XSLT a un documento XML.&lt;br /&gt;
Un documento XML guarda datos y un documento XSLT guarda una plantilla que permitirá darle una presentación más amigable a un documento XML. Esta hoja XSLT debe conocer la estructura del archivo XML para poder aplicar sus estilos.&lt;br /&gt;
No es necesario usar ASP.NET para mostrar un documento XML formateado via XSLT en un browser… esto se puede hacer de una manera muy simple:&lt;br /&gt;
&lt;u&gt;Sample1.xml&lt;/u&gt;:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515;"&gt;xml &lt;/span&gt;&lt;span style="color: red;"&gt;version&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1.0&lt;/span&gt;" &lt;span style="color: red;"&gt;encoding&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;iso-8859-1&lt;/span&gt;" &lt;span style="color: blue;"&gt;?&amp;gt;
&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515;"&gt;xml-stylesheet &lt;/span&gt;&lt;span style="color: grey;"&gt;type="text/xsl" href="Sample1.xslt"&lt;/span&gt;&lt;span style="color: blue;"&gt;?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Usuarios&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Usuario &lt;/span&gt;&lt;span style="color: red;"&gt;imagen&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;images/1.png&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;11&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Nombre&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Juan Cotrina&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Nombre&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Email&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Juan1@hotmail.com&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Email&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Usuario&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Usuarios&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;u&gt;Sample1.xslt&lt;/u&gt;:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515;"&gt;xml &lt;/span&gt;&lt;span style="color: red;"&gt;version&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1.0&lt;/span&gt;" &lt;span style="color: red;"&gt;encoding&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;iso-8859-1&lt;/span&gt;" &lt;span style="color: blue;"&gt;?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:stylesheet &lt;/span&gt;&lt;span style="color: red;"&gt;version&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1.0&lt;/span&gt;" &lt;span style="color: red;"&gt;xmlns:xsl&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;http://www.w3.org/1999/XSL/Transform&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:template &lt;/span&gt;&lt;span style="color: red;"&gt;match&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Usuarios&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;table&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;ID&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Nombre&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Email&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:value-of &lt;/span&gt;&lt;span style="color: red;"&gt;select&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Usuario/id&lt;/span&gt;" &lt;span style="color: blue;"&gt;/&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:value-of &lt;/span&gt;&lt;span style="color: red;"&gt;select&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Usuario/Nombre&lt;/span&gt;" &lt;span style="color: blue;"&gt;/&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:value-of &lt;/span&gt;&lt;span style="color: red;"&gt;select&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Usuario/Email&lt;/span&gt;" &lt;span style="color: blue;"&gt;/&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;table&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:template&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:stylesheet&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
Como ven, el archivo XML ya está haciendo una llamada a la hoja de estilos XSLT… entonces, si tú haces click derecho sobre el archivo Sample1.xml y eliges Ver en el browser… el archivo se visualizará como si fuera un archivo html cualquiera. Aunque tal vez no se vea bien.&lt;br /&gt;
&lt;br /&gt;
No creo que necesite mucha explicación este ejemplo, sólo que la hoja de estilos xslt tiene una plantilla html combinada con las etiquetas Usuarios/Usuario/… que son precisamente las etiquetas que contiene el archivo xml, y esta es la forma de relacionar los datos del archivo XML con la hoja de estilos XSLT.&lt;br /&gt;
&lt;br /&gt;
Hasta aquí no he usado .NET ni ASP.NET, parece que no fuera necesario… pero sí es necesario. Por qué?&lt;br /&gt;
&lt;br /&gt;
El problema es que la mayoría de browsers no hacen la transformación como debieran y no muestran el XML combinado con el XSLT para dar paso a un contenido HTML… es por eso que hay que hacer uso de ASP.NET, el cual se toma el trabajo de hacer esa conversión y mostrar de manera correcta el contenido transformado en el browser.&lt;br /&gt;
&lt;br /&gt;
Ahora vamos a mostrar un ejemplo más completo, un archivo xml con más contenido, una hoja de estilos mejor formateada… y ya no mostraremos directamente el archivo xml en el browser… sino a través de una página aspx, y haciendo uso de un control ASP.NET llamado asp:Xml, el cual muchas veces ha pasado desapercibido.&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;Sample2.xml&lt;/u&gt;:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515;"&gt;xml &lt;/span&gt;&lt;span style="color: red;"&gt;version&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1.0&lt;/span&gt;" &lt;span style="color: red;"&gt;encoding&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;iso-8859-1&lt;/span&gt;" &lt;span style="color: blue;"&gt;?&amp;gt;
&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515;"&gt;xml-stylesheet &lt;/span&gt;&lt;span style="color: grey;"&gt;type="text/xsl" href="sample2.xslt"&lt;/span&gt;&lt;span style="color: blue;"&gt;?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Usuarios&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Usuario &lt;/span&gt;&lt;span style="color: red;"&gt;Imagen&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;images/1.png&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;11&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Nombre&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Loco loco&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Nombre&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Email&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;email1@hotmail.com&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Email&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Usuario&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Usuario &lt;/span&gt;&lt;span style="color: red;"&gt;Imagen&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;images/2.jpg&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;22&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;        
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Nombre&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Johnny Serrano&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Nombre&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Email&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;email2@hotmail.com&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Email&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Usuario&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Usuario &lt;/span&gt;&lt;span style="color: red;"&gt;Imagen&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;images/3.gif&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;33&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;        
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Nombre&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Mr Beans&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Nombre&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Email&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;email3@hotmail.com&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Email&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Usuario&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Usuario &lt;/span&gt;&lt;span style="color: red;"&gt;Imagen&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;images/4.jpg&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;44&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;        
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Nombre&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;ASP.NET Developer&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Nombre&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Email&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;email4@hotmail.com&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Email&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Usuario&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;Usuarios&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;u&gt;Sample2.xslt&lt;/u&gt;:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color: #a31515;"&gt;xml &lt;/span&gt;&lt;span style="color: red;"&gt;version&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1.0&lt;/span&gt;" &lt;span style="color: red;"&gt;encoding&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;iso-8859-1&lt;/span&gt;"&lt;span style="color: blue;"&gt;?&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:stylesheet &lt;/span&gt;&lt;span style="color: red;"&gt;version&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;1.0&lt;/span&gt;" &lt;span style="color: red;"&gt;xmlns:xsl&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;http://www.w3.org/1999/XSL/Transform&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:output &lt;/span&gt;&lt;span style="color: red;"&gt;doctype-public&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;HTML&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:template &lt;/span&gt;&lt;span style="color: red;"&gt;match&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Usuarios&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;table&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;ID&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;                
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Nombre&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Email&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;th&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;                
            &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:for-each &lt;/span&gt;&lt;span style="color: red;"&gt;select&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Usuario&lt;/span&gt;"&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;                    
                        &amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:value-of &lt;/span&gt;&lt;span style="color: red;"&gt;select&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;id&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;
                    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                        &amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:variable &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;img&lt;/span&gt;" &lt;span style="color: red;"&gt;select&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;@Imagen&lt;/span&gt;" &lt;span style="color: blue;"&gt;/&amp;gt;
                            &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;img &lt;/span&gt;&lt;span style="color: red;"&gt;src&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;{$img}&lt;/span&gt;" &lt;span style="color: blue;"&gt;/&amp;gt;
                    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;                    
                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                        &amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:value-of &lt;/span&gt;&lt;span style="color: red;"&gt;select&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Nombre&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;
                    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                        &amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:value-of &lt;/span&gt;&lt;span style="color: red;"&gt;select&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Email&lt;/span&gt;"&lt;span style="color: blue;"&gt;/&amp;gt;
                    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                        &amp;lt;&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:variable &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;url&lt;/span&gt;" &lt;span style="color: red;"&gt;select&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;id&lt;/span&gt;" &lt;span style="color: blue;"&gt;/&amp;gt;
                        &amp;lt;&lt;/span&gt;&lt;span style="color: #a31515;"&gt;a &lt;/span&gt;&lt;span style="color: red;"&gt;href&lt;/span&gt;&lt;span style="color: blue;"&gt;=&lt;/span&gt;"&lt;span style="color: blue;"&gt;Details.aspx?id={$url}&lt;/span&gt;" &lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Detalles&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;a&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                    &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;td&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;tr&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:for-each&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515;"&gt;table&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:template&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;xsl:stylesheet&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;u&gt;WebForm1.aspx&lt;/u&gt;:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;html &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://www.w3.org/1999/xhtml"&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;head &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="Head1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Mostrar contenido xml en página aspx&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;link &lt;/span&gt;&lt;span style="color: red;"&gt;href&lt;/span&gt;&lt;span style="color: blue;"&gt;="style.css" &lt;/span&gt;&lt;span style="color: red;"&gt;rel&lt;/span&gt;&lt;span style="color: blue;"&gt;="stylesheet" &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="text/css" /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;head&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;form &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="form1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Xml &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Xml1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Xml&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;form&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;html&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
&lt;u&gt;WebForm1.aspx.cs&lt;/u&gt;:&lt;br /&gt;
&lt;br /&gt;
cabecera:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;using &lt;/span&gt;System;
&lt;span style="color: blue;"&gt;using &lt;/span&gt;System.Xml;
&lt;span style="color: blue;"&gt;using &lt;/span&gt;System.Xml.Xsl;&lt;/pre&gt;
&lt;br /&gt;
Page Load:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;protected void &lt;/span&gt;Page_Load(&lt;span style="color: blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af;"&gt;EventArgs &lt;/span&gt;e)
{
    &lt;span style="color: blue;"&gt;if &lt;/span&gt;(Page.IsPostBack) &lt;span style="color: blue;"&gt;return&lt;/span&gt;;

    &lt;span style="color: #2b91af;"&gt;XmlDocument &lt;/span&gt;docXML = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;XmlDocument&lt;/span&gt;();
    docXML.Load(Server.MapPath(&lt;span style="color: #a31515;"&gt;"sample2.xml"&lt;/span&gt;));

    &lt;span style="color: #2b91af;"&gt;XslTransform &lt;/span&gt;docXSL = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;XslTransform&lt;/span&gt;();
    docXSL.Load(Server.MapPath(&lt;span style="color: #a31515;"&gt;"sample2.xslt"&lt;/span&gt;));

    Xml1.Document = docXML;
    Xml1.Transform = docXSL;
}&lt;/pre&gt;
Ahora ejecute la página WebForm1.aspx para ver los resultados… debiera ver algo como la imagen de arriba. &lt;br /&gt;
Ejecúten la página en cualquier browser y verán que en todos los browsers se ha efectuado la transformación de manera correcta, gracias a ASP.NET.&lt;br /&gt;
&lt;br /&gt;
Es todo por ahora, espero que les sea de utilidad &lt;img alt="Guiño" class="wlEmoticon wlEmoticon-winkingsmile" src="http://lh3.ggpht.com/-bpIXBEd388M/TqGyFoNfFLI/AAAAAAAABMU/c2F87vTspa0/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /&gt;&lt;br /&gt;
&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="https://skydrive.live.com/embedicon.aspx/neuronasoft/XML^_XSLT.zip?cid=f5cad8c1ed1c13f9&amp;amp;sc=documents" style="background-color: #fcfcfc; height: 115px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px; width: 98px;" title="Preview"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-8272119932515972287?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/-9vhA1b1SCA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/8272119932515972287/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=8272119932515972287&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/8272119932515972287?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/8272119932515972287?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/-9vhA1b1SCA/visualizar-contenido-xml-en-pagina-aspx.html" title="ASP.NET - Visualizar contenido XML en pagina aspx" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-ZrJ_PwtgSSo/TqGyFHqZtyI/AAAAAAAABMM/gfGXSuGvDtY/s72-c/xmL_with_xslt_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/10/visualizar-contenido-xml-en-pagina-aspx.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ABQ3k5eSp7ImA9WhRSF0g.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-1530933061311196800</id><published>2011-10-14T10:50:00.001-05:00</published><updated>2011-11-19T20:15:52.721-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-19T20:15:52.721-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Base de datos" /><category scheme="http://www.blogger.com/atom/ns#" term="Visual Studio .net" /><title>Comparar Bases de datos con Visual Studio</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RfE8cYL9zP8OABFab_U66zCGZzg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RfE8cYL9zP8OABFab_U66zCGZzg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RfE8cYL9zP8OABFab_U66zCGZzg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RfE8cYL9zP8OABFab_U66zCGZzg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Hace algún tiempo hice un post sobre comparar Esquemas de bases de datos, aquí&lt;br /&gt;
&lt;a href="http://www.neuronasoft.net/2010/08/comparar-bases-de-datos.html"&gt;http://www.neuronasoft.net/2010/08/comparar-bases-de-datos.html&lt;/a&gt;&lt;br /&gt;
y bueno, casi inmediatamente después leyendo un post en algún lugar descubrí que también Visual Studio tenía una potente herramienta para comparar esquemas de bases de datos. Peor eso no es todo, además nos permite comparar data entre dos bases de datos. Así que es impresionante y ya no necesito la herramienta anterior.&lt;br /&gt;
He usado esta herramienta extensivamente y tengo que decirles que es muy buena. Yo uso Visual Studio Ultimate 2010 y les explicaré cómo usar esta herramienta.&lt;br /&gt;
Abran el Visual Studio y vayan al menú Data &amp;gt; Schema Compare &amp;gt; New Schema Comparison&lt;br /&gt;
Se mostrará una ventana en donde deben ingresar la base de datos origen y la de destino, luego presionen el botón Ok para que se inicie el proceso.&lt;br /&gt;
Se mostrará un resumen con las diferencias detectadas entre ambas bases de datos… verá que hay una columna llamada Update Action, en la cual dirá Skip si no encontró diferencias en dicho objeto y dirá Update si es que detectó diferencias.&lt;br /&gt;
Entonces, antes de presionar el botón Write Updates, Ud puede cambiar el estado Update a Skip, osea… si no quieres que algún cambio se aplique.&lt;br /&gt;
Finalmente, cuando ya revisaste que todo esté ok… puedes presionar el botón Write Updates para que empiece el proceso de actualización de esquema entre bases de datos.&lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/-LEIcrX77EqA/TphaAxb732I/AAAAAAAABL8/KdQY-lBMhps/s1600-h/compare_database%25255B44%25255D.png"&gt;&lt;img alt="compare_database" border="0" height="574" src="http://lh5.ggpht.com/-aCbzXtc0K6c/TphaJtmWnuI/AAAAAAAABMA/kp5-En6N4xA/compare_database_thumb%25255B42%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="compare_database" width="755" /&gt;&lt;/a&gt;&lt;br /&gt;
Para el proceso de comparar datos entre dos bases de datos, haremos lo siguiente:&lt;br /&gt;
Vayan al menú Data &amp;gt;&amp;nbsp; Data Compare &amp;gt; New Data Comparison…&lt;br /&gt;
Se mostrará una ventana que te solicitará los datos de las dos bases de datos a comparar su data. Finalmente, presionas el botón Finish&amp;nbsp; para que inicie la comparación.&lt;br /&gt;
Como resultado obtendrás un resumen muy intuitivo en el que claramente podrás detectar las diferencias de datos entre ambas bases de datos.&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-gv8cdhN4j8g/TphaKYUD7yI/AAAAAAAABLc/H7onl0w9kmg/s1600-h/data_compare%25255B3%25255D.png"&gt;&lt;img alt="data_compare" border="0" height="607" src="http://lh4.ggpht.com/--01Ie13Msks/TphaLefmRdI/AAAAAAAABLk/0R32w8O75IQ/data_compare_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="data_compare" width="755" /&gt;&lt;/a&gt;&lt;br /&gt;
Eso es todo.&lt;br /&gt;
Espero que les sea de utilidad &lt;img alt="Guiño" class="wlEmoticon wlEmoticon-winkingsmile" src="http://lh5.ggpht.com/-fqtwzVwiSYo/TphaLu66EbI/AAAAAAAABLs/aKGF0yQOWaY/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-1530933061311196800?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/v71_C5eG78U" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/1530933061311196800/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=1530933061311196800&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/1530933061311196800?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/1530933061311196800?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/v71_C5eG78U/comparar-bases-de-datos-con-visual.html" title="Comparar Bases de datos con Visual Studio" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-aCbzXtc0K6c/TphaJtmWnuI/AAAAAAAABMA/kp5-En6N4xA/s72-c/compare_database_thumb%25255B42%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/10/comparar-bases-de-datos-con-visual.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAMQH09cSp7ImA9WhdbFEk.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-6480919125829413315</id><published>2011-10-12T10:35:00.000-05:00</published><updated>2011-10-12T14:29:41.369-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-12T14:29:41.369-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Inyecciones HTML" /><category scheme="http://www.blogger.com/atom/ns#" term="Javascript" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>Detectar cuando javascript está deshabilitado en el navegador</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/3Kq7Yx9ko24JRWpRaUX2cGcfnsQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3Kq7Yx9ko24JRWpRaUX2cGcfnsQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/3Kq7Yx9ko24JRWpRaUX2cGcfnsQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/3Kq7Yx9ko24JRWpRaUX2cGcfnsQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://lh4.ggpht.com/-rHUdVtCrbo4/TpWzf0c71eI/AAAAAAAABK8/TTKZLos8ajE/s1600-h/javascript_disabled%25255B3%25255D.png"&gt;&lt;img align="left" alt="javascript_disabled" border="0" height="276" src="http://lh4.ggpht.com/-YgzEaNM9anQ/TpWzgalVKbI/AAAAAAAABLE/B7e8JINschs/javascript_disabled_thumb%25255B1%25255D.png?imgmax=800" style="background-image: none; border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; float: left; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="javascript_disabled" width="279" /&gt;&lt;/a&gt;A pesar de que ya son muchos años de madurez del mundo de las aplicaciones web, aún hay algunos puntos que si no se toman en cuenta, pueden traer abajo cualquier sistema robusto.&lt;br /&gt;
Anticiparse a la posibilidad de que javascript esté deshabilitado en el browser es una obligación, siempre es mejor que seas precavido y tengas una respuesta ante tal posibilidad.&lt;br /&gt;
Por ejemplo, si estás ejecutando una página aspx para autenticar usuarios, en la cual los controles textboxes están siendo validados por controles de validación como RequiredFieldValidator, CustomValidatorSummary, etc… ten la seguridad que estos controles no funcionarán, y la validación del lado del cliente será burlada. Es por eso la importancia de detectar si javascript está habilitado.&lt;br /&gt;
Existe una etiqueta HTML que podemos usar cuando javascript está deshabilitado, es la etiqueta &amp;lt;NOSCRIPT&amp;gt;contenido&amp;lt;/NOSCRIPT&amp;gt;&lt;br /&gt;
Cómo funciona? muy simple, sólo añade esta etiqueta en la página web,&amp;nbsp; esta etiqueta sólo se hará visible sólo si javascript está desactivado.&lt;br /&gt;
Veamos el ejemplo:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;html&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;head&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Detectar cuando javascript está deshabilitado&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;style &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="text/css"&amp;gt;
        &lt;/span&gt;&lt;span style="color: maroon;"&gt;*&lt;/span&gt;{ &lt;span style="color: red;"&gt;font-family&lt;/span&gt;: &lt;span style="color: blue;"&gt;Trebuchet MS&lt;/span&gt;; }
        &lt;span style="color: maroon;"&gt;.div_NOSCRIPT
        &lt;/span&gt;{
            &lt;span style="color: red;"&gt;border&lt;/span&gt;: &lt;span style="color: blue;"&gt;solid 2px red&lt;/span&gt;;
            &lt;span style="color: red;"&gt;background-color&lt;/span&gt;: &lt;span style="color: blue;"&gt;Orange&lt;/span&gt;;
            &lt;span style="color: red;"&gt;padding&lt;/span&gt;: &lt;span style="color: blue;"&gt;5px&lt;/span&gt;;
            &lt;span style="color: red;"&gt;margin&lt;/span&gt;: &lt;span style="color: blue;"&gt;5px&lt;/span&gt;;
        }
    &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;head&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;noscript&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;div &lt;/span&gt;&lt;span style="color: red;"&gt;class&lt;/span&gt;&lt;span style="color: blue;"&gt;="div_NOSCRIPT"&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &lt;/span&gt;Para que este web site funcione correctamente, 
                es necesario habilitar javascript en tu navegador.
            &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
                &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;a &lt;/span&gt;&lt;span style="color: red;"&gt;href&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://www.enable-javascript.com/" &lt;/span&gt;&lt;span style="color: red;"&gt;target&lt;/span&gt;&lt;span style="color: blue;"&gt;="_blank"&amp;gt;
                &lt;/span&gt;En este enlace encontrarás instrucciones de 
                cómo habilitar javascript en tu navegador&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;a&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;div&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;noscript&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;

    &lt;/span&gt;...Aquí va todo el contenido de tu página web... 

&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;html&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
Si ejecutan el ejemplo, verán que el enlace nos lleva hacia una página web con unas instrucciones muy completas para habilitar javascript en cualquiera de los navegadores más importantes. Inclusive las instrucciones están ordenadas por versiones de browser. En fin, muy completo.&lt;br /&gt;
&lt;br /&gt;
Espero que les sea de utilidad ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-6480919125829413315?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/PtBoalbamqA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/6480919125829413315/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=6480919125829413315&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/6480919125829413315?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/6480919125829413315?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/PtBoalbamqA/detectar-cuando-javascript-esta.html" title="Detectar cuando javascript está deshabilitado en el navegador" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-YgzEaNM9anQ/TpWzgalVKbI/AAAAAAAABLE/B7e8JINschs/s72-c/javascript_disabled_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/10/detectar-cuando-javascript-esta.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEIGRnY_fyp7ImA9WhdUGEg.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-6626013966983563450</id><published>2011-10-05T18:11:00.000-05:00</published><updated>2011-10-05T18:15:27.847-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-05T18:15:27.847-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>ASP.NET - Page Methods que devuelven un valor o contenido string</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/iV8wu72RpxOLsEztSJLTVWoR934/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iV8wu72RpxOLsEztSJLTVWoR934/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/iV8wu72RpxOLsEztSJLTVWoR934/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/iV8wu72RpxOLsEztSJLTVWoR934/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://4.bp.blogspot.com/-8nYt9IrYYgc/Tozk329DygI/AAAAAAAABK4/B9aGAMVmRM4/s1600/page_method.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-8nYt9IrYYgc/Tozk329DygI/AAAAAAAABK4/B9aGAMVmRM4/s1600/page_method.png" /&gt;&lt;/a&gt;&lt;/div&gt;
Me preguntaron cómo hacía para lograr que un Page Method retorne una cadena string desde el lado del servidor.&lt;br /&gt;
&lt;br /&gt;
Ya hemos tratado este interesante tema de Page Methods, pero no habíamos demostrado cómo retornar un string, ahora vamos a hacerlo.&lt;br /&gt;
&lt;br /&gt;
Para el caso, vamos a enviar a través del Page Method un valor numérico, y como valor de retorno traeremos una lista desordenada de elementos, la cual será enviada como un string al lado del cliente.&lt;br /&gt;
&lt;br /&gt;
Empecemos. Recuerden que el proyecto debe tener:&lt;br /&gt;
&lt;br /&gt;
1.- la referencia a System.Web.Extensions&lt;br /&gt;
2.- un ScriptManager con la propiedad EnablePageMethods=”true”&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;html &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://www.w3.org/1999/xhtml"&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;head &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="Head1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Page Methods que retornan un string&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;script &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="text/javascript"&amp;gt;
    function &lt;/span&gt;BulletedList(quantity) 
    {
    PageMethods.GetBulletedList(quantity, MyMethod_Result, onSucceed, onError);
    }

    &lt;span style="color: blue;"&gt;function &lt;/span&gt;MyMethod_Result(StringDeRespuesta) {

        &lt;span style="color: blue;"&gt;var &lt;/span&gt;Label1 = document.getElementById(&lt;span style="color: maroon;"&gt;"&lt;/span&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial; color: maroon;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: maroon;"&gt;= Label1.ClientID &lt;/span&gt;&lt;span style="background-attachment: initial; background-clip: initial; background-color: yellow; background-image: initial; background-origin: initial; color: maroon;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;"&lt;/span&gt;);
        Label1.innerHTML = StringDeRespuesta;
    }

    &lt;span style="color: blue;"&gt;function &lt;/span&gt;onSucceed(result) {
    }

    &lt;span style="color: blue;"&gt;function &lt;/span&gt;onError(result) {
        alert(result.get_message());
    }
    &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;head&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
   &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;form &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="form1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
   &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;ScriptManager &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="ScriptManager1" &lt;/span&gt;&lt;span style="color: red;"&gt;EnablePageMethods&lt;/span&gt;&lt;span style="color: blue;"&gt;="true" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
   &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;ScriptManager&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;HyperLink &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="HyperLink1" &lt;/span&gt;&lt;span style="color: red;"&gt;NavigateUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;="javascript:;" 
        &lt;/span&gt;&lt;span style="color: red;"&gt;onclick&lt;/span&gt;&lt;span style="color: blue;"&gt;="BulletedList(10);" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
            &lt;/span&gt;Obtener contenido HTML desde el servidor
    &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;HyperLink&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Label1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Label&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;form&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;html&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
Luego, del lado del código VB.NET:&lt;br /&gt;
&lt;pre class="code"&gt;    &amp;lt;System.Web.Services.&lt;span style="color: #2b91af;"&gt;WebMethod&lt;/span&gt;()&amp;gt; _
    &lt;span style="color: blue;"&gt;Public Shared Function &lt;/span&gt;GetBulletedList(&lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;quantity &lt;span style="color: blue;"&gt;As Integer&lt;/span&gt;) &lt;span style="color: blue;"&gt;As String
        Dim &lt;/span&gt;p &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Page
        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;oStringWriter &lt;span style="color: blue;"&gt;As New &lt;/span&gt;System.IO.&lt;span style="color: #2b91af;"&gt;StringWriter&lt;/span&gt;()
        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;oHtmlTextWriter &lt;span style="color: blue;"&gt;As New &lt;/span&gt;System.Web.UI.&lt;span style="color: #2b91af;"&gt;HtmlTextWriter&lt;/span&gt;(oStringWriter)

        &lt;span style="color: blue;"&gt;Dim &lt;/span&gt;ul &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;BulletedList
        &lt;/span&gt;&lt;span style="color: blue;"&gt;For &lt;/span&gt;i &lt;span style="color: blue;"&gt;As Integer &lt;/span&gt;= 1 &lt;span style="color: blue;"&gt;To &lt;/span&gt;quantity
            ul.Items.Add(&lt;span style="color: #a31515;"&gt;"Este es el elemento #: " &lt;/span&gt;&amp;amp; i)
        &lt;span style="color: blue;"&gt;Next

        &lt;/span&gt;ul.RenderControl(oHtmlTextWriter)

        &lt;span style="color: blue;"&gt;Return &lt;/span&gt;oStringWriter.ToString()

    &lt;span style="color: blue;"&gt;End Function&lt;/span&gt;&lt;/pre&gt;
Como pueden ver… hay un Page Method que crea una lista desordenada, a la cual se le van añadiendo elementos dinámicamente… y finalmente devuelve la lista pero convertida en un string.&lt;br /&gt;
Lo que hace posible que el contenido sea devuelto es el 2do parámetro que recibe el PageMethod en la llamada javascript:&lt;br /&gt;
PageMethods.GetBulletedList(quantity, &lt;strong&gt;&lt;span style="font-size: medium;"&gt;MyMethod_Result&lt;/span&gt;&lt;/strong&gt;, onSucceed, onError);&lt;br /&gt;
Eso es todo, espero que les sea de utilidad &lt;img alt="Guiño" class="wlEmoticon wlEmoticon-winkingsmile" src="http://lh5.ggpht.com/-fGyRLOdKu-8/TozgGHesyuI/AAAAAAAABK0/3WzzauNF4qw/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-6626013966983563450?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/1f-rShrmOcU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/6626013966983563450/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=6626013966983563450&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/6626013966983563450?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/6626013966983563450?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/1f-rShrmOcU/aspnet-page-methods-que-devuelven-un.html" title="ASP.NET - Page Methods que devuelven un valor o contenido string" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-8nYt9IrYYgc/Tozk329DygI/AAAAAAAABK4/B9aGAMVmRM4/s72-c/page_method.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/10/aspnet-page-methods-que-devuelven-un.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8DRX47eyp7ImA9WhdUF08.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-1866749836120295828</id><published>2011-10-03T18:43:00.001-05:00</published><updated>2011-10-04T04:34:34.003-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-04T04:34:34.003-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Segundo Serrano Panduro" /><title>ASP.NET - Mi participación en los Foros ASP.NET</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/t17_eET3RyS1qHCmrCTo9zoDaWk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t17_eET3RyS1qHCmrCTo9zoDaWk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/t17_eET3RyS1qHCmrCTo9zoDaWk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/t17_eET3RyS1qHCmrCTo9zoDaWk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;/div&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://3.bp.blogspot.com/-YNuXp0Yx7eg/TopHIcIMwvI/AAAAAAAABKw/YoomVDd4xKQ/s1600/123.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-YNuXp0Yx7eg/TopHIcIMwvI/AAAAAAAABKw/YoomVDd4xKQ/s1600/123.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;
Cómo están, quería compartirles algo:&lt;br /&gt;
Desde hace varios años que participo en los foros de ASP.NET, pero no en los foros en español... sino en los foros en inglés, aquí&amp;nbsp;&lt;a href="http://forums.asp.net/"&gt;http://forums.asp.net/&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Y la participación es obviamente gratuita, no recibes paga... Yo lo hago para retribuir la ayuda que recibí de las comunidades Microsoft en mis inicios, lo cual Yo admiraba cada vez que recibía una respuesta desinteresada.&lt;br /&gt;
&lt;br /&gt;
Y bueno, si me buscan en lo que allí llaman el Salón de la Fama en&lt;br /&gt;
&lt;a href="http://www.asp.net/community/recognition/hall-of-fame"&gt;http://www.asp.net/community/recognition/hall-of-fame&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
verán que tengo el &lt;u&gt;&lt;b&gt;Nivel Star&lt;/b&gt;&lt;/u&gt;, y el nombre de usuario con el que me conocen es&amp;nbsp;&lt;a href="http://forums.asp.net/members/Segundo.aspx"&gt;Segundo&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
En estos Foros han participado o aún participan grandes referentes del mundo ASP.NET, como&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://weblogs.asp.net/scottgu/"&gt;Scott Guthrie&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.hanselman.com/"&gt;Scott Hanselman&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://haacked.com/"&gt;Phil Haack&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://4guysfromrolla.com/"&gt;Scott Mitchell&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.krisvandermast.com/"&gt;Kris van der Mast&lt;/a&gt;&amp;nbsp;(el famoso XIII)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.dotnetcurry.com/BrowseArticles.aspx"&gt;Suprotim Agarwal&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.mikesdotnetting.com/"&gt;http://www.mikesdotnetting.com/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://odetocode.com/blogs/scott/"&gt;Scott Allen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.west-wind.com/weblog"&gt;Rick Strahl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://encosia.com/"&gt;Dave Ward&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;etc.... y muchos más.&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
Muchos de ellos son &lt;b&gt;Microsoft MVP&lt;/b&gt;, y francamente, es un honor participar con ellos, intentando brindar la mejor respuesta ante la pregunta de algún usuario.&lt;br /&gt;
&lt;br /&gt;
Salud ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-1866749836120295828?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/LNssYB8evUM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/1866749836120295828/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=1866749836120295828&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/1866749836120295828?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/1866749836120295828?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/LNssYB8evUM/aspnet-mi-participacion-en-los-foros.html" title="ASP.NET - Mi participación en los Foros ASP.NET" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-YNuXp0Yx7eg/TopHIcIMwvI/AAAAAAAABKw/YoomVDd4xKQ/s72-c/123.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/10/aspnet-mi-participacion-en-los-foros.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ADQHw5fyp7ImA9WhRSF0g.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-4547510015134097789</id><published>2011-09-29T10:12:00.000-05:00</published><updated>2011-11-19T20:16:11.227-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-19T20:16:11.227-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>ASP.NET - Recuperar la imagen del dia</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/kS4R6OZGKxhTinnfC8Q_iXVpElM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kS4R6OZGKxhTinnfC8Q_iXVpElM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/kS4R6OZGKxhTinnfC8Q_iXVpElM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/kS4R6OZGKxhTinnfC8Q_iXVpElM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Muchos sitios web muestran diariamente una foto, la cual la titulan como La imagen del día o la Foto del día.&lt;br /&gt;
Y en varias ocasiones, se requiere recuperar esta imagen, pero de manera automatizada. Dado que este blog trata sobre todo de tecnología .NET especialmente web, demostraremos cómo realizar este proceso desde una página ASP.NET.&lt;br /&gt;
Nosotros vamos a recuperar la foto del día de National Geographic, que cada día muestra una foto impresionante.&lt;br /&gt;
Cómo lograremos obtener la foto del día? estos son los pasos:&lt;br /&gt;
1.- Necesitamos la url de la página que muestra la foto del día&lt;br /&gt;
2.- Recuperaremos todo el contenido html de la página de manera programática&lt;br /&gt;
3.- Usaremos un gran componente como es Html Agility Pack para parsear el contenido html y extraer la imagen&lt;br /&gt;
4.- Para extraer la imagen, necesitamos saber dentro de cuáles etiquetas está incluído, en mi caso, analizé el código html de dicha url usando la opción Inspeccionar elemento que nos proporciona Google Chrome y encontré que la imagen estaba aquí:&lt;br /&gt;
&lt;a href="http://lh5.ggpht.com/-AdfK4e5YP-I/ToSKlhQO79I/AAAAAAAABKg/DqT3GwtJtsQ/s1600-h/image_of_the_day3.png"&gt;&lt;img alt="image_of_the_day" border="0" height="454" src="http://lh6.ggpht.com/-CNbrE1ItZ6k/ToSKtJb9bxI/AAAAAAAABKk/FjHFl0jthgc/image_of_the_day_thumb1.png?imgmax=800" style="background-image: none; border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; padding-left: 0px; padding-right: 0px; padding-top: 0px;" title="image_of_the_day" width="724" /&gt;&lt;/a&gt;&lt;br /&gt;
Entonces, basado en ese análisis, hice:&lt;br /&gt;
1.- Descargué el assembly Html Agility Pack desde &lt;a href="http://htmlagilitypack.codeplex.com/"&gt;http://htmlagilitypack.codeplex.com/&lt;/a&gt;, lo puse en la carpeta bin y lo añadí como referencia a mi proyecto&lt;br /&gt;
2.- Añadí una página aspx con un control image:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;html &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://www.w3.org/1999/xhtml"&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;head &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="Head1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;La imagen del día con ASP.NET&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;script &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="text/javascript"&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;style &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="text/css"&amp;gt;
        &lt;/span&gt;&lt;span style="color: maroon;"&gt;*&lt;/span&gt;{ &lt;span style="color: red;"&gt;font-family&lt;/span&gt;: &lt;span style="color: blue;"&gt;Trebuchet MS&lt;/span&gt;; }
    &lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;head&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;form &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="form1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;h3&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Recuperando la imagen del día con ASP.NET&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;h3&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Image &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Image1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" /&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;form&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;html&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;br /&gt;
3.- Añadí la referencia a la página&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;using &lt;/span&gt;HtmlAgilityPack;&lt;/pre&gt;
4.- Elaboré el siguiente código C sharp:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;protected void &lt;/span&gt;Page_Load(&lt;span style="color: blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af;"&gt;EventArgs &lt;/span&gt;e)
{
    &lt;span style="color: blue;"&gt;string &lt;/span&gt;url = &lt;span style="color: #a31515;"&gt;"http://photography.nationalgeographic.com/photography/photo-of-the-day/"&lt;/span&gt;;

    System.Net.&lt;span style="color: #2b91af;"&gt;WebClient &lt;/span&gt;wc = &lt;span style="color: blue;"&gt;new &lt;/span&gt;System.Net.&lt;span style="color: #2b91af;"&gt;WebClient&lt;/span&gt;();
    &lt;span style="color: #2b91af;"&gt;HtmlDocument &lt;/span&gt;doc = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;HtmlDocument&lt;/span&gt;();
    doc.Load(wc.OpenRead(url));

    &lt;span style="color: #2b91af;"&gt;HtmlNode &lt;/span&gt;img = doc.DocumentNode.SelectSingleNode(&lt;span style="color: #a31515;"&gt;@"//div[@class='primary_photo']/a/img"&lt;/span&gt;);
    &lt;span style="color: blue;"&gt;if &lt;/span&gt;(img != &lt;span style="color: blue;"&gt;null&lt;/span&gt;)
        Image1.ImageUrl = img.Attributes[&lt;span style="color: #a31515;"&gt;"src"&lt;/span&gt;].Value;

}&lt;/pre&gt;
Así de simple. Uds pueden hacer lo mismo con otros sitios web que muestren una imagen diferente diaria.&lt;br /&gt;
Espero que les sea de utilidad &lt;img alt="Guiño" class="wlEmoticon wlEmoticon-winkingsmile" src="http://lh5.ggpht.com/-4NxgnTpp0hs/ToSKue1jiKI/AAAAAAAABKo/29F_efO1Mt8/wlEmoticon-winkingsmile%25255B2%25255D.png?imgmax=800" style="border-bottom-style: none; border-left-style: none; border-right-style: none; border-top-style: none;" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-4547510015134097789?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/VkCBDZLittk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/4547510015134097789/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=4547510015134097789&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/4547510015134097789?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/4547510015134097789?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/VkCBDZLittk/aspnet-recuperar-la-imagen-del-dia.html" title="ASP.NET - Recuperar la imagen del dia" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-CNbrE1ItZ6k/ToSKtJb9bxI/AAAAAAAABKk/FjHFl0jthgc/s72-c/image_of_the_day_thumb1.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/09/aspnet-recuperar-la-imagen-del-dia.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08DQHs7eSp7ImA9WhdUF04.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-8798442971026193280</id><published>2011-09-12T10:03:00.000-05:00</published><updated>2011-10-04T09:51:11.501-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-04T09:51:11.501-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Utilitarios" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>ASP.NET – Visualizar documentos en linea (Excel, word, pdf, ppt, …)</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LFD5B3h_PgIr4BIkVJUbYeTC7vE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LFD5B3h_PgIr4BIkVJUbYeTC7vE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LFD5B3h_PgIr4BIkVJUbYeTC7vE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LFD5B3h_PgIr4BIkVJUbYeTC7vE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://lh3.ggpht.com/-TZ4eKBAtccA/Tm4-6bbDY0I/AAAAAAAABKY/nqanQ8cVaSw/s1600-h/google_docs_aspnet%25255B4%25255D.png"&gt;&lt;img align="left" alt="google_docs_aspnet" border="0" height="299" src="http://lh5.ggpht.com/-yj4rkxic0pI/Tm4-60nH4eI/AAAAAAAABKc/KP1nYBvvFhg/google_docs_aspnet_thumb%25255B2%25255D.png?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; margin-right: 0px;" title="google_docs_aspnet" width="431" /&gt;&lt;/a&gt; Google Docs tiene un visor en línea que permite que múltiples formatos de archivos sean visualizados en línea, entre otros formatos tenemos:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Microsoft Excel (.XLS and .XLSX)&lt;/li&gt;
&lt;li&gt;Microsoft PowerPoint 2007 / 2010 (.PPTX)&lt;/li&gt;
&lt;li&gt;Adobe Illustrator (.AI)&lt;/li&gt;
&lt;li&gt;Adobe Photoshop (.PSD)&lt;/li&gt;
&lt;li&gt;Autodesk AutoCad (.DXF)&lt;/li&gt;
&lt;li&gt;Scalable Vector Graphics (.SVG)&lt;/li&gt;
&lt;li&gt;TrueType (.TTF)&lt;/li&gt;
&lt;li&gt;…&lt;/li&gt;
&lt;/ul&gt;
Lo que vamos a hacer nosostros será mostrarles cómo podemos incorporar esa gran funcionalidad en nuestras aplicaciones ASP.NET.&lt;br /&gt;
Supongamos que tenemos una carpeta llamada Uploads en nuestro servidor, el cual está en la raiz de nuestra aplicación… esta carpeta contiene múltiples archivos que queremos que sean visualizados en línea, sin necesidad que el usuario los descargue.&lt;br /&gt;
Para visualizar un documento con el visor de Google Docs, debemos construir una url con esta estructura:&lt;br /&gt;
&lt;pre&gt;&lt;b&gt;“&lt;u&gt;http://docs.google.com/viewer?url=&lt;/u&gt;” + “&lt;u&gt;la_url_de_tu_archivo&lt;/u&gt;” + “&lt;u&gt;&amp;amp;embedded=true&lt;/u&gt;”&lt;/b&gt;&lt;/pre&gt;
Luego, añadimos un iframe a nuestra página, dicho iframe tendrá como src la url que construimos arriba.&lt;br /&gt;
Entonces, sabiendo esto nosotros, vamos a hacer recuperar los nombres de los archivos que están guardados en la carpeta Uploads y vamos a mostrar los documentos a través de un iframe:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;html &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://www.w3.org/1999/xhtml"&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;head &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Integrar Visor de documentos Google con ASP.NET&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;head&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;form &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="form1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Literal &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="ltHTML" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Literal&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;form&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;html&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre class="code"&gt;    &lt;span style="color: blue;"&gt;Protected Sub &lt;/span&gt;Page_Load(&lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;sender &lt;span style="color: blue;"&gt;As Object&lt;/span&gt;, &lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;e &lt;span style="color: blue;"&gt;As &lt;/span&gt;System.&lt;span style="color: #2b91af;"&gt;EventArgs&lt;/span&gt;) &lt;span style="color: blue;"&gt;Handles Me&lt;/span&gt;.Load
        &lt;span style="color: blue;"&gt;If &lt;/span&gt;IsPostBack &lt;span style="color: blue;"&gt;Then Return

        &lt;/span&gt;&lt;span style="color: green;"&gt;'la carpeta en el servidor con los archivos a visualizar
        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;di &lt;span style="color: blue;"&gt;As New &lt;/span&gt;IO.&lt;span style="color: #2b91af;"&gt;DirectoryInfo&lt;/span&gt;(Server.MapPath(&lt;span style="background-attachment: scroll; background-clip: initial; background-color: #ffdf00; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat; color: #a31515;"&gt;"~\Uploads"&lt;/span&gt;))

        &lt;span style="color: green;"&gt;'recuperamos los archivos
        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;Files &lt;span style="color: blue;"&gt;As &lt;/span&gt;IO.&lt;span style="color: #2b91af;"&gt;FileInfo&lt;/span&gt;() = di.GetFiles(&lt;span style="background-attachment: scroll; background-clip: initial; background-color: #ffdf00; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat; color: #a31515;"&gt;"*.*"&lt;/span&gt;)

        &lt;span style="color: green;"&gt;'elaboro el html 
        &lt;/span&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;htm &lt;span style="color: blue;"&gt;As New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;StringBuilder
        &lt;/span&gt;htm.Append(&lt;span style="background-attachment: scroll; background-clip: initial; background-color: #ffdf00; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat; color: #a31515;"&gt;"&amp;lt;table style='width: 100%'&amp;gt;"&lt;/span&gt;)
        &lt;span style="color: blue;"&gt;For Each &lt;/span&gt;f &lt;span style="color: blue;"&gt;As &lt;/span&gt;IO.&lt;span style="color: #2b91af;"&gt;FileInfo &lt;/span&gt;&lt;span style="color: blue;"&gt;In &lt;/span&gt;Files
            htm.Append(&lt;span style="background-attachment: scroll; background-clip: initial; background-color: #ffdf00; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat; color: #a31515;"&gt;"&amp;lt;tr&amp;gt;"&lt;/span&gt;)
            htm.Append(&lt;span style="background-attachment: scroll; background-clip: initial; background-color: #ffdf00; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat; color: #a31515;"&gt;"&amp;lt;td style='padding: 20px auto'&amp;gt;"&lt;/span&gt;)
            htm.AppendFormat(&lt;span style="background-attachment: scroll; background-clip: initial; background-color: #ffdf00; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat; color: #a31515;"&gt;"&amp;lt;iframe src='http://docs.google.com/gview?url=http://www.midominio.com/Uploads/{0}&amp;amp;embedded=true'"&lt;/span&gt;, f.Name)&lt;/pre&gt;
&lt;pre class="code"&gt;            htm.Append(&lt;span style="background-attachment: scroll; background-clip: initial; background-color: #ffdf00; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat; color: #a31515;"&gt;" style='width:50%; height:300px;' frameborder='0'&amp;gt;&amp;lt;/iframe&amp;gt;"&lt;/span&gt;)
            htm.Append(&lt;span style="background-attachment: scroll; background-clip: initial; background-color: #ffdf00; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat; color: #a31515;"&gt;"&amp;lt;/td&amp;gt;"&lt;/span&gt;)
            htm.Append(&lt;span style="background-attachment: scroll; background-clip: initial; background-color: #ffdf00; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat; color: #a31515;"&gt;"&amp;lt;/tr&amp;gt;"&lt;/span&gt;)
        &lt;span style="color: blue;"&gt;Next
        &lt;/span&gt;htm.Append(&lt;span style="background-attachment: scroll; background-clip: initial; background-color: #ffdf00; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat; color: #a31515;"&gt;"&amp;lt;/table&amp;gt;"&lt;/span&gt;)

        ltHTML.Text = htm.ToString()

    &lt;span style="color: blue;"&gt;End Sub&lt;/span&gt;&lt;/pre&gt;
Al ejecutar la página aspx verán que se visualiza igual que la imagen que muestro arriba.&lt;br /&gt;
Eso es todo. Espero que les sea de utilidad ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-8798442971026193280?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/TAYt_MwMgS4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/8798442971026193280/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=8798442971026193280&amp;isPopup=true" title="3 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/8798442971026193280?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/8798442971026193280?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/TAYt_MwMgS4/aspnet-visor-en-linea-de-documentos.html" title="ASP.NET – Visualizar documentos en linea (Excel, word, pdf, ppt, …)" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-yj4rkxic0pI/Tm4-60nH4eI/AAAAAAAABKc/KP1nYBvvFhg/s72-c/google_docs_aspnet_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/09/aspnet-visor-en-linea-de-documentos.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8DRXsyfyp7ImA9WhdWFk0.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-4792447317758648033</id><published>2011-09-09T16:14:00.000-05:00</published><updated>2011-09-09T16:14:34.597-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-09-09T16:14:34.597-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Base de datos" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL SERVER" /><title>Generar registros para hacer pruebas en tu base de datos</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/VkXGcOUtRjHdFhbrnqZ64mt-U1s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VkXGcOUtRjHdFhbrnqZ64mt-U1s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/VkXGcOUtRjHdFhbrnqZ64mt-U1s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/VkXGcOUtRjHdFhbrnqZ64mt-U1s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://lh4.ggpht.com/-zyeMCara-9U/TmqBAY8cxBI/AAAAAAAABJ8/q2uCN9Fd-q8/s1600-h/cross_join%25255B4%25255D.jpg"&gt;&lt;img align="left" alt="cross_join" border="0" height="339" src="http://lh3.ggpht.com/-CLHdu7W_eX0/TmqBBh4CKTI/AAAAAAAABKA/_5w0Y1kjRrY/cross_join_thumb%25255B2%25255D.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; margin-left: 0px; margin-right: 0px;" title="cross_join" width="381" /&gt;&lt;/a&gt; Muchas veces necesitamos generar miles o millones de registros para hacer pruebas desde nuestra aplicación.&lt;br /&gt;
Una forma simple y rápida de generrar datos que a menudo utilizo es como a continuación explico:&lt;br /&gt;
1.- Elijo una tabla existente (cualquier tabla)&lt;br /&gt;
2.- Inserto la data de esa columna en la tabla que quiero generar registros, pero el truco es multiplicar miles de veces esa data. &lt;br /&gt;
Y cómo genero miles de veces esas filas?&lt;br /&gt;
Fácil, hago un CROS JOIN de la misma tabla, así:&lt;br /&gt;
(para este ejemplo estoy usando la data de la tabla del sistema sys.objects) &lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;CREATE TABLE &lt;/span&gt;#Dummy_Table(
columnINT &lt;span style="color: blue;"&gt;INT&lt;/span&gt;, 
columnDATETIME &lt;span style="color: blue;"&gt;DATETIME&lt;/span&gt;,
columnVARCHAR &lt;span style="color: blue;"&gt;VARCHAR&lt;/span&gt;(100), 
columnBIT &lt;span style="color: blue;"&gt;BIT&lt;/span&gt;)

&lt;span style="color: blue;"&gt;INSERT INTO &lt;/span&gt;#Dummy_Table
&lt;span style="color: blue;"&gt;SELECT &lt;/span&gt;a.object_id, 
a.modify_date, 
b.name, 
c.is_published
&lt;span style="color: blue;"&gt;FROM       &lt;/span&gt;sys.objects a 
&lt;span style="color: blue;"&gt;CROSS JOIN &lt;/span&gt;sys.objects b 
&lt;span style="color: blue;"&gt;CROSS JOIN &lt;/span&gt;sys.objects c 

&lt;span style="color: blue;"&gt;SELECT &lt;/span&gt;* &lt;span style="color: blue;"&gt;FROM &lt;/span&gt;#Dummy_Table

&lt;span style="color: blue;"&gt;DROP TABLE &lt;/span&gt;#Dummy_Table&lt;/pre&gt;Explicaré en qué consiste el T-SQL:&lt;br /&gt;
1.- Creo una tabla temporal para guardar los registros que generaremos.&lt;br /&gt;
2.- Inserto en la tabla temporal la data de algunas columnas de la tabla sys.objects…&lt;br /&gt;
al mismo tiempo, por cada CROSS JOIN que hago, la cantidad de filas se multiplicará por si misma… lo cual genera miles o millones (depende de cuantos CROSS JOIN hagas) de registros generados al vuelo al instante.&lt;br /&gt;
Espero que les sea de utilidad ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-4792447317758648033?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/Zxn0ktOEolk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/4792447317758648033/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=4792447317758648033&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/4792447317758648033?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/4792447317758648033?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/Zxn0ktOEolk/generar-registros-para-hacer-pruebas-en.html" title="Generar registros para hacer pruebas en tu base de datos" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-CLHdu7W_eX0/TmqBBh4CKTI/AAAAAAAABKA/_5w0Y1kjRrY/s72-c/cross_join_thumb%25255B2%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/09/generar-registros-para-hacer-pruebas-en.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UCQnw_eSp7ImA9WhdUGEo.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-1659771680819613999</id><published>2011-09-05T11:11:00.000-05:00</published><updated>2011-10-06T00:34:23.241-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-06T00:34:23.241-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>ASP.NET - Consumir web service asmx desde PHP</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/OG6Eq3J5Fh-Vt-xYNvSxeTtD7C4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OG6Eq3J5Fh-Vt-xYNvSxeTtD7C4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/OG6Eq3J5Fh-Vt-xYNvSxeTtD7C4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/OG6Eq3J5Fh-Vt-xYNvSxeTtD7C4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Cómo hacemos una llamada a un servicio web asmx desde php? En este post aprenderemos a hacerlo.   &lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/-1nCZrzf0MKU/TmTz8yT3VOI/AAAAAAAABJw/kZekhXJDbpM/s1600-h/invoke_web_service_asmx_from_php%25255B12%25255D.png"&gt;&lt;img alt="invoke_web_service_asmx_from_php" border="0" height="340" src="http://lh3.ggpht.com/-y0XHkcRW9b4/TmTz9UAtbUI/AAAAAAAABJ0/YBbMdJ62Exw/invoke_web_service_asmx_from_php_thumb%25255B10%25255D.png?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; margin-right: 0px;" title="invoke_web_service_asmx_from_php" width="390" /&gt;&lt;/a&gt;&lt;br /&gt;
Para consumir un servicio web asmx desde un cliente php hemos creado un servicio web en localhost, el cual se llama WebService1.asmx y tiene el siguiente método: &lt;br /&gt;
&lt;pre class="code"&gt;    &amp;lt;&lt;span style="color: #2b91af;"&gt;WebMethod&lt;/span&gt;()&amp;gt; _
    &lt;span style="color: blue;"&gt;Public Function &lt;/span&gt;HelloWorld(YourName &lt;span style="color: blue;"&gt;As String&lt;/span&gt;, YourAge &lt;span style="color: blue;"&gt;As Integer&lt;/span&gt;) &lt;span style="color: blue;"&gt;As String
        Return String&lt;/span&gt;.Format(&lt;span style="background-attachment: scroll; background-clip: initial; background-color: #ffdf00; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat; color: #a31515;"&gt;"Hello {0}, you are {1} years old."&lt;/span&gt;, YourName, YourAge)
    &lt;span style="color: blue;"&gt;End Function &lt;/span&gt;&lt;/pre&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Como ven es simple, recibe dos parámetros y devuelve una frase en un string.&lt;br /&gt;
Por otro lado, ahora vamos a crear una página php llamada consumer.php que contenga este pequeño retazo de código:&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$YourName = 'Aniceto';   &lt;br /&gt;
$YourAge = 50;&lt;br /&gt;
$WebService="&lt;a href="http://localhost/Samples35_VB/WebService1.asmx?wsdl%22;"&gt;http://localhost/Samples35_VB/WebService1.asmx?wsdl";&lt;/a&gt;&lt;br /&gt;
//parametros de la llamada   &lt;br /&gt;
$parametros = array();   &lt;br /&gt;
$parametros['YourName'] = $YourName;   &lt;br /&gt;
$parametros['YourAge'] = $YourAge;&lt;br /&gt;
//Invocación al web service &lt;br /&gt;
$WS = new SoapClient($WebService, $parametros);&lt;br /&gt;
//recibimos la respuesta dentro de un objeto   &lt;br /&gt;
$result = $WS-&amp;gt;HelloWorld($parametros);&lt;br /&gt;
//Mostramos el resultado de la consulta   &lt;br /&gt;
echo $result-&amp;gt;HelloWorldResult;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
Una rápida visualización del código me muestra que tenemos dos variables, las cuales luego son parte de un array que pasará como parámetro para el web service.&lt;br /&gt;
Luego de eso invocamos al web service y finalmente mostramos los resultados.&lt;br /&gt;
Para que este ejempo funcione en tu entorno de pruebas, debes modificar tu archivo de configuración php.ini a fin de habilitar las operaciones SOAP descomentando esta línea:&lt;br /&gt;
extension=php_soap.dll&lt;br /&gt;
y luego reiniciando tu servidor APACHE a fin de que se apliquen los cambios.&lt;br /&gt;
Como han podido observar, es algo muy sencillo.&lt;br /&gt;
Espero que les sea de utilidad ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-1659771680819613999?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/HLo2e3KnMAY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/1659771680819613999/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=1659771680819613999&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/1659771680819613999?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/1659771680819613999?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/HLo2e3KnMAY/consumir-web-service-asmx-desde-php.html" title="ASP.NET - Consumir web service asmx desde PHP" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-y0XHkcRW9b4/TmTz9UAtbUI/AAAAAAAABJ0/YBbMdJ62Exw/s72-c/invoke_web_service_asmx_from_php_thumb%25255B10%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/09/consumir-web-service-asmx-desde-php.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkMNR3o5fCp7ImA9WhdXE04.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-3876485735079197379</id><published>2011-08-22T10:49:00.006-05:00</published><updated>2011-08-25T23:54:56.424-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-25T23:54:56.424-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>Dividir string e ignorar los vacíos</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/WObDwIUrTLlbTYNo3WkU7cZiIeY/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WObDwIUrTLlbTYNo3WkU7cZiIeY/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/WObDwIUrTLlbTYNo3WkU7cZiIeY/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/WObDwIUrTLlbTYNo3WkU7cZiIeY/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Vamos a poner el caso que tenemos un string formado por números, como este: &lt;br /&gt;
&lt;pre&gt;"456 234&amp;nbsp; 123 67 987 890 123&amp;nbsp; 444 768"&lt;/pre&gt;&lt;span class="Apple-style-span" style="font-family: monospace; white-space: pre;"&gt;&lt;a href="http://lh6.ggpht.com/-x_sbtnTwUwk/TlJ5r5nUAiI/AAAAAAAABJM/DSZl-fylrCM/s1600-h/split_string%25255B2%25255D.jpg"&gt;&lt;img alt="split_string" border="0" height="244" src="http://lh6.ggpht.com/-JOsydoEqijY/TlJ5seKCWsI/AAAAAAAABJQ/l2u6Cmc-URU/split_string_thumb.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="split_string" width="191" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
Analizen este string y dense cuenta que a propósito he dejado más de un espacio a veces entre valores.&lt;br /&gt;
Ahora, lo que queremos es dividir el string y obtener los números, luego de eso lo queremos ordenar ascendente o descendente.&lt;br /&gt;
Veamos el código:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;string &lt;/span&gt;&lt;span style="color: black;"&gt;n = &lt;/span&gt;&lt;span style="color: maroon;"&gt;"456 234  123 67 987 890 123  444 768"&lt;/span&gt;&lt;span style="color: black;"&gt;;

&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;&lt;span style="color: black;"&gt;[] split = n.Split(&lt;/span&gt;&lt;span style="color: blue;"&gt;new char&lt;/span&gt;&lt;span style="color: black;"&gt;[] {&lt;/span&gt;&lt;span style="color: maroon;"&gt;' '&lt;/span&gt;&lt;span style="color: black;"&gt;}, StringSplitOptions.RemoveEmptyEntries);

List&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt; Numbers = &lt;/span&gt;&lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: black;"&gt;List&amp;lt;&lt;/span&gt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&lt;span style="color: black;"&gt;&amp;gt;();

&lt;/span&gt;&lt;span style="color: blue;"&gt;for &lt;/span&gt;&lt;span style="color: black;"&gt;(&lt;/span&gt;&lt;span style="color: blue;"&gt;int &lt;/span&gt;&lt;span style="color: black;"&gt;i = &lt;/span&gt;&lt;span style="color: red;"&gt;0&lt;/span&gt;&lt;span style="color: black;"&gt;; i &amp;lt; split.Length; i++)          
{
Numbers.Add(Convert.ToInt32(split[i]));
}
Numbers.Sort();

&lt;/span&gt;&lt;span style="color: green;"&gt;//si quieres en orden descendente... descomenta la sgte línea
//Numbers.Reverse();&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Como pueden ver, hago un split, usando además el parámetro StringSplitOptions.RemoveEmptyEntries, el cual me permite ignorar aquellos valores vacíos que pudiera hallar al hacer el split de la cadena. &lt;br /&gt;
Luego de eso, a través de una sentencia FOR, voy enviando cada valor que recupero del string hacia una lista genérica de números enteros, lo cual me va a dar la facilidad de manipularlos u ordenarlos, como pudieron ver en las líneas de arriba.&lt;br /&gt;
Numbert.Sort(), por defecto me ordena Ascendente y Numbers.Reverse() me permite invertir el orden para que quede descendente.&lt;br /&gt;
Ahora vamos a hacer lo mismo, pero esta vez usaremos Linq:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;string &lt;/span&gt;n = &lt;span style="background-attachment: initial; background-clip: initial; background-color: #ffdf00; background-image: initial; background-origin: initial; color: #a31515;"&gt;"456 234  123 67 987 890 123  444 768"&lt;/span&gt;;

&lt;span style="color: green;"&gt;//1.- obtengo los valores en un array de strings

&lt;/span&gt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;[] source = n.Split(&lt;span style="color: blue;"&gt;new char&lt;/span&gt;[] {&lt;span style="background-attachment: initial; background-clip: initial; background-color: #ffdf00; background-image: initial; background-origin: initial; color: #a31515;"&gt;' '&lt;/span&gt;}, &lt;span style="color: #2b91af;"&gt;StringSplitOptions&lt;/span&gt;.RemoveEmptyEntries);

&lt;span style="color: green;"&gt;//2.- paso el array de string hacia un array de números enteros&lt;/span&gt;&lt;span style="color: blue;"&gt;

int&lt;/span&gt;[] Numbers = &lt;span style="color: #2b91af;"&gt;Array&lt;/span&gt;.ConvertAll&amp;lt;&lt;span style="color: blue;"&gt;string&lt;/span&gt;, &lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;(source, &lt;span style="color: blue;"&gt;delegate&lt;/span&gt;(&lt;span style="color: blue;"&gt;string &lt;/span&gt;s) { &lt;span style="color: blue;"&gt;return int&lt;/span&gt;.Parse(s); });

&lt;span style="color: green;"&gt;//3.- con Linq, paso el array de números enteros hacia una collection de enteros... &lt;/span&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="color: green;"&gt;//y aquí mismo los ordeno

&lt;/span&gt;&lt;span style="color: #2b91af;"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt; MyCollection = (&lt;span style="color: blue;"&gt;from &lt;/span&gt;val &lt;span style="color: blue;"&gt;in &lt;/span&gt;Numbers.AsEnumerable()

&lt;span style="color: blue;"&gt;orderby &lt;/span&gt;val &lt;span style="color: green;"&gt;//descending

&lt;/span&gt;&lt;span style="color: blue;"&gt;select &lt;/span&gt;val

).ToList&amp;lt;&lt;span style="color: blue;"&gt;int&lt;/span&gt;&amp;gt;();

&lt;span style="color: green;"&gt;//ahora puedes recorrer los elementos de la colección
&lt;/span&gt;&lt;span style="color: blue;"&gt;foreach &lt;/span&gt;(&lt;span style="color: blue;"&gt;var &lt;/span&gt;number &lt;span style="color: blue;"&gt;in &lt;/span&gt;MyCollection)
   &lt;span style="color: #2b91af;"&gt;Console&lt;/span&gt;.WriteLine(number);&lt;/pre&gt;Vamos a hacer los mismo, otra vez, pero esta vez usaremos expresiones regulares:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;string &lt;/span&gt;n = &lt;span style="color: #a31515;"&gt;"456 234 123 67 987 890 123 444 768"&lt;/span&gt;;

&lt;span style="color: blue;"&gt;var &lt;/span&gt;numbers = System.Text.RegularExpressions.&lt;span style="color: #2b91af;"&gt;Regex&lt;/span&gt;.Split(n, &lt;span style="color: #a31515;"&gt;@"\s+"&lt;/span&gt;).OrderBy(x =&amp;gt; &lt;span style="color: blue;"&gt;int&lt;/span&gt;.Parse(x));

&lt;span style="color: blue;"&gt;foreach &lt;/span&gt;(&lt;span style="color: blue;"&gt;var &lt;/span&gt;number &lt;span style="color: blue;"&gt;in &lt;/span&gt;numbers)
&lt;span style="color: #2b91af;"&gt;Console&lt;/span&gt;.WriteLine(number);&lt;/pre&gt;Francamente, esta situación la hubiera resuelto haciendo Split de la cadena o usando Linq… pero alguien me recordó el poder de las Expresiones regulares combinado con Linq… y francamente ha quedado muy bien.&lt;br /&gt;
Ahí les dejo entonces, uds elijan cómo lo hacen.&lt;br /&gt;
Espero que les sea de utilidad ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-3876485735079197379?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/gE9tePKueUk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/3876485735079197379/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=3876485735079197379&amp;isPopup=true" title="1 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/3876485735079197379?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/3876485735079197379?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/gE9tePKueUk/dividir-string-e-ignorar-los-vacios.html" title="Dividir string e ignorar los vacíos" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-JOsydoEqijY/TlJ5seKCWsI/AAAAAAAABJQ/l2u6Cmc-URU/s72-c/split_string_thumb.jpg?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/08/dividir-string-e-ignorar-los-vacios.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQERX8-eyp7ImA9WhdQEEQ.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-7541274153729325924</id><published>2011-08-11T16:29:00.001-05:00</published><updated>2011-08-11T16:31:44.153-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-11T16:31:44.153-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>ASP.NET – Columnas calculadas en Datatable</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/RfOmlKvmHvzSkhVaXIXCJ6ApzjE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RfOmlKvmHvzSkhVaXIXCJ6ApzjE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/RfOmlKvmHvzSkhVaXIXCJ6ApzjE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/RfOmlKvmHvzSkhVaXIXCJ6ApzjE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-0zTYhX9-VCc/TkRKAss9LQI/AAAAAAAABHo/gxXN7BMLHIs/s1600/calculated_columns_aspnet.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://3.bp.blogspot.com/-0zTYhX9-VCc/TkRKAss9LQI/AAAAAAAABHo/gxXN7BMLHIs/s1600/calculated_columns_aspnet.jpg" /&gt;&lt;/a&gt;&lt;/div&gt;Les voy a mostrar una forma muy sencilla de añadirle una columna adicional al datatable, dicha columna puede formarse a partir de una o varias columnas del datatable, pero no necesariamente debe tomar alguna columna existente, como verán abajo en el punto 4.&lt;br /&gt;
Empecemos: Digamos que he llenado un datatable con el resultado de la sgte consulta:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;SELECT &lt;/span&gt;[ProductName], [UnitPrice],&amp;nbsp;&lt;/pre&gt;&lt;pre class="code"&gt;[Quantity] &lt;span style="color: blue;"&gt;FROM &lt;/span&gt;[dbo].[Product]&lt;/pre&gt;&lt;br /&gt;
dt = YourQuery();&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;1.- Obtener una columna calculada a partir de columnas del datatable:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
necesito obtener el total en dinero de UnitPrice x Quantity, para ello hacemos&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;dt.Columns.Add(&lt;span style="background: none repeat scroll 0% 0% rgb(255, 223, 0); color: #a31515;"&gt;"Total"&lt;/span&gt;, &lt;span style="color: blue;"&gt;GetType&lt;/span&gt;(&lt;span style="color: blue;"&gt;double&lt;/span&gt;), &lt;span style="background: none repeat scroll 0% 0% rgb(255, 223, 0); color: #a31515;"&gt;"UnitPrice*Quantity"&lt;/span&gt;)&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
de esta manera ya mi datatable poseerá una columna adicional llamada Total con el cálculo del Precio x Cantidad de productos.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;2.- Obtener una columna calculada a partir de una columna y otro valor:&lt;/b&gt;&lt;br /&gt;
multiplicar una columna con un valor numérico, así:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;dt.Columns.Add(&lt;span style="background: none repeat scroll 0% 0% rgb(255, 223, 0); color: #a31515;"&gt;"Total"&lt;/span&gt;, &lt;span style="color: blue;"&gt;GetType&lt;/span&gt;(&lt;span style="color: blue;"&gt;double&lt;/span&gt;), &lt;span style="background: none repeat scroll 0% 0% rgb(255, 223, 0); color: #a31515;"&gt;"UnitPrice*1.5"&lt;/span&gt;)&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;3.- Obtener una columna calculada mediante la evaluación de una condición:&lt;/b&gt;&lt;br /&gt;
la columna calculada se creará mediante una condición IIF&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;dt.Columns.Add(&lt;span style="background: none repeat scroll 0% 0% rgb(255, 223, 0); color: #a31515;"&gt;"UserName"&lt;/span&gt;, &lt;span style="color: blue;"&gt;GetType&lt;/span&gt;(&lt;span style="color: blue;"&gt;String&lt;/span&gt;), &lt;span style="background: none repeat scroll 0% 0% rgb(255, 223, 0); color: #a31515;"&gt;"iif(Name='','Anonymous',Name)"&lt;/span&gt;)&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;4.- Obtener una columna calculada de tipo correlativo:&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;Dim &lt;/span&gt;Correlativo &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;DataColumn &lt;/span&gt;= &lt;span style="color: blue;"&gt;New &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;DataColumn&lt;/span&gt;(&lt;span style="background: none repeat scroll 0% 0% rgb(255, 223, 0); color: #a31515;"&gt;"Correlativo"&lt;/span&gt;, &lt;span style="color: blue;"&gt;GetType&lt;/span&gt;(&lt;span style="color: blue;"&gt;Integer&lt;/span&gt;))
Correlativo.AutoIncrement = &lt;span style="color: blue;"&gt;True
&lt;/span&gt;Correlativo.AutoIncrementSeed = 1
dt.Columns.Add(Correlativo)&lt;/pre&gt;&lt;br /&gt;
Espero que les sea de utilidad ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-7541274153729325924?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/RvpILaoDM8c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/7541274153729325924/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=7541274153729325924&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/7541274153729325924?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/7541274153729325924?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/RvpILaoDM8c/aspnet-columnas-calculadas-en-datatable.html" title="ASP.NET – Columnas calculadas en Datatable" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-0zTYhX9-VCc/TkRKAss9LQI/AAAAAAAABHo/gxXN7BMLHIs/s72-c/calculated_columns_aspnet.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/08/aspnet-columnas-calculadas-en-datatable.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ADQHg9fCp7ImA9WhdRGUg.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-4192077849740651771</id><published>2011-08-08T12:22:00.002-05:00</published><updated>2011-08-09T23:49:31.664-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-09T23:49:31.664-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AJAX CONTROL TOOLKIT" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>ASP.NET - FileUpload desde ModalPopupExtender y UpdatePanel</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/XyMKyk6Qi6DTW-wEzYKXQsJvkAE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XyMKyk6Qi6DTW-wEzYKXQsJvkAE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/XyMKyk6Qi6DTW-wEzYKXQsJvkAE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/XyMKyk6Qi6DTW-wEzYKXQsJvkAE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://lh6.ggpht.com/-nCsJFdDd1NA/TkAa6NPVmpI/AAAAAAAABHg/bSXlkcc7ZF0/s1600-h/fileupload_from_modalpopup%25255B4%25255D.png"&gt;&lt;img align="left" alt="fileupload_from_modalpopup" border="0" height="350" src="http://lh5.ggpht.com/-PDK-8J8tWwg/TkAa6nSe0gI/AAAAAAAABHk/vYGH-52fPtA/fileupload_from_modalpopup_thumb%25255B2%25255D.png?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; margin-right: 0px;" title="fileupload_from_modalpopup" width="569" /&gt;&lt;/a&gt; Muchos piensan que esto no es posible: subir archivos al servidor desde un ModalPopup , el cual está dentro de un UpdatePanel, pues sí es posible.  &lt;br /&gt;
Resumiendo, el código debe tener esta forma:&lt;br /&gt;
&amp;lt;UpdatePanel &lt;span style="color: maroon;"&gt;ChildrenAsTriggers="true"&lt;/span&gt;&amp;gt;&lt;br /&gt;
&amp;lt;ContentTemplate&amp;gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;&amp;lt;Panel&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;FileUpload…+ &lt;/span&gt;&lt;span style="color: blue;"&gt;El botón que subirá tu archivo y guardará tu información, mi botón se llama btnSave&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;Otros controles…&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: blue;"&gt;&amp;lt;Panel&amp;gt;&lt;/span&gt;&lt;br /&gt;
&amp;lt;ModalPopupExtender /&amp;gt;&lt;br /&gt;
&amp;lt;/ContentTemplate&amp;gt;&lt;br /&gt;
&lt;span style="color: maroon;"&gt;&amp;lt;Triggers&amp;gt;     &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;asp:PostBackTrigger ControlID="btnSave" /&amp;gt;      &lt;br /&gt;
&amp;lt;/Triggers&amp;gt;&lt;/span&gt;&lt;br /&gt;
&amp;lt;/UpdatePanel&amp;gt;&lt;br /&gt;
Y ese es el resumen. Como pueden observar, la novedad del updatepanel es que tiene la propiedad ChildrenAsTriggers=”true” y la otra novedad es que antes de que cierre el updatepanel, se ha añadido el tag triggers, como ven en la imagen muy claramente.&lt;br /&gt;
Vamos a ver el ejemplo mediante código, copien esto en una nueva página aspx:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;html &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://www.w3.org/1999/xhtml"&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;head &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="Head1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Subir archivos desde el modalpopup dentro un Updatepanel&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;style &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="text/css"&amp;gt;
&lt;/span&gt;&lt;span style="color: maroon;"&gt;*
&lt;/span&gt;{
&lt;span style="color: red;"&gt;font-family&lt;/span&gt;: &lt;span style="color: blue;"&gt;Tahoma&lt;/span&gt;;
}
&lt;span style="color: maroon;"&gt;.modalPopup 
&lt;/span&gt;{
&lt;span style="color: red;"&gt;background-color&lt;/span&gt;:&lt;span style="color: blue;"&gt;orange&lt;/span&gt;;
&lt;span style="color: red;"&gt;border-width&lt;/span&gt;:&lt;span style="color: blue;"&gt;5px&lt;/span&gt;;
&lt;span style="color: red;"&gt;border-style&lt;/span&gt;:&lt;span style="color: blue;"&gt;solid&lt;/span&gt;;
&lt;span style="color: red;"&gt;padding&lt;/span&gt;:&lt;span style="color: blue;"&gt;3px&lt;/span&gt;;
}  

&lt;span style="color: maroon;"&gt;.modalBackground 
&lt;/span&gt;{
&lt;span style="color: red;"&gt;filter&lt;/span&gt;:&lt;span style="color: blue;"&gt;alpha(opacity=50)&lt;/span&gt;;
&lt;span style="color: red;"&gt;opacity&lt;/span&gt;:&lt;span style="color: blue;"&gt;0.7&lt;/span&gt;;
}      
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;head&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;form &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="form1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;ScriptManager &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="ScriptManager1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;ScriptManager&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;UpdatePanel &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="UpdatePanel1" &lt;/span&gt;&lt;span style="color: red;"&gt;ChildrenAsTriggers&lt;/span&gt;&lt;span style="color: blue;"&gt;="true" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;HyperLink &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="hplOpenModal" &lt;/span&gt;&lt;span style="color: red;"&gt;NavigateUrl&lt;/span&gt;&lt;span style="color: blue;"&gt;="javascript:;" 
&lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;&lt;/span&gt;Mostrar ModalPopup&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;HyperLink&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Panel &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="pnlFileAdd" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;Style&lt;/span&gt;&lt;span style="color: blue;"&gt;="&lt;/span&gt;&lt;span style="color: red;"&gt;display&lt;/span&gt;&lt;span style="color: blue;"&gt;: none" 
&lt;/span&gt;&lt;span style="color: red;"&gt;CssClass&lt;/span&gt;&lt;span style="color: blue;"&gt;="modalPopup" &lt;/span&gt;&lt;span style="color: red;"&gt;Height&lt;/span&gt;&lt;span style="color: blue;"&gt;="100px" &lt;/span&gt;&lt;span style="color: red;"&gt;Width&lt;/span&gt;&lt;span style="color: blue;"&gt;="300px"&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;FileUpload &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="FileUpload1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" /&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Button &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="btnSave" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="Subir archivo" /&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Button &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="btnCancel" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="Cancelar" /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Panel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;ajaxToolkit&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;ModalPopupExtender &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="ModalPopupExtender1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" 
&lt;/span&gt;&lt;span style="color: red;"&gt;TargetControlID&lt;/span&gt;&lt;span style="color: blue;"&gt;="hplOpenModal" &lt;/span&gt;&lt;span style="color: red;"&gt;PopupControlID&lt;/span&gt;&lt;span style="color: blue;"&gt;="pnlFileAdd" 
&lt;/span&gt;&lt;span style="color: red;"&gt;BackgroundCssClass&lt;/span&gt;&lt;span style="color: blue;"&gt;="modalBackground" &lt;/span&gt;&lt;span style="color: red;"&gt;CancelControlID&lt;/span&gt;&lt;span style="color: blue;"&gt;="btnCancel" &lt;/span&gt;&lt;span style="color: red;"&gt;Y&lt;/span&gt;&lt;span style="color: blue;"&gt;="100" /&amp;gt;

&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;ContentTemplate&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;Triggers&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;PostBackTrigger &lt;/span&gt;&lt;span style="color: red;"&gt;ControlID&lt;/span&gt;&lt;span style="color: blue;"&gt;="btnSave" /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;Triggers&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;UpdatePanel&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;form&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;html&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Esto va en el código VB.NET:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;Protected Sub &lt;/span&gt;btnSave_Click(sender &lt;span style="color: blue;"&gt;As Object&lt;/span&gt;, e &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;EventArgs&lt;/span&gt;) &lt;span style="color: blue;"&gt;Handles &lt;/span&gt;btnSave.Click

&lt;span style="color: blue;"&gt;If &lt;/span&gt;FileUpload1.HasFile &lt;span style="color: blue;"&gt;Then
&lt;/span&gt;FileUpload1.SaveAs(Server.MapPath(&lt;span style="background-attachment: scroll; background-clip: initial; background-color: #ffdf00; background-image: none; background-origin: initial; background-position: 0% 0%; background-repeat: repeat repeat; color: #a31515;"&gt;"~/uploads/"&lt;/span&gt;) &amp;amp; FileUpload1.FileName)
&lt;span style="color: blue;"&gt;End If

End Sub&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Se supone que en la raiz de la applicación hay una carpeta llamada Uploads, donde se guardará el archivo. Eso sería todo.&lt;br /&gt;
Espero que les sea de utilidad ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-4192077849740651771?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/GHjIbxMkUfM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/4192077849740651771/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=4192077849740651771&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/4192077849740651771?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/4192077849740651771?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/GHjIbxMkUfM/aspnet-subir-archivos-desde.html" title="ASP.NET - FileUpload desde ModalPopupExtender y UpdatePanel" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-PDK-8J8tWwg/TkAa6nSe0gI/AAAAAAAABHk/vYGH-52fPtA/s72-c/fileupload_from_modalpopup_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/08/aspnet-subir-archivos-desde.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcFSH08cSp7ImA9WhdSGE0.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-1911622004533731752</id><published>2011-07-27T16:43:00.001-05:00</published><updated>2011-07-27T16:43:39.379-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-27T16:43:39.379-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>ASP.NET – Validar que se seleccione al menos un elemento del checkboxlist</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/041Q3a2DeGTGBPsQkt2FoFrBFXQ/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/041Q3a2DeGTGBPsQkt2FoFrBFXQ/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/041Q3a2DeGTGBPsQkt2FoFrBFXQ/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/041Q3a2DeGTGBPsQkt2FoFrBFXQ/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://lh3.ggpht.com/-Jjv3V8w-RWk/TjCGPuw0yyI/AAAAAAAABG8/eI-_MOnN0kM/s1600-h/checkboxlist_validate%25255B3%25255D.png"&gt;&lt;img align="left" alt="checkboxlist_validate" border="0" height="133" src="http://lh5.ggpht.com/-KjKetkhTeww/TjCGQcsL-CI/AAAAAAAABHA/RFZC7T_3vvs/checkboxlist_validate_thumb%25255B1%25255D.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; margin-left: 0px; margin-right: 0px;" title="checkboxlist_validate" width="218" /&gt;&lt;/a&gt; Este es una pregunta bastante frecuente en los foros, así que vale la apena incluirlo en el blog para usarse como referencia.&lt;br /&gt;
Para asegurarnos que se seleccione al menos un elemento del checkboxlist, vamos a usar el control de validación llamado CustomValidator, el cual trabaja con una función javascript y adicionalmente verifica del lado del servidor (por si las pulgas) ;)&lt;br /&gt;
Vamos al código de una vez:&lt;br /&gt;
añade una página aspx&amp;nbsp; y pega el sgte código:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;html&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;head &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Validar que se seleccione al menos un elemento del checkboxlist&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;

&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;script &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="text/javascript"&amp;gt;
function &lt;/span&gt;CheckIfCheckBoxListIsChecked(source, args) {
&lt;span style="color: blue;"&gt;var &lt;/span&gt;chkList = document.getElementById(&lt;span style="color: maroon;"&gt;'&lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: maroon;"&gt;&amp;lt;%&lt;/span&gt;&lt;span style="color: maroon;"&gt;= chkFindAt.ClientID &lt;/span&gt;&lt;span style="background: none repeat scroll 0% 0% yellow; color: maroon;"&gt;%&amp;gt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;'&lt;/span&gt;);
&lt;span style="color: blue;"&gt;var &lt;/span&gt;chk = chkList.getElementsByTagName(&lt;span style="color: maroon;"&gt;"input"&lt;/span&gt;);
&lt;span style="color: blue;"&gt;for &lt;/span&gt;(&lt;span style="color: blue;"&gt;var &lt;/span&gt;i = 0; i &amp;lt; chk.length; i++) {
&lt;span style="color: blue;"&gt;if &lt;/span&gt;(chk[i].checked) {
args.IsValid = &lt;span style="color: blue;"&gt;true&lt;/span&gt;;
&lt;span style="color: blue;"&gt;return&lt;/span&gt;;
}
}
args.IsValid = &lt;span style="color: blue;"&gt;false&lt;/span&gt;;
}      
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;script&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;

&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;head&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;form &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="form1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;

&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;CheckBoxList &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="chkFindAt" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server"&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;ListItem &lt;/span&gt;&lt;span style="color: red;"&gt;Value&lt;/span&gt;&lt;span style="color: blue;"&gt;="1" &lt;/span&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="ASP.NET"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;ListItem&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;ListItem &lt;/span&gt;&lt;span style="color: red;"&gt;Value&lt;/span&gt;&lt;span style="color: blue;"&gt;="2" &lt;/span&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="JAVA"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;ListItem&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;ListItem &lt;/span&gt;&lt;span style="color: red;"&gt;Value&lt;/span&gt;&lt;span style="color: blue;"&gt;="3" &lt;/span&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="PHP"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;ListItem&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;CheckBoxList&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;CustomValidator &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="CustomValidator1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" 
&lt;/span&gt;&lt;span style="color: red;"&gt;ClientValidationFunction&lt;/span&gt;&lt;span style="color: blue;"&gt;="CheckIfCheckBoxListIsChecked"
&lt;/span&gt;&lt;span style="color: red;"&gt;OnServerValidate&lt;/span&gt;&lt;span style="color: blue;"&gt;="CheckIfCheckBoxListIsCheckedServer" 
&lt;/span&gt;&lt;span style="color: red;"&gt;ErrorMessage&lt;/span&gt;&lt;span style="color: blue;"&gt;="Seleccione al menos un elemento!"
&lt;/span&gt;&lt;span style="color: red;"&gt;Display&lt;/span&gt;&lt;span style="color: blue;"&gt;="Dynamic"&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;CustomValidator&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;

&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;asp&lt;/span&gt;&lt;span style="color: blue;"&gt;:&lt;/span&gt;&lt;span style="color: maroon;"&gt;Button &lt;/span&gt;&lt;span style="color: red;"&gt;ID&lt;/span&gt;&lt;span style="color: blue;"&gt;="Button1" &lt;/span&gt;&lt;span style="color: red;"&gt;runat&lt;/span&gt;&lt;span style="color: blue;"&gt;="server" &lt;/span&gt;&lt;span style="color: red;"&gt;Text&lt;/span&gt;&lt;span style="color: blue;"&gt;="Button" /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;form&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;html&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;Y el código del lado del servidor sería el sgte:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;Protected Sub &lt;/span&gt;CheckIfCheckBoxListIsCheckedServer(&lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;source &lt;span style="color: blue;"&gt;As Object&lt;/span&gt;, _
&lt;span style="color: blue;"&gt;ByVal &lt;/span&gt;args &lt;span style="color: blue;"&gt;As &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;ServerValidateEventArgs&lt;/span&gt;) &lt;span style="color: blue;"&gt;Handles &lt;/span&gt;CustomValidator1.ServerValidate

&lt;span style="color: blue;"&gt;If &lt;/span&gt;chkFindAt.SelectedIndex = -1 &lt;span style="color: blue;"&gt;Then
&lt;/span&gt;args.IsValid = &lt;span style="color: blue;"&gt;False
Else
&lt;/span&gt;args.IsValid = &lt;span style="color: blue;"&gt;True
End If

End Sub&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Como han podido observar, la función del lado del cliente (javascript) es llamada mediante ClientValidationFunction y el método del lado del servidor es llamado a través de OnServerValidate.&lt;br /&gt;
&lt;br /&gt;
Así de simple, cualquier duda, consulten nomás.&lt;br /&gt;
&lt;br /&gt;
Espero que les sea de utilidad ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-1911622004533731752?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/xKBGf0RkWKY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/1911622004533731752/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=1911622004533731752&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/1911622004533731752?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/1911622004533731752?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/xKBGf0RkWKY/aspnet-validar-que-se-seleccione-al.html" title="ASP.NET – Validar que se seleccione al menos un elemento del checkboxlist" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-KjKetkhTeww/TjCGQcsL-CI/AAAAAAAABHA/RFZC7T_3vvs/s72-c/checkboxlist_validate_thumb%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/07/aspnet-validar-que-se-seleccione-al.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIBR3c4cCp7ImA9WhdSEks.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-5303351814160987548</id><published>2011-07-21T10:35:00.000-05:00</published><updated>2011-07-21T10:35:56.938-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-21T10:35:56.938-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="HTML" /><title>ASP.NET - Subir archivos al servidor desde pagina html</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nmiTYjES3X9Uu1_4slOKqWROxLc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nmiTYjES3X9Uu1_4slOKqWROxLc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nmiTYjES3X9Uu1_4slOKqWROxLc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nmiTYjES3X9Uu1_4slOKqWROxLc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://lh6.ggpht.com/-zsO4QQu60RU/TihHA5wCPAI/AAAAAAAABG0/HvxUdsvun2I/s1600-h/file_to_server%25255B5%25255D.png"&gt;&lt;img alt="file_to_server" border="0" height="150" src="http://lh4.ggpht.com/-7K-lOk1ESpM/TihHBWoGP8I/AAAAAAAABG4/NbAdPyY72ng/file_to_server_thumb%25255B3%25255D.png?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; margin-right: 0px;" title="file_to_server" width="411" /&gt;&lt;/a&gt; &lt;br /&gt;
Para el amigo que preguntaba cómo se pueden subir archivos al servidor, pero desde una página html.&lt;br /&gt;
El proceso es muy simple, son sólo 2 pasos:&lt;br /&gt;
1.- Añades una página html a tu proyecto y le insertas este código:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;html &lt;/span&gt;&lt;span style="color: red;"&gt;xmlns&lt;/span&gt;&lt;span style="color: blue;"&gt;="http://www.w3.org/1999/xhtml"&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;head&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;title&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;style &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="text/css"&amp;gt;
&lt;/span&gt;&lt;span style="color: maroon;"&gt;*&lt;/span&gt;{&lt;span style="color: red;"&gt;font-family&lt;/span&gt;: &lt;span style="color: blue;"&gt;Trebuchet MS, Arial&lt;/span&gt;;}
&lt;span style="color: maroon;"&gt;body&lt;/span&gt;{&lt;span style="color: red;"&gt;background-color&lt;/span&gt;: &lt;span style="color: blue;"&gt;lightgreen&lt;/span&gt;;}
&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;style&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;head&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;fieldset&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;legend&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;Subir archivos al servidor mediante página html&lt;span style="color: blue;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;legend&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;form &lt;/span&gt;&lt;span style="color: red;"&gt;method&lt;/span&gt;&lt;span style="color: blue;"&gt;="post" &lt;/span&gt;&lt;span style="color: red;"&gt;action&lt;/span&gt;&lt;span style="color: blue;"&gt;="WebForm1.aspx" &lt;/span&gt;&lt;span style="color: red;"&gt;enctype&lt;/span&gt;&lt;span style="color: blue;"&gt;="multipart/form-data"&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;input &lt;/span&gt;&lt;span style="color: red;"&gt;name&lt;/span&gt;&lt;span style="color: blue;"&gt;="File1" &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="File1" &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="file" /&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;&lt;/span&gt;&lt;span style="color: maroon;"&gt;input &lt;/span&gt;&lt;span style="color: red;"&gt;id&lt;/span&gt;&lt;span style="color: blue;"&gt;="Submit1" &lt;/span&gt;&lt;span style="color: red;"&gt;type&lt;/span&gt;&lt;span style="color: blue;"&gt;="submit" &lt;/span&gt;&lt;span style="color: red;"&gt;value&lt;/span&gt;&lt;span style="color: blue;"&gt;="submit" /&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;p&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;form&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;fieldset&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;body&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color: maroon;"&gt;html&lt;/span&gt;&lt;span style="color: blue;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Fíjate en la línea donde va la etiqueta form, el action=”WebForm1.aspx”, con eso le decimos que la operación es gestionada por dicha página aspx.&lt;br /&gt;
&lt;br /&gt;
2.- Este sería el código asp.net:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;protected void &lt;/span&gt;Page_Load(&lt;span style="color: blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af;"&gt;EventArgs &lt;/span&gt;e)
{
&lt;span style="color: #2b91af;"&gt;HttpFileCollection &lt;/span&gt;files = Request.Files;

&lt;span style="color: blue;"&gt;for &lt;/span&gt;(&lt;span style="color: blue;"&gt;int &lt;/span&gt;i = 0; i &amp;lt; files.Count; i++)
{
&lt;span style="color: #2b91af;"&gt;HttpPostedFile &lt;/span&gt;f = files[i];
f.SaveAs(Server.MapPath(&lt;span style="background: none repeat scroll 0% 0% rgb(255, 223, 0); color: #a31515;"&gt;"."&lt;/span&gt;) + &lt;span style="color: #a31515;"&gt;@"\Uploads\" &lt;/span&gt;+ f.FileName);
}
}&lt;/pre&gt;&lt;br /&gt;
Ese código permite guardar varios archivos en el servidor.&lt;br /&gt;
&lt;br /&gt;
Si tú sólo quieres subir un archivo, puedes usar este código más reducido:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;Request.Files[0].SaveAs(Server.MapPath(&lt;span style="background: none repeat scroll 0% 0% rgb(255, 223, 0); color: #a31515;"&gt;"."&lt;/span&gt;) + &lt;span style="color: #a31515;"&gt;@"\Uploads\" &lt;/span&gt;+ &lt;span style="background: none repeat scroll 0% 0% rgb(255, 223, 0); color: #a31515;"&gt;"FileName"&lt;/span&gt;);&lt;/pre&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Eso sería todo.&lt;br /&gt;
&lt;br /&gt;
Espero que les sea de utilidad ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-5303351814160987548?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/F9Jx-b8mAws" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/5303351814160987548/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=5303351814160987548&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/5303351814160987548?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/5303351814160987548?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/F9Jx-b8mAws/aspnet-subir-archivos-al-servidor-desde.html" title="ASP.NET - Subir archivos al servidor desde pagina html" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-7K-lOk1ESpM/TihHBWoGP8I/AAAAAAAABG4/NbAdPyY72ng/s72-c/file_to_server_thumb%25255B3%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/07/aspnet-subir-archivos-al-servidor-desde.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEASHw6eip7ImA9WhdSEE0.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-1757137641312233789</id><published>2011-07-18T10:50:00.015-05:00</published><updated>2011-07-18T10:57:29.212-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-18T10:57:29.212-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><title>ASP.NET - convertir o tratar un string como si fuera una url</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/D77HjRXkOgJ7kmDi1dLMe-VZ7Ko/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/D77HjRXkOgJ7kmDi1dLMe-VZ7Ko/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/D77HjRXkOgJ7kmDi1dLMe-VZ7Ko/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/D77HjRXkOgJ7kmDi1dLMe-VZ7Ko/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://lh3.ggpht.com/-Hic2iGfGhyc/TiRWEAGWtrI/AAAAAAAABGQ/REguby9pZvw/s1600-h/new_uri%25255B4%25255D.png"&gt;&lt;img align="left" alt="new_uri" border="0" height="199" src="http://lh6.ggpht.com/-HGYq57tGMHI/TiRWEiorJhI/AAAAAAAABGU/--QngZqkSBI/new_uri_thumb%25255B2%25255D.png?imgmax=800" style="border-bottom: 0px; border-left: 0px; border-right: 0px; border-top: 0px; display: inline; margin-left: 0px; margin-right: 0px;" title="new_uri" width="268" /&gt;&lt;/a&gt; Cómo haces para obtener los parámetros querystring de una url? simple, solamente hacemos:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;string &lt;/span&gt;qs = Request.QueryString[&lt;span style="background: none repeat scroll 0% 0% rgb(255, 223, 0); color: #a31515;"&gt;"query1"&lt;/span&gt;];&lt;/pre&gt;&lt;br /&gt;
&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;No hay nada más que hacer… fue muy simple.&lt;br /&gt;
&lt;br /&gt;
Y por qué fue muy simple?&lt;br /&gt;
porque nosotros sabemos que estamos haciendo uso de un dato que la petición web ha traído.&lt;br /&gt;
&lt;br /&gt;
Pero qué pasa si lo que queremos es obtener los parámetros de consulta de una petición web que no se ha hecho?&amp;nbsp; &lt;br /&gt;
&lt;br /&gt;
Osea, tengo la url guardada en un string, pero no he accedido a esa página, sin embargo quiero obtener la información de dicha url.&lt;br /&gt;
Digamos que el siguiente string es lo que quiero analizar como si fuera una petición web:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="background: none repeat scroll 0% 0% rgb(255, 223, 0); color: #a31515;"&gt;"http://www.midominio.com:8081/pagina.aspx?query1=1&amp;amp;query2=2"&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;
como ven, es simplemente un string… de este string quiero extraer el puerto, el host, los parámetros de consulta, en fin.. todo lo que necesite.&lt;br /&gt;
&lt;br /&gt;
Algunos dirán: “fácil pes, haz un split y obtienes cada cosa que quieres”&lt;br /&gt;
&lt;br /&gt;
Si pues, eso podría funcionar, pero no es el método que aquí recomendamos. A continuación verás cómo solucionar este simple problemilla:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;protected void &lt;/span&gt;Page_Load(&lt;span style="color: blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color: #2b91af;"&gt;EventArgs &lt;/span&gt;e)
{
&lt;span style="color: blue;"&gt;string &lt;/span&gt;qs = Request.QueryString[&lt;span style="background: none repeat scroll 0% 0% rgb(255, 223, 0); color: #a31515;"&gt;"query1"&lt;/span&gt;];

&lt;span style="color: #2b91af;"&gt;Uri &lt;/span&gt;url = &lt;span style="color: blue;"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af;"&gt;Uri&lt;/span&gt;(&lt;span style="background: none repeat scroll 0% 0% rgb(255, 223, 0); color: #a31515;"&gt;"http://www.midominio.com:8081/pagina.aspx?query1=1&amp;amp;query2=2"&lt;/span&gt;);

&lt;span style="color: blue;"&gt;int &lt;/span&gt;port = url.Port;
&lt;span style="color: blue;"&gt;string &lt;/span&gt;host = url.Host;

&lt;span style="color: blue;"&gt;string &lt;/span&gt;queryStrings = url.Query;

&lt;span style="color: blue;"&gt;string &lt;/span&gt;query1 = &lt;span style="color: #2b91af;"&gt;HttpUtility&lt;/span&gt;.ParseQueryString(queryStrings).Get(&lt;span style="background: none repeat scroll 0% 0% rgb(255, 223, 0); color: #a31515;"&gt;"query1"&lt;/span&gt;);
&lt;span style="color: blue;"&gt;string &lt;/span&gt;query2 = &lt;span style="color: #2b91af;"&gt;HttpUtility&lt;/span&gt;.ParseQueryString(queryStrings).Get(&lt;span style="background: none repeat scroll 0% 0% rgb(255, 223, 0); color: #a31515;"&gt;"query2"&lt;/span&gt;);

}&lt;/pre&gt;&lt;br /&gt;
Les explicaré, hice uso de la clase uri, dándole como parámetro mi url a analizar.&lt;br /&gt;
&lt;br /&gt;
Luego de esto es muy fácil obtener lo que deseamos. El código de arriba me permite obtener el puerto, el host, los parámetros querystring y más información.&lt;br /&gt;
Sólo dale una chequeada a la clase &lt;a href="http://msdn.microsoft.com/es-es/library/system.uri%28v=VS.90%29.aspx"&gt;Uri&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Espero que les sea de utilidad ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-1757137641312233789?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/dfhf7gdDmBQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/1757137641312233789/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=1757137641312233789&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/1757137641312233789?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/1757137641312233789?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/dfhf7gdDmBQ/aspnet-convertir-o-tratar-un-string.html" title="ASP.NET - convertir o tratar un string como si fuera una url" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-HGYq57tGMHI/TiRWEiorJhI/AAAAAAAABGU/--QngZqkSBI/s72-c/new_uri_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/07/aspnet-convertir-o-tratar-un-string.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU4HRH07cCp7ImA9WhdSEEU.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-1050364548757809477</id><published>2011-07-04T14:48:00.006-05:00</published><updated>2011-07-19T10:05:35.308-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-19T10:05:35.308-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="Miscelaneas" /><title>La información que compartimos al usar aplicaciones Facebook</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gYuJXtH82Qvb3ejAdnqGQOBLsw8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gYuJXtH82Qvb3ejAdnqGQOBLsw8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gYuJXtH82Qvb3ejAdnqGQOBLsw8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gYuJXtH82Qvb3ejAdnqGQOBLsw8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Dado el tremendo éxito de Facebook, muchas aplicaciones aprovechan este panal de usuarios para dar a conocer sus aplicaciones.&lt;br /&gt;
Es así que si nosotros queremos usar alguna de las muchas aplicaciones que se cuelgan de facebook, simplemente tenemos que autorizar a que la aplicación acceda a algunos de nuestros datos y con eso basta, Facebook y su API se encargan de gestionar el resto y nosotros sólo tenemos que confiar en que Facebook no compartirá nuestra información crítica.&lt;br /&gt;
Pero realmente sabemos qué información compartimos?&lt;br /&gt;
Al yo tener esta duda, me he puesto a investigar este tema y he encontrado la respuesta.&lt;br /&gt;
Para ello he desarrollado una pequeña aplicación para Facebook llamada Easy To Do, elaborada con C# y ASP.NET, también me he descargado el &lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=24998" target="_blank"&gt;Facebook Developer Toolkit&lt;/a&gt; y lo he instalado en mi PC.&lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/-kQ4TKcWprbE/ThHe3w5z-AI/AAAAAAAABFI/YgA3K68fFYM/s1600-h/facebook_app%25255B4%25255D.png"&gt;&lt;img alt="facebook_app" border="0" height="292" src="http://lh4.ggpht.com/-9F-pDSPcJFc/ThHe4YAlCHI/AAAAAAAABFM/UxcRaoyML7U/facebook_app_thumb%25255B2%25255D.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="facebook_app" width="569" /&gt;&lt;/a&gt; &lt;br /&gt;
Pero este post no trata sobre la creación de aplicaciones para Facebook, sino sobre qué datos proporciono al autorizar a una aplicación acceder a mi información?&lt;br /&gt;
Bueno, luego que instalé el Toolkit, hice referencia a Facebook.dll y… analizando un poco el ensamblado, encontré que hay una clase User, el cual posee las siguientes propiedades (observe las imágenes a continuación):&lt;br /&gt;
&lt;a href="http://lh6.ggpht.com/-fuI3v0p5IuU/ThHe4_xhu0I/AAAAAAAABFQ/ehZ3Ppuz8fE/s1600-h/facebook_app2%25255B5%25255D.png"&gt;&lt;img alt="facebook_app2" border="0" height="209" src="http://lh5.ggpht.com/-DWB2CJLn5GQ/ThHe5ulZ_sI/AAAAAAAABFU/ijAEmNvLZFI/facebook_app2_thumb%25255B3%25255D.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; margin-left: 0px; margin-right: 0px;" title="facebook_app2" width="470" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/-sBg7hFdM414/ThHe6NRG4JI/AAAAAAAABFY/XvvjRmmdKPY/s1600-h/facebook_app3%25255B9%25255D.png"&gt;&lt;img alt="facebook_app3" border="0" height="202" src="http://lh6.ggpht.com/-1NebD_2CkAc/ThHe7NGEQDI/AAAAAAAABFc/TeJ1TkhBvwU/facebook_app3_thumb%25255B5%25255D.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="facebook_app3" width="470" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;a href="http://lh3.ggpht.com/-6qdYOkgtDi0/ThHe7jnDj1I/AAAAAAAABFg/8nqhUnKcF0U/s1600-h/facebook_app4%25255B3%25255D.png"&gt;&lt;img alt="facebook_app4" border="0" height="200" src="http://lh4.ggpht.com/-PWH8rfEpZbc/ThHe8QapXUI/AAAAAAAABFk/1tcbktbOCrM/facebook_app4_thumb%25255B1%25255D.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="facebook_app4" width="443" /&gt;&lt;/a&gt; &lt;br /&gt;
&lt;a href="http://lh4.ggpht.com/-AYnZ8GQaXc4/ThHe9BECULI/AAAAAAAABFo/nR8Smudsetw/s1600-h/facebook_app5%25255B3%25255D.png"&gt;&lt;img alt="facebook_app5" border="0" height="198" src="http://lh6.ggpht.com/-koKZSc-mu5g/ThHe-K1YqGI/AAAAAAAABFs/jbZsU4d7ihE/facebook_app5_thumb%25255B1%25255D.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="facebook_app5" width="447" /&gt;&lt;/a&gt; &lt;br /&gt;
Cuáles son las buenas noticias? que no comparte toda nuestra información, como el email ni la contraseña, como se suponía que tenía que ser... pero teníamos que confirmarlo no es cierto?&lt;br /&gt;
&lt;br /&gt;
Entonces, la única forma de que dichos propietarios de las aplicaciones que usamos se comuniquen con nosotros es a través de Facebook, aunque también pueden enviarnos mensajes a nuestro correo (a través de Facebook).&lt;br /&gt;
&lt;br /&gt;
A continuación veremos una pantalla algo más elaborada... en la que el usuario está accediendo a proporcionar mucha más información.&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-nb6fbamopDA/ThJZmBY11oI/AAAAAAAABFw/FehFv3AJ5S8/s1600/fb.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://4.bp.blogspot.com/-nb6fbamopDA/ThJZmBY11oI/AAAAAAAABFw/FehFv3AJ5S8/s1600/fb.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
En los próximos posts vamos a avanzar juntos en el desarrollo de una aplicación llamada Easy To Do, que funcione especialmente para Facebook… si están interesados claro.&lt;br /&gt;
Espero que les sea de utilidad ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-1050364548757809477?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/53YeQqGbTqw" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/1050364548757809477/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=1050364548757809477&amp;isPopup=true" title="2 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/1050364548757809477?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/1050364548757809477?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/53YeQqGbTqw/la-informacion-que-compartimos-al-usar.html" title="La información que compartimos al usar aplicaciones Facebook" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-9F-pDSPcJFc/ThHe4YAlCHI/AAAAAAAABFM/UxcRaoyML7U/s72-c/facebook_app_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/07/la-informacion-que-compartimos-al-usar.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cMRXY9eCp7ImA9WhdbEE0.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-5892311602574127009</id><published>2011-06-30T14:10:00.006-05:00</published><updated>2011-10-07T10:24:44.860-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-07T10:24:44.860-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Base de datos" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL SERVER" /><title>SQL SERVER - Excluyendo columnas del GROUP BY</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Q94IBge8iMI9tlkLeFnsinZZb3s/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q94IBge8iMI9tlkLeFnsinZZb3s/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Q94IBge8iMI9tlkLeFnsinZZb3s/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Q94IBge8iMI9tlkLeFnsinZZb3s/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;a href="http://lh5.ggpht.com/-UrXDpig5d64/TgzJy97F3FI/AAAAAAAABFA/vYrZ6aGbN9U/s1600-h/distinct_sql%25255B4%25255D.jpg"&gt;&lt;img align="left" alt="distinct_sql" border="0" height="340" src="http://lh4.ggpht.com/-j_qXlaCvmUo/TgzJzSo6jiI/AAAAAAAABFE/O3xfK1eaFU4/distinct_sql_thumb%25255B2%25255D.jpg?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline; margin-left: 0px; margin-right: 0px;" title="distinct_sql" width="336" /&gt;&lt;/a&gt; Bueno, el título es medio confuso… pero la idea es intentar recuperar de una tabla de la bd, un conjunto de filas distintas, y que además en su contenido incluyan una fila que no ha sido evaluada en el DISTINCT.&lt;br /&gt;
En otras palabras:   &lt;br /&gt;
algunas veces no queremos que se evalúen todas las columnas… por ejemplo una columna fecha… dado que siempre va a ser distinta, pues la fecha incluye minutos, segundos , milisegundos, etc y entonces siempre cada fila será distinta… por lo que lo más sabio es excluir la fecha de la evaluación del DISTINCT (en tu caso puede ser otro campo, no necesariamente la fecha).&lt;br /&gt;
&lt;b&gt;Recordatorio&lt;/b&gt;:   &lt;br /&gt;
Como sabemos el DISTINCT se aplica&amp;nbsp; a toda la fila… y no a sólo algunas columnas, osea, esto no funciona:   &lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;SELECT DISTINCT&lt;/span&gt;(columna1), columna2, columna3&lt;/pre&gt;
Si funcionara sería maravilloso.&lt;br /&gt;
Y entonces Uds me preguntan:&lt;br /&gt;
Y cómo logramos excluir algunas columnas del DISTINCT?&lt;br /&gt;
Ajá, para ello hacemos un truco sencillo:&lt;br /&gt;
1.- A la columna que no queremos evaluar la ponemos como argumento de una función SQL, por ejemplo MAX(columna1) o MIN(Columna2)&lt;br /&gt;
2.- Dado que estamos usando funciones de agrupamiento, tenemos que usar entonces también la cláusula GROUP BY… y como dice la teoría, en el GROUP BY van las columnas que no han sido incluídas en alguna función de agrupamiento. Ejm:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;SELECT &lt;/span&gt;userid, documentid, &lt;span style="color: blue;"&gt;MAX&lt;/span&gt;(RegisteredDate)
&lt;span style="color: blue;"&gt;FROM &lt;/span&gt;Table_Document
&lt;span style="color: green;"&gt;--Opcional: WHERE userid = @userid
&lt;/span&gt;&lt;span style="color: blue;"&gt;GROUP BY &lt;/span&gt;userid, documentid

&lt;span style="color: green;"&gt;--Opcional: ORDER BY MAX(RegisteredDate)&lt;/span&gt;&lt;/pre&gt;
Los puntos claves aquí son la función de agrupamiento, lo cual me permite evadir la columna RegisteredDate, y el GROUP BY, el cual es necesario al usar funciones de agrupamiento. &lt;br /&gt;
Se habrán dado cuenta que no uso el elemento DISTINCT ... para esta solución (paradójicamente) no la necesito.&lt;br /&gt;
Ahora hay otro tema que hay que considerar aquí: cómo hago si las columnas que quiero incluir en mi consulta, pero al mismo tiempo quiero excluir del GROUP BY son de tipo texto? (varchar, nvarchar,,,etc)&lt;br /&gt;
Interesante pregunta no?&lt;br /&gt;
Suponiendo que tengo una columna de tipo varchar, lo que tendría que hacer es envolver la columna de esta manera:&lt;span style="color: magenta;"&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;
&lt;span style="color: magenta;"&gt;MAX&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: magenta;"&gt;Cast&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;column2 &lt;span style="color: blue;"&gt;as varchar&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;&lt;span style="color: magenta;"&gt;max&lt;/span&gt;&lt;span style="color: grey;"&gt;))) &lt;/span&gt;&lt;span style="color: blue;"&gt;AS &lt;/span&gt;Column2&lt;br /&gt;
Y con eso se soluciona el asunto. &lt;br /&gt;
Espero que les sea de utilidad ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-5892311602574127009?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/yOs9WnKpO6M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/5892311602574127009/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=5892311602574127009&amp;isPopup=true" title="0 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/5892311602574127009?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/5892311602574127009?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/yOs9WnKpO6M/sql-server-filas-distinct-pero-con.html" title="SQL SERVER - Excluyendo columnas del GROUP BY" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-j_qXlaCvmUo/TgzJzSo6jiI/AAAAAAAABFE/O3xfK1eaFU4/s72-c/distinct_sql_thumb%25255B2%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/06/sql-server-filas-distinct-pero-con.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UBRHk_eCp7ImA9WhZUGUU.&quot;"><id>tag:blogger.com,1999:blog-5229264599062948217.post-7491939948351700327</id><published>2011-06-13T11:05:00.002-05:00</published><updated>2011-06-13T11:07:35.740-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-06-13T11:07:35.740-05:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Base de datos" /><category scheme="http://www.blogger.com/atom/ns#" term="SQL SERVER" /><title>SQL SERVER - Ordenar datos de una columna, poniendo NULL al final</title><content type="html">
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/zRDfP--vLdZtRAl37ky-TY0kk-o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zRDfP--vLdZtRAl37ky-TY0kk-o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/zRDfP--vLdZtRAl37ky-TY0kk-o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/zRDfP--vLdZtRAl37ky-TY0kk-o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;Digamos que se da el caso que tenemos una lista de tareas por realizar, algunas de las cuales no tienen fecha definida de culminación, por lo tanto se han guardado en la base de datos con fecha NULL.&lt;br /&gt;
Luego, imaginemos que tenemos que mostrar estas tareas en una grilla… si nosotros hacemos una consulta para obtener todas las tareas, y las ordenamos por fecha de culminación… veremos desagradablemente que las tareas con fecha NULL se mostrarán primero que las demás… lo cual nos hace recordar que un NULL siempre es menor que un dato no NULL… ejemplo:&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;SELECT &lt;/span&gt;[taskid],[userid],[title],[progress],[duedate]

&lt;span style="color: blue;"&gt;FROM &lt;/span&gt;[dbo].[tm_task]

&lt;span style="color: blue;"&gt;ORDER BY &lt;/span&gt;[duedate] &lt;span style="color: blue;"&gt;ASC
&lt;a href="http://lh3.ggpht.com/-BHsho3JUGrY/TfY1Bxb1f5I/AAAAAAAABEI/G43Lm1Cx0a8/s1600-h/sort_order_null_end%25255B4%25255D.png"&gt;&lt;img alt="sort_order_null_end" border="0" height="218" src="http://lh5.ggpht.com/-qZnXU0SYPRk/TfY1CTFVp6I/AAAAAAAABEM/WzSdnHKCzis/sort_order_null_end_thumb%25255B2%25255D.png?imgmax=800" style="border-bottom-width: 0px; border-left-width: 0px; border-right-width: 0px; border-top-width: 0px; display: inline;" title="sort_order_null_end" width="669" /&gt;&lt;/a&gt; &lt;/span&gt;&lt;/pre&gt;Y lógicamente no es lo que quisieramos obtener como resultado:&lt;br /&gt;
&lt;br /&gt;
si hay tareas sin fecha definida, estas deberían ir al último (puede ser que tú pienses lo contrario, pero no discutamos).&lt;br /&gt;
&lt;br /&gt;
Entonces, para lograr que las tareas con fecha NULL vayan al final, hacemos uso de COALESCE, elcual nos permite utilizar otro valor si es que el dato es NULL, algo así:&lt;br /&gt;
&lt;br /&gt;
&lt;pre class="code"&gt;&lt;span style="color: blue;"&gt;SELECT &lt;/span&gt;[taskid]&lt;span style="color: grey;"&gt;,&lt;/span&gt;[userid]&lt;span style="color: grey;"&gt;,&lt;/span&gt;[title]&lt;span style="color: grey;"&gt;,&lt;/span&gt;[progress]&lt;span style="color: grey;"&gt;,&amp;nbsp;&lt;/span&gt;&lt;/pre&gt;&lt;pre class="code"&gt;&lt;span style="color: magenta;"&gt;COALESCE&lt;/span&gt;&lt;span style="color: grey;"&gt;(&lt;/span&gt;[duedate]&lt;span style="color: grey;"&gt;, &lt;/span&gt;&lt;span style="color: red;"&gt;aqui_pones_una_fecha_con_un_valor_alto&lt;/span&gt;&lt;span style="color: grey;"&gt;) &lt;/span&gt;&lt;span style="color: blue;"&gt;AS &lt;/span&gt;[duedate]

&lt;span style="color: blue;"&gt;FROM &lt;/span&gt;[dbo]&lt;span style="color: grey;"&gt;.&lt;/span&gt;[tm_task]

&lt;span style="color: blue;"&gt;ORDER BY &lt;/span&gt;[duedate] &lt;span style="color: blue;"&gt;ASC&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;
Simple no es cierto?&lt;br /&gt;
&lt;br /&gt;
Obviamente no sólo funciona para fechas, también lo puedes usar para números, cadenas, etc.&lt;br /&gt;
&lt;br /&gt;
Espero que les sea de utilidad ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/5229264599062948217-7491939948351700327?l=www.neuronasoft.net' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/Neuronasoft/~4/9HSUmWaTIBQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://www.neuronasoft.net/feeds/7491939948351700327/comments/default" title="Comentarios de la entrada" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=5229264599062948217&amp;postID=7491939948351700327&amp;isPopup=true" title="2 Comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/7491939948351700327?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5229264599062948217/posts/default/7491939948351700327?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/Neuronasoft/~3/9HSUmWaTIBQ/sql-server-ordenar-datos-de-una-columna.html" title="SQL SERVER - Ordenar datos de una columna, poniendo NULL al final" /><author><name>Segundo Serrano</name><uri>https://profiles.google.com/115014535042543264684</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="32" src="//lh5.googleusercontent.com/-an-IyvklW8w/AAAAAAAAAAI/AAAAAAAAAAA/tegnNxM9rdw/s512-c/photo.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-qZnXU0SYPRk/TfY1CTFVp6I/AAAAAAAABEM/WzSdnHKCzis/s72-c/sort_order_null_end_thumb%25255B2%25255D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://www.neuronasoft.net/2011/06/sql-server-ordenar-datos-de-una-columna.html</feedburner:origLink></entry></feed>

