Ejemplo paso a paso de Routing en ASP.NET 4.0

Otra de las características soportadas por ASP.NET 4.0 ,y de las que se habló en el TEchdays 2009, las cuales dije que iba a postear más en detalle, es del Routing, lo bueno es que en la versión de ASP.NET 4.0 es mucho más sencillo de utilizar que en versiones anteriores. La idea principal es que configuramos nuestra aplicación  para aceptar request de URLs que no se corresponden a un archivo físico en nuestro servidor. En su lugar, podemos utilizar el enrutamiento para definir  direcciones URL que sean significativas para los usuarios , al estilo Wikipedia por ejemplo,  y que pueden ayudar con la optimización de los motores de búsqueda (SEO) . Por ejemplo, la URL de una página que muestra los libros en una aplicación existente podría ser similar al ejemplo siguiente:

http://website/libros.aspx?libroid=param

Usando el ruteo,  podemos configurar nuestra aplicación para que la siguiente URL sea equivalente:
http://website/libro/nombre/edicion

Obviamente el segundo link es mucho más amigable al usuario, de hecho es por eso que se le llaman Friendly Urls, con una inspección rápida el usuario puede saber de que trata dicha URL.

Si bien este enrutamiento esta disponible en ASP.NET 3.5 SP1, ASP.NET 4.0 incluye unas características que lo hacen más fácil de usar, como veremos en el siguiente ejemplo:

Paso 1 -  Crear la Referencia
A System.Web.Routing

image

Paso 2 – Agregar lo necesario a nuestro Global.asax ( y sí!, en vb.net! jejej)

<%@ Application Language="VB" %>
<%@ Import Namespace="System.Web.Routing" %>
<script runat="server">
    Public Sub RegistraRuta()
        RouteTable.Routes.MapPageRoute("Libro", _
                                       "libreria/{nombre}/{*edicion}", _
                                       "~/libros.aspx")
    End Sub
   

    Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
        RegistraRuta()
    End Sub

Pero detengámonos un poco en RegistraRuta, en donde  MapPageRoute recibe como parámetros el nombre del esta llave de ruta (keyRoute), la ruta, y la página física a la que será referenciada, no es necesario que la página se llame igual que el prefijo del segundo parámetro,también es posible, si así lo deseamos,  pasar como parámetro al método RegistrarRuta una colección RouteCollection. El asterisco al lado del parámetro edición indica que es opcional.

Paso 3 – Recibir los Parámetros

image

Como se ve, mi aplicación es bastante sencilla, recuerda que debemos tener una página que se llame libros.aspx ya que definimos en el mapa de rutas que todo lo que “entra” por librería, se va a mapear a la pagina libros.aspx.

Ahora necesitamos recibir este parámetro, para esto ocupamos en el evento Page_Load de nuestra página:

Page.RouteData.Values("param").ToString

En nuestro caso:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        lb_nombreLibro.Text = Page.RouteData.Values("nombre").ToString
        If Not Page.RouteData.Values("edicion") Is Nothing Then
            lb_edicionLibro.Text = Page.RouteData.Values("edicion").ToString
        End If
    End Sub

Como podrás ver, tengo dos labels que los voy a setear con los parámetros del ruteo. La página tiene la siguiente forma.

image

Y al ejecutar la URL en nuestro Browser:
http://localhost:23631/URLRouting/libreria/Necronomicon/666

image

Estamos ya en condiciones de utilizar nuestro ruteo, muy fácil.

Pregunta: ¿Y si estoy utilizando un DataSource con parámetros de entrada mediante URL?

Podemos setear nuestros DataSource para que reciban desde el parámetro proveniente del routeo, de hecho si agregamos una base de datos, luego una grilla  y creamos un sqldatasource, cuando seleccionamos "Where…” para configurar el subconjunto de datos, veremos la opción Route (la última de la lista) y además podemos setear el RouteKey y su valor por defecto:

 image

Luego le damos agregar, lo que nos genera en nuestro código declarativo:

<SelectParameters>
  <asp:RouteParameter Name="NombreLibro" RouteKey="nombre" Type="String" />
</SelectParameters>

Probando… Funciona impecable 😀

image

Espero que este tutorial te haya servido para introducirte a las nuevas características de ASP.NET 4.0

Si quieres el ejemplo:
Descárgalo aquí

Saludos,
Gonzalo

[ScreenCast] Mi Primer desarrollo con Silverlight 3

Hola, tal cual dice el título del Post, hice un ScreenCast con un pequeño desarrollo , (muy pequeño) sobre Silverlight, de hecho es un ejemplo, solo suma dos números, que útil no?jejeje, pero la idea es mostrar lo sencillo que es iniciarse en Silverlight.

Es este ScreenCast veras intro a Diseño con Blend3, Intro a Animaciones, y como configurar la aplicación para que sea ejecutable fuera del Browser.

image

Entonces, te dejo el video, te recomiendo verlo en pantalla completa, si ve mejor (el video esta en 1024 x 768 y dura entretenidos 18 minutos y 16 segundos.

Demo de Aplicación usando Silverlight from Gonzalo Pérez C. on Vimeo.

Espero que te sirva, nos vemos!
Saludos,
Gonzalo

[Evento] CHILE – Conferencia Técnica Grupo Usuarios en Concepción: Sácale el jugo a la Virtualización

image

image
Hola a todos
Este Martes 27 de Octubre desde las 19:00 hrs a las 22:00 en la sede San Andrés de DuocUC en Concepción se estará presentando la conferencia “Sácale el jugo a la Virtualización ”

Mitad desde Santiago desde el auditorio de Sonda y Mitad desde Concepción desde DuocUC, en Concepción estará Pablo Campos y en Santiago, Gonzalo Balladares

Toda la información y registro ACA

   

Saludos,
Gonzalo

ASP.NET 4.0 – Nueva característica del ClientID – ClientIDMode

Hola que tal? quiero compartir este articulo que hice para mostrar la nueva funcionalidad del ClientIDMode de ASP.NET 4.0.

Lo primero que tenemos que saber que esta nueva propiedad nos va a permitir generar los ClientID de nuestros controles de manera controlada, ya que en versiones anteriores, se nos producía un problema, por ejemplo con un control de usuario, al momento de querer acceder del lado del cliente a algún elemento del DOM, sin saber a priori, si este control va a estar dentro de una MasterPage, un UpdatePanel o algún control contenedor que nos modifique la generación del ClientID, para obtener algo así:

<span id="ctl00_ContentPlaceHolder1_Label1">Algo de texto….</span>

La Propiedad ClientIDMode

La propiedad ClientIDMode nos permite  especificar con mayor precisión cómo el ClientID se va a generar. Puedes establecer la propiedad ClientIDMode para cualquier control, incluso a nivel de página.

Las configuraciones posibles son las siguientes:

AutoID : Esto es equivalente a usar el mecanismo de generación del ClientID que se utiliza en versiones anteriores, es decir, el mismo comportamiento que cualquier versión de ASP.NET anterior a la 4.0

Static: Esto especifica que el valor ClientID será el mismo que el ID sin la concatenación de los identificadores de los contenedores padres. Este es un cambio importante, ya que nos va a ser útil en los controles de usuario, debido a que un control se puede encontrar en diferentes páginas con diferentes tipos de contenedores, facilitando la programación del lado del cliente al momento de referenciar dichos controles (ya que no se puede predecir, en este caso el id del control)

Predictable: Utiliza esta opción cuando tengas controles que están dentro de controles que tengan plantillas de repetición, como por ejemplo un Datalist o un Gridview. Puedes establecer como se va a generar el control concatenando con nombres de campos enlazados a la grilla, para que los valores generados para los ClientID no contengan cadenas como “ctxxx”. Este modo funciona en compañía de la propiedad ClientIDRowSuffix que se setea con el nombre de un campo de datos, y ese valor se utiliza como sufijo en la generación del ClientID, normalmente utilizaremos el campo que es la clave principal, si utilizas un campo de texto, no se generan los _ entre los espacios (para que lo consideres)

Inherit: Este valor es el comportamiento por defecto de los controles,especifica que la generación del ClientID es el mismo que su padre.

Podemos establecer la propiedad ClientIDMode a nivel de página, con esto todos los controles de la página van a quedar seteados con ese valor. El valor del ClientIDMode por defecto en la página es AutoID, y los controles que están en la página, tienen su valor por defecto de ClientIDMode en Inherit, con esto, todos los controles heredan el comportamiento de AutoID, entregando por defecto, compatibilidad con versiones anteriores.

Como activar el valor a nivel del de página? es fácil se hace en la directiva @Page:

<%@ Page Language="C#" AutoEventWireup="true" 
  CodeFile="Default.aspx.cs" 
  Inherits="_Default" 
  ClientIDMode="Predictable" %>

A nivel de todo nuestro sitio podemos hacerlo mismo, es decir configurar para todas las páginas el ClientIDMode

<system.web>
    <pages clientIDMode="Predictable"></pages>
</system.web>

Nota: Siempre es responsabilidad del desarrollador (ósea nosotros) el asegurarse que los controles tienen un ClientID único, ya que si no, se puede romper una funcionalidad de la página que necesita identificar los elementos del DOM con document.getElementById.

Creando ClientID Predecibles en Controles de enlace de datos

Cuando utilizamos controles de enlace a datos, como un GridView, los ClientID generados pueden ser bastante largos y en realidad no son muy predecibles. La funcionalidad ClientIDMode nos puede ayudar a tener más el control de como se generan los identificadores.

Veamos un Ejemplo, tenemos un Gridview:
 <asp:GridView ID="GrillaSubfijo" runat="server" AutoGenerateColumns="False" BackColor="LightGoldenrodYellow"BorderColor="Tan" BorderWidth="1px" CellPadding="2" DataKeyNames="ProductID" DataSourceID="SqlDataSource1" EmptyDataText="There are no data records to display."        ForeColor="Black" GridLines="None" AllowPaging="True" ClientIDMode="Predictable" ClientIDRowSuffix="ProductID">

Como podemos ver tenemos la grilla seteada con la propiedad ClientIDMode en predictable y ademas, estamos controlando la generación del CliendID mediante la propiedad CliendIDRowSuffix seteada con el campo ProductID, esto significa que se generará el ClientID del control con el sufijo que corresponde a la data del campo ProductID , generalmente utilizamos los ID del conjunto de campos que componen el GridView.

Columna en la GridView:

<asp:Label ID="lb_ProductID" runat="server" Text=’<%# Bind("ProductID") %>‘>
</
asp:Label>

Lo generado es:

<span id="ContenedorMaster_GrillaSubfijo_lb_ProductID_10">10</span>

En donde el número 10 corresponde a la concatenación de la que hablábamos.

Espero que te sirva, recuerda que todavía estamos en un beta, y esta información está sujeta a cambio.

Te recuerdo que esto está disponible para Visual Studio 2010, y que ya te puedes descargar el Beta desde Acá:

Más recursos en :
http://www.asp.net/learn/whitepapers/aspnet40/

Saludos,
Gonzalo “Chalalo” Pérez.

Material de la Demo de Desarrollo de Aplicaciones con la Api para Windows 7

Hola, te dejo la demo que hice para el Install Fest de Windows 7 en DuocUC, en donde mostré algunas de las tantas funcionalidades de la Windows 7 API Code Pack.

En esta demo se ve:

  1. Manejo de la Progress Bar en la barra
  2. Thumbnail Personalizados
  3. Overlay Icons
  4. Notificaciones
  5. Jump List
  6. Thumbnail Toolbars (Botones en la barra)

No es mucho, pero creo que te puede servir para comenzar.
Si lo abres con VS2008 no te van a funcionar los Thumbnail Toolbars, me rompí la cabeza un rato con eso, luego, lo abrí con VS2010 y funcionó (que bien….)

image

Bonita demo no?(no tanto, no soy buen diseñador :S)

Link para que descargues la API

Descarga Visual Studio 2010 Beta 1

Te dejo el Link de la demo

PD:Para la demo de notificación, crea una carpeta c:misistema, y luego agrega un archivo, y ya verás 🙂

Espero que te sirva,
Saludos
Gonzalo

Artículo- Service Registry: A Key Piece for Enhancing Reuse in SOA, de Juan Pablo García

image

Hola, esta es una buena noticia, ya se publicó el articulo de Juan Pablo García, MVP en Arquitectura de Chile, a quien admiro mucho, es un tipo como decimos en Chile, muy capo ( o como dicen en Argentina, Copado!) , bueno, te cuento que fue invitado a escribir un articulo en  “Architecture Journal” , una revista para Arquitectos, que tiene un alto nivel , esta muy buena, lectura obligatoria!.

El Link del Artículo es :
http://msdn.microsoft.com/en-us/architecture/aa699419.aspx

Recuerda visitar el blog de Juan Pablo, siempre te encontrarás con artículos interesantes.
Saludos,
Gonzalo

[ScreenCast] Utilizando el nuevo control SeaDragon del Ajax ControlToolkit

Hola que tal? quiero compartir un screencast para aprender a usar el nuevo control SeaDragon de la suite Ajax Control Toolkit, está bastante cool!.

Para esto descargué
AjaxControlToolkit
Deep Zoom Composer

Te dejo el video entonces, vas a ver que es muy fácil. (dura aprox  solo 6 min)

Corre video!

Espero que te haya servido,
Saludos!
Gonzalo

Dos nuevos controles en el Ajax Control Toolkit!!

Así como lo oyes, esta suite de controles gratis adiciona dos nuevos controles
AsyncFileUpload, que viene a dar solución al problema cuando se tiene un fileupload dentro de un UpdatePanel, con posibilidades de customización.

image

Por otro lado, (esta esta muy cool!):

Seadragon (http://livelabs.com/seadragon-ajax/)
Control usado para desplegar imágenes y “navegar sobre ellas  de una manera cómoda, redimensionándolas de una manera muy cómoda, ya me imagino las imágenes en nuestra web de productos con este control!.

image

Visita Ajax control Toolkit bájalo y ocúpalo, es gratis 🙂
Voy a hacer unos tutoriales de esto, están buenísimos (aunque en la página está toda la ayuda que necesitamos para comenzar a utilizarlos)

Espero que te sirvan,
Saludos,
Gonzalo

[Off-Topic] Y terminó el TechDays 2009 – Chile, que gran evento!

Tal como dice el título, que gran evento, tuve la oportunidad de participar como Orador, este humilde servidor junto a grandes Estrellas, para mi fue una experiencia muy enriquecedora, agradezco la confianza puesta en mi persona para dar dos charlas, las que estuvieron llenísimas y según el  feedback de los asistentes, estuvieron muy buenas, lo que me dejó más que contento.  Me gustó mucho la demo de Fernando Hualpa & Daniel Montero sobre la API de NET para aprovechar las características de Windows 7.

Acá hay algunas fotos:
http://www.facebook.com/home.php?#/album.php?aid=113644&id=36803096378&ref=mf

Por último, hay gente que no alcanzó a entrar a mi charla de ASP.NET 4.0, la di junto a mi partner Leandro Masotti,  voy a subir las demos con un artículo asociado y quizás un screencast (ahora que me compre un microfono bueno) asociado al tema.

Foto junto a Elías Mereb (Elías, soy el mejor para HALO)

100_1657[1]

Nos vemos y quedo pendiente con las demos!
Saludos,
Gonzalo