Chalalo Land

Tecnologías ASP.NET y un poco Más

Contacto


 Si quierer cooperar, yo feliz, muy agradecido :)

De donde me Visitan?

Locations of visitors to this page

Generic Content

Si te gustaron los articulos, y te animas te estaría muy agradecido!


Recent Posts

Tags

Community

Blogs de MVP

Amigos Geeks

Blogs Imperdibles

GODS

Archives

Email Notifications

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 :D

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

Posted: 26/10/2009 16:44 por Gonzalo Perez | con 8 comment(s) |
Comparte este post:

Comentarios

Daniel ha opinado:

Gracias por el ejemplo es muy ilustrativo, pero por desgracia en 3.5 la funcion MapPageRoute no reconoce esos parametros descargare la suite 2010 para intentar de nuevo.

# November 28, 2009 12:56 AM

Daniel ha opinado:

Hola de nuevo, ya descargue la suite 2010 y el ejemplo funciono a la primera, al al parecer en el .net 3.5 hay que implementar el hanlder para la pagina , muchas gracias por el tutorial

# November 30, 2009 3:18 AM

Gonzalo Perez ha opinado:

Hola Daniel, te cuento que desde que hice el primer ejemplo con Visual Studio beta 1 y el beta 2, hubieron cambios que apuntaron a simplificar el proceso, si quieres te puedo enviar el ejemplo que funciona con 3.5.

Saludos,

Gonzalo

# November 30, 2009 4:42 PM

Oscar ha opinado:

Hola, seria genial que publicara la implementación en 3.5 ya que no me resulta y no puedo usar la versión 2010

al realizarlo en 3.5 me arroja error esta linea:

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

el erro es: routeData no es un miembro de System.Web.IU.Page

Saludos,

# December 28, 2009 6:25 PM

Kalumis ha opinado:

A mi me pasa exactamente lo mismo que a Oscar... ¿sabes a que se debe?

# February 8, 2010 10:24 PM

Gonzalo Perez ha opinado:

Incluyeron el Namespace correspondiente? instalen el asp.net mvc, es el que viene ahi. (si es que mal no recuerdo)

# February 9, 2010 1:07 AM

Pablo ha opinado:

Muy bueno tu articulo!, pero tengo un problema, en mi maquina Local funciona pero lo subo a un servidor ( godday) no me tira permamentemente error 404... tenes algun ejemplo del Web.config como quedaria? ya que sospecho que viene de ahi....

PD: las imagenes las puedo ver en el servidor, pero no las aspx

# January 17, 2011 4:38 PM

Enrique ha opinado:

Me ocurre lo mismo que Pablo, que solución hay para eso??

Depurando la web funciona, pero la pruebo en el IIS de mi máquina y no funciona. He probado ya mil configuraciones y no doy con el error.

# April 28, 2011 7:11 PM