
En ASP.NET existen muchos métodos para conseguir que cuando un usuario solicita una página en el servidor, acabe obteniendo el resultado de ejecutar otra página o recurso diferente. ¿Para qué querríamos hacer algo así? Por múltiples motivos, y en realidad es algo que se usa constantemente: Redirigir a los usuarios a una página nueva Ejecutar una funcionalidad que reside en otra página o recurso Ofrecer al usuario rutas amigables cuando por debajo usamos una estructura de páginas más compleja Hacer que las URLs antiguas de una aplicación sigan funcionando aunque hayamos cambiado la estructura del sitio .... El framework de ASP.NET ofrece muchos métodos diferentes de cambiar el recurso utilizado para responder a una petición, y cada uno tiene sus aplicaciones específicas. Así que ¿Cuál utilizar? Vamos a verlos todos para resolver las dudas y conocer bien sus diferencias y mejores aplicaciones. El ejemplo Para ilustrar en la práctica todos estos métodos he crea...
[Más]
Tags: ASP.NET
45b2be9d-fead-4638-84dc-29dc1f19339e|0|.0

En ocasiones es muy útil poder engañar al servidor web y hacerle creer que te estás conectando con cualquier navegador, aunque en realidad estés usando Internet Explorer o Chrome bajo Windows, por ejemplo. Como sabes, los controles de ASP.NET Web Forms tienen lo que se llama renderizado adaptativo, que consiste en que generan un HTML diferente según el dispositivo que solicite la página, pudiendo así adaptarse a las características de cada navegador de la mejor forma posible. Así puedes ver qué efecto causa sobre el HTML que renderiza tu aplicación si estás usando un navegador muy viejo (Netscape?) o saber si cambia según sea el sistema operativo (puedes decir que estás trabajando desde Linux o Mac aunque estés en Windows), etc.. Un caso muy habitual es, por ejemplo, si estás probando una aplicación móvil y quieres ver qué HTML te devolvería cuando te conectas con un iPhone o un Windows Phone, puedes engañar al servidor fácilmente y hacerte pasar por uno de estos navegadores simpleme...
[Más]
Tags: ASP.NET, Navegadores, Móviles
0a615427-5f1e-4892-813c-3fc8e5d0813c|0|.0

Hoy un truco rápido. En ASP.NET a veces necesitamos convertir rutas relativas (por ejemplo guardadas en una base de datos) a rutas absolutas para poder referenciar archivos para descarga, imágenes, etc... Estas rutas pueden venir dadas de diversas formas. Por ejemplo, todas estas son rutas válidas: "/Docs/doc.pdf": se refiere a la raíz absoluta del servidor, es decir desde el nombre de dominio en adelante. "../Img/image.jpg": ruta relativa a la página actual, un directorio por encima. "./files/features.js": se refiere a una ruta dentro de la carpeta que contiene a la página actual. "~/CSS/styles.css": ruta relativa a la raíz de la aplicación, que no tiene porqué coincidir con la raíz del servidor ya que puede que nuestra app cuelgue de una carpeta virtual, por ejemplo. Esto es algo que no siempre es tenido en cuenta. Y hay más combinaciones posibles, como por ejemplo el uso de los ../ por el medio de la propia ruta, etc... A vec...
[Más]
Tags:
9ee19a24-cdb2-48df-a969-2e26b7667455|0|.0

En ASP.NET Web Forms algunos controles disponen de un par de propiedades interesantes para mejorar la usabilidad de la interfaz de usuario. Se trata de DefaultButton y DefaultFocus que permiten decidir respectivamente qué botón del formulario va a ser el que se ejecute al pulsar ENTER y qué control tendrá el foco en el formulario cuando éste cargue. Esto, que parece una tontería, es muy útil ya que es frecuente encontrarse por ahí páginas bastante mal hechas en las que, por ejemplo, vas a buscar algo en un cuadro de búsqueda, le das a ENTER tras introducir los términos de búsqueda en el cuadro de texto correspondiente, y en lugar de efectuarse la búsqueda lo que ocurre es que simplemente se recarga la página. El motivo es que cuando pulsas ENTER en un cuadro de texto, por defecto lo que hace cualquier navegador es enviar el formulario al servidor. Si resulta que tu código de búsqueda está en el evento Click de un botón o un ImageButton, no se lanza este evento de servidor y por lo tan...
[Más]
Tags: ASP.NET
9fc36b87-90b0-4819-bea6-bef59ecd4d80|0|.0

En septiembre de 2009 Krasis Press lanzó al mercado mi libro “Tecnologías ASP.NET 4.0 (Saltando desde la versión 2.0)”. Fue un libro que se adelantaba en varios meses a la futura versión de la plataforma y el entorno de desarrollo. En el momento de escribirlo, en Julio de 2009, las últimas noticias sobre el lanzamiento del producto apuntaban a Octubre de 2009, y que muy pocos cambios iban a aparecer en la versión final. Por ello, a pocos meses vista de esa versión definitiva, aún con la Beta 1 de la plataforma, nos decidimos a lanzarlo al mercado. Trabajar con las Betas de Microsoft tiene muchas ventajas, pues te permite estar al cabo de la calle y adelantarte al mercado en las tecnologías que vendrán. Pero también tiene algunos inconvenientes, entre ellos que puede haber cambios de última hora que echen a perder el tiempo invertido. Al final, la versión definitiva de .NET 4.0 se fue retrasando y apareció el 12 de Abril de 2010. Este mayor ciclo de vida para las versiones previas del ...
[Más]
Tags: AJAX, ASP.NET, JavaScript
f7111952-e4c9-4aad-929e-4242d6406a1d|0|.0

La verdad es que hace años que no utiliza una grabadora de CD o DVD. Mi portátil ultra-ligero ni siquiera trae una incorporada, así que tengo una externa USB que utilizo muy de vez en cuando para leer algún CD o DVD que me hacen llegar. El resto del tiempo uso llaves USB, pero desde hace años utilizo Dropbox y por lo tanto prácticamente ni eso.
Ayer iba a instalar un Ubuntu en un portátil viejo que tengo que quiero regalar, e intenté hacerlo desde una llave USB con el famoso Universal USB Installer que ellos mismos promocionan. El resultado fue una llave USB estupenda de las rápidas estropeada para siempre. No sé qué demonios hace ese programa pero literalmente me fundió la llave USB. No fui capaz de recuperarla ni con herramientas de bajo nivel ni en Windows ni en Linux. Un fastidio.
Así que no me quedó más remedio que grabar un CD con la última versión de Ubuntu pa...
[Más]
Tags: Sistemas operativos, Trucos y consejos genéricos
4f9327c9-5380-4ae6-9806-f5d41b2eace5|0|.0

En la directiva de página de los Web Forms de ASP.NET existe un atributo importante denominado AutoEventWireUp. Por defecto está establecido como True. Esto quiere decir que la infraestructura de la página se encargará automáticamente de enlazar los eventos de la página con aquellos métodos definidos en ésta que tengan los nombres y las firmas apropiados. Por ejemplo, si tenemos un método definido de esta manera: 1: private void Page_Load(object sender, System.EventArgs e)
2: {
3:
4: }
Se llamará de manera automática al cargar la página (evento Load del ciclo de vida de la página).
Lo mismo en Visual Basic:
1: Public Sub Page_Load(ByVal Sender As System.Object, ByVal e As System.EventArgs)
2:
3: End Sub
Estos métodos tiene la misma firma que un evento estándar de tipo EventHandler, es decir, no devuelven nada y toman como parámetros un objeto y un objeto de tipo Even...
[Más]
Tags: ASP.NET
ab55c8b2-e402-4450-a7d6-020ea1c14d8f|0|.0

NOTA: Estas técnicas no están documentadas y se basan en mis indagaciones sobre cómo conseguir crear catálogos dinámicos de WebParts. Todo surgió a raíz de la pregunta de un alumno de mi curso de preparación del examen de certificación 70-515 de ASP.NET. ¿Cómo puedo crear un catálogo de WebParts para una página personalizada al cual le pueda añadir yo los controles que quiera dinámicamente?. Es decir, que los controles que aparecerán en el catálogo en lugar de estar determinados de antemano como en los casos habituales (en un catálogo estático de WebParts), se puedan cargar desde una base de datos o similar. La solución Primero, para esto hay que crear nuestra propia clase plantilla de catálogo que es la que se encargará de contener a los controles que voy a ir añadiendo. Esta clase debe implementar la interfaz ITemplate. Ello implica implementar el método InstantiateIn de esta interfaz que será llamado por la infraestructura de página cuando se deba inicializar el catálogo. Es en ...
[Más]
Tags: ASP.NET, WebParts
af998f64-3807-4f14-9ebb-5bd5e224acd4|0|.0

Windows Phone es sin duda el mejor sistema operativo móvil si eres un usuario intensivo de las redes sociales más conocidas, es decir, Facebook, Twitter y LinkedIn. El motivo es que Windows Phone 7.5 "Mango" se integra por completo con éstas y las incorpora como ciudadano de primera al resto del teléfono. Así, por ejemplo, tus contactos de LinkedIn o Facebook aparecen en tu agenda y los consolida de forma que toda la información que posees de cada contacto en cada red social y en tu agenda se muestra de manera unificada. Además puedes seguir las actualizaciones de gente concreta o grupos de gente concreta directamente desde la agenda o, mejor aún, colocándolos como "tiles" o ladrillos en tu página principal. Yo por ejemplo tengo un grupo formado por mi gente más cercana (familiares y amigos) y en su "Live Tile" me aparece automáticamente información sobre qué están haciendo o si comentan algo de interés tanto en Twitter, Facebook como LinkedIn. En el mis...
[Más]
Tags:
e71fcaa0-3c4e-482f-a0a6-3e25dbb8cc51|0|.0

Esta es una consulta muy sencilla pero que a muchos principiantes les resulta de mucha utilidad, así que como hoy he tenido que usarla y me he acordado, la pongo aquí por si a alguien le viene bien. El problema es el habitual: tenemos una tabla con muchos registros y queremos saber si alguno de ellos está duplicado. Lo más común no es que nos interese realmente saber qué registros están duplicados, sino qué registros tienen dos o tres campos iguales. Por ejemplo, si tenemos una lista de clientes quizá no nos interesa saber quiénes están duplicados buscándolos por el nombre (ya que éste puede haber sido escrito diferente: con o sin tilde, con abreviatura o no), por lo que resultaría más interesante averiguar aquellos registros que tienen el teléfono y el email duplicados por ejemplo. La consulta es muy fácil, y usa una función de agrupamiento para determinarlo. La consulta genérica sería esta: 1: SELECT COUNT(*), CAMPO_A, CAMPO_B
2: FROM T...
[Más]
Tags: SQL Server
8823a2ad-f18a-42db-92e0-536060a038af|1|5.0