URL Rewriting, URL Mapping en ASP.NET 1.X y 2.0

Holas!


qué es URL Rewriting?, un ejemplo lo puede dejar más claro:


Mis páginas de noticias son así: http://www.misite.com/noticias/mostrarNoticia.aspx?codNOT=15, ahora yo quiero generar un link así: http://www.misite.com/noticias/show15.aspx.


Quedo más claro?, como pueder ver la URL es más simple de recordar, y son un poco más estéticas, sobre todo si hay más de un parametro en URL en la original. Otra de las ventajas es generar un link permanente, imaginen que su carpeta cambio por alguna razón, que pasa con todos los usuarios que agregaron a sus favoritos o algún tipo de bookmark, el link anterior. Y hay algunos otros usos que a ustedes se les pueda ocurrir …


En esta ocasión sólo mostraré los links que encontré, y en un posterior post, les cuento y detallo cual use en mi aplicación.


En ASP.NET 2.0:



En ASP.NET 1.X:



Herramientas:



Saludos,


Post cruzado

Ordenando un GridView enlazado a un ObjectDataSource

Deberían saber en principio que si el método de seleccionar (SelectMethod) del ObjectDataSource, devuelve un DataSet, un DataTable o un DataView, tenemos de manera automática la capacidad de hacer ordenamiento en el GridView.

Y cuando pasemos el mouse por la parte superior hacemos clic y se ordena :o, y si eso lo pones dentro de un UpdatePanel, sin comentarios.

Si ustedes han personalizado las columnas del GridView, se han podido dar cuenta que no funciona el ordenamiento. Por más que ponemos la propiedad AllowSorting igual “True” del GridView y nada…

Empiezas con la búsqueda de la verdad, para saber que pasa y porque no ordena tu GridView, la paginación dentro del UpdatePanel, te dejo alucinado y quieres como sea el ordenamiento, llegas al siguiente artículo: Sorting Data with Data Source Controls.

Te dice lo que ya sabías que si tu método de seleccionar te devuelve un DataTable, un DataView, o un DataSet el ordenamiento es automático. Compruebas eso, cambias tu DataTable a DataView y nada, y te das cuenta qué el último artículo había unas propiedades del ObjectDataSource, que te dejaron meditando si era por eso o no:

   artRowIndexParameterName=”StartRecord”  y  MaximumRowsParameterName=”MaxRecords”

Modificas intentas forzar a tu ObjectDataSource, pero nada, y es así que sigues en la búsqueda, ya se volvió personal lograr el ordenamiento, aunque este fuera de los requerimientos de usuario :), y es que tu deseo de saber más, y saber que pasa, es lo único que te impulsa a seguir en la búsqueda.

Llegas a unos foros: GridView sorting possibility, y en una de las respuestas ves:

   public getData(int startIDX, int maxRWS)

Y dices, creo que me estoy acercando a la solución (no sabes que estás más perdido que…)

Ahora llegas al siguiente artículo: Implement Paging using ObjectDataSource with GridView, ves una nueva propiedad del ObjectDataSource que no habías visto, SelectCountMethod, y dices me falto esto. Y para verificar te bajas el código de ejemplo del artículo, no tienes usuario, te registras desesperadamente, porque piensas que ahí esta tu respuesta. Te registraste, te logueaste, y te bajaste el código fuente. Ves un DataView, y dices eso me faltaba, eso era… Actualizas tu código y nada… y ya te vas dando cuenta que no era la solución, pero tu quieres ver la ordenación dentro de UpdatePanel así que sigues en la búsqueda.

Y llegas al siguiente artículo: Sorting Custom Paged Results, y ves un nuevo atribulo del gridView:

   SortParameterName=”sortExpression”

Entonces comienzas a intentar, incrustarlo dentro de tu código, pero nada. Y dices, pero la teoría dice que si el método Select devuelve un DataTable, DataSet, o DataView, el ordenamiento es automático, pero para nada funciona, y es cuando piensas que deberías crear un artículo “Los Secretos ocultos del GridView“.

Ya con la moral baja y después de haberle echo de todo a ObjectDataSource, empiezas desde cero creas un SqlDataSource con GridView, funciona la paginación y el ordenamiento automático, y es así que decides probar nuevamente generando un GridView desde cero con un nuevo ObjectDataSource, y no lo puedes creer pero funciona lo malo es que las columnas del GridView fueron autogeneradas, copias tu nuevo ObjectDataSource, con tu anterior GridView, pero nada… y te das cuenta que tu ObjectDataSource, funciona, ósea lo maltrataste por gusto, pero entonces ahora te la agarras con el GridView. Y como tu editastes tu código en vista HTML, es decir no usaste el wizard gráfico de editar columnas, no te distes cuenta de esta pequeña propiedad:

Y es que no sólo basta con poner la propiedad AllowSorting del GridView igual a True, sino que cada columna se debe personalizar para habilitar el ordenamiento, además te de das cuenta que lo puedes personalizar mucho más.

Conclusiones: Si bien el ordenamiento y paginación del ObjectDataSource puede ser automático y rápido de desarrollar, excluyendo este post :$, si la cantidad de filas es muy grande puede ser que la performance de tu aplicación disminuya: Al final de este artículo hay unos resultados muy interesantes: Sorting Custom Paged Results, como se puede apreciar la paginación automática es mas lenta, ya que siempre trae todos los registros, en cambio con una paginación por grupos, la performance es mejor, ya que sólo trae los registros que necesita y no todos. También se aprecia que si agregamos índices a la ordenación la performance mejora.

Más artículos sobre ordenamiento personalizado con el ObjectDataSource:

Saludos,

Post cruzado

Internet Explorer Developer Toolbar Beta 3

En Jul/2006, Cristian Manteiga, había anunciado Internet Explorer Developer Toolbar Beta 2. Pues contarles que ya esta disponible la versión Beta 3. En el post de Cristian, pueden encontrar los detalles de esta barra, además en el blog del Team de Intener Explorer también le dedican un post a la Beta 3. Por eso ya no comentaré los detalles, pero si dejaré mi cosecha, en imágenes:

  1. Este es el toolbar y sus menús:
  2. Podemos seleccionar elementos haciendo clic en ellos, sólo tenemos que pasar el mouse por la página y aparecerá el nombre del elemento:
  3. O también podemos hacer búsquedas de elementos:
  4. Podemos deshabilitar los Scripts, los PopUp, o todo el CSS:
  5. Podemos ver los links de la página y otros ítems:
  6. Podemos ver elementos comunes de HTML como Tables, o ver un elemento específico:
  7. Podemos ver las imágenes y varios atributos de ellas:
  8. Podemos administrar la Cache, como también ver la información de la cookie:
  9. Y esto que me parece genial, y que les va agradar a los que desarrollan bajo estándares, es la capacidad de validar el HTML, CSS, y otros. Ojo el toolbar no es quien valida, si no, te linkea a las páginas de validación de la W3C:

Actualmente se ha vuelto imprescindible que todo navegador cuente con herramientas para el desarrollador web, estás te ayudan a mejorar tu presentación, a verificar que cumpla con los estándares, los tiempos de búsqueda y ubicación de elementos disminuyen, entre otras cosas. Aunque más les agradará a los diseñadores web, no esta mál de vez en cuando saber que lo que estas haciendo esta bien :p.

P.D.: Cuando inicie este post fue LIBERADO (release) ASP.NET AJAX 1.0, como yo los postearon sólo lo adjunto :D, y cuando actualice la aplicación sobre la cuál estoy trabajando ya les cuento :p.

Saludos,

Post cruzado

Configurando ASP.NET AJAX para aplicaciones existentes

Si han instalado ASP.NET AJAX, y quieren implementar AJAX en sitios existentes se habrán podido dar cuenta que no funciona directamente. Pero si crean un nuevo Sitio Web ASP.NET AJAX:

Funcionará los controles de ASP.NET AJAX, entonces cuál es el problema?. Si hemos sido un poco intuitivos nos hemos puesto a buscar la diferencia entre nuestro site actual y el nuevo, y pues se nota que los archivos de configuración están diferentes.

Como cuestión de intuición también iremos copiando lo que veamos que le falta. Si bien la intuición sirve, en ese momento, es bueno entender que falta y porqué.

La lista de elementos que debe contener el web.config para habilitar el uso de AJAX, son los siguientes:

Y en Configuring ASP.NET AJAX, encuentran más detalles de cada elemento.

Saludos,

Post cruzado

ASP.NET Cube Browser – CellSetGrid

No quería dejar de guardar y compartir este control.

No se si ya muchos lo han intentado, pero mostrar información multidimensional en un GridView no es una tarea sencilla, imagino que se debe poder con artificios, pero todavía toy jr. en eso, y como no se me ha presentado la necesidad de hacer esto, todavía no le entrado a la investigación a fondo.

Ya Gorka Elexgaray, nos mostró un control excepcional para esto, en mi quicksearch también lo encontré, pero en mi caso llegue desde el blog de Mosha Pasumansky, que por lo que vi, le da duró a MDX.

Ahora hablemos del control CellSetGrid, primero veamos el control:

CellSetGrid es un control ASP.NET para examinar cubos de Analysis Services 2005. Este soporta navegación basada en menú, drill up & down, ordenación, entre otras. Es 100% basado en Web, sin instalación en el cliente, sólo un navegador.

Y se viene lo mejor, esta disponible (hasta la fecha), la descarga es gratuita y no sólo del control sino del código fuente. Osea, sólo piensen todo lo que se puede hacer. A mi, lo que se me ocurrió hacerle es cambiar la posición del Grid en si y del panel del lado derecho, por cuestiones de espacio. Y ya de ustedes queda todo lo que quieran hacerle a este control.

Por cierto, la simplicidad de configurar el datasource y los cubos, es casi igual en los dos controles.

P.D.: Thanks, Richard Tkachuk’s, by sharing this control.

Saludos,

Post cruzado

Databinding de un DropDownList con XmlDataSource

Ahora en ASP.NET 2.0, nosotros tenemos varios controles DataSource que nos aceleran el trabajo cuando tenemos que recuperar datos de las diversas fuentes de datos, y hasta fue liberado un control RSSDataSource que es una descarga aparte, y viene dentro del RSS ToolKit. Pero en este post vamos hablar del control dataSource XmlDataSource.


Para enlazar un XmlDataSource a un Repeater o DataList usamos XPath, sino miren el siguiente ejemplo.


Pero ahora, que pasa si queremos enlazar un XmlDataSource a un DropDownList. Si tuviéramos nuestros elementos con atributos no hubiera problema:


  <AREA  AREcod=”1″ ARENombre=”Area1″ AREOrden=”1″ > </AREA>


Es decir al enlazar directamente el atributo DataTextField y DataValueField del XmlDataSource funcionaría correctamente. Pero normalmente nuestro XML no tiene este modelo sino:


   <AREA><ARECod>1</ARECod><ARENombre>Area1</ARENombre>…</AREA>


Y he ahí el problema si ejecutamos la página, vamos a obtener el siguiente problema: DataBinding: ‘System.Web.UI.WebControls.XmlDataSourceNodeDescriptor’ does not contain a property with the name ‘ARENombre’.


El problema es que los Atributos de los elementos del XML son interpretados como Propiedades, los elementos no.


Encontré esta solución, pero lo que hacía era leer el xml en un datatable y desde ahí hacer el enlace.


Encontré una segunda solución, usando un archivo de transformación XSLT, podemos cambiar la estructura del archivo XML. Y así trabajamos directamente sobre el archivo y usando el XMLDataSource.


Y con el archivo de transformación sólo habria que hacer esto:



Ejecutamos, y ahora si veremos nuestro combito con los datos del XML.


Saludos,


Post cruzado

Hard Code Off!

Estaba realizando mis tareas cotidianas frente a la PC, trabajando obviamente, aunque no lo crean xD, y se me presento la siguiente reflexión, la cual quise plasmar en un post, primero les contare el caso:

Tengo una entidad Area: Codigo, Nombre, Orden. La cual tienen los siguientes registros: 1, Area1, 1 – 2, Area2, 2 – 3, Area3, 3 y así hasta el Area5.

El campo Orden es como como los registros son mostrados en el Sitio Web. Y se me presenta la necesidad de recuperar código de Area del primer elemento. En mi caso estoy almacenando en una variable codArea, y fácilmente podría decir:

   codArea = 1;

Tu sabes que el registro inicial esta en 1, obviamente porque tu estas desarrollando el proyecto, y como medida de “riesgo”, piensas: “creo que será difícil que cambien esta configuración así que no creo que haya problema que lo deje en 1“.

Pero recordando las enseñanzas de mis jefes en 3Dev, que siempre priorizan el uso de buenas practicas en el desarrollo de proyectos, no lo hice.

Y es que, que pasa si por alguna razón en un futuro, aunque parezca imposible, cambia el orden y ahora tu primer registro es: 1, Area1, 2 – 2, Area2, 1. Es decir que ahora tu primer elemento tiene el código 2. O por alguna otra razón no se inserta con valor 1 el primer registro. Vas a decirle a tu webmaster que detenga la aplicación unos momentos para subir ese pequeño cambio, encimá le dices es pequeñito sólo una línea de código, a:

   codArea = 2;

Ese insignificante cambio de una línea de código, en una aplicación crítica y tan sólo unos minutos, puede costar mucho.

Moraleja: No sean ociosos eviten el Hard Code! Que por cierto es un antipatrón.

P.D.: Y si han echo Hard Code, aún están a tiempo de cambiarlo :p, claro eso siempre y cuando no los hayan cambiado a ustedes :D.

P.D.2: Algún tiburón con más experiencia le ha encontrado alguna utilidad al Hard Code?

Saludos,

Post cruzado

lo que debemos saber sobre ASP.NET antes de instalar VS2005 SP1

Cómo ya se anunció en muchos blogs de Geeks.ms, fue liberado Visual Studio 2005 Service Pack 1. En algunos post se recibía con alegría el SP1 y en otros no tanto, pero nosotros vamos hablar de que hay en el VS2005 SP1 para ASP.NET.


Ya, José Manuel Alarcón, nos comentó sobre el soporte para proyectos de Aplicaciones Web ASP.NET o ASP.NET Web Application Projects, ojo no es lo mismo que un Web Site, que quede claro esto. Antes del SP1 ya habíamos comentado que fue liberado un add-in, para hacer esto, pero hora viene en el SP1 :p.


Y en este post vamos hablar de unos cambios para el editor de código HTML, es decir cuando estés editando tu apsx en la vista “Source“. A detalle esta aquí, en el blog de Scott’Gu. Y para no aburrirlos con todo lo que esta ahí, en este caso haremos un resumen:



  • Se ha “tuneado”, que algunos traductores online lo traduce como afinado o templado, pero entendámoslo como se ha “mejorado”, la característica de validación de HTML, y según esto la validación debería ser más rápida.
  • No si todos sabían de esto, pero en VS2005 sin SP1, nosotros podíamos evitar la muestra de errores de validación de HTML desde la siguiente ventana:
    validation 
    Lo malo es que si tenías en errores en la escritura de html, por ejemplo abrir una etiqueta <p>, y en lugar de cerrar con </p>, cierras con una </o>. Automáticamente al ir la ventana de diseño de la página, se marcaba la opción de mostrar los errores, y dependiendo del tamaño esto podía degradar tu performance. Ahora con el SP1, si deshabilitas la opción de mostrar errores, y si tuvieras un error como el mencionado, sólo te avisa donde esta el error, pero ya no vuelve a habilitar la opción de mostrar errores.
  • Ahora cuando nosotros estábamos en vista de Source de una página, es decir cuando editamos en HTML, podemos cambiar las propiedades (presionando F4 para hacer que aparezca la ventana) de los controles. Esto opción ha sido deshabilitada por defecto con el SP1:
    image

    Pero si deseamos la podemos habilitar:
    imagen

    Y una vez hecho eso, ya tenemos nuevamente las propiedades desde la vista Source:
    imagen

Nota, antes de Instalar: Si tienen instalado el Visual Studio 2005 Web Application Projects, deberían desinstalarlo antes de instalar el Service Pack 1.


Saludos,


Post cruzado

dando formato a las columnas en un GridView (fechas, moneda, etc)

Holas!

Aunque ya José Manual Alarcón, habló de esto en un post, quiero dar mi aporte y comentarios sobre esto.

No sólo es con las fechas, es con cualquier formato que quieras aplicar a una columna. Como sabemos para aplicar formato a un columna se hace lo siguiente:

   <columns>
      <asp:BoundField DataField=“CreationDate”
                  DataFormatString=“{0:M-dd-yyyy}” HeaderText=“CreationDate” />
   </columns>

Se usa la propiedad DataFormatString para aplicar un formato, pero porque no se aplica el formato?, revisando DataFormatString en MSDN, encontramos el porqué, y lo que pasa es que cuando la propiedad HtmlEncode esta en true el valor de campo es codificado, es decir, el valor HTML de codifica a string. Y esto es así imaginen que tenemos nuestra etiqueta “<p>”, es un HTML, pero si usamos el método Server.HTMLEncode, lo que estamos haciendo es codificar el HTML a un string, y el valor devuelto sería “&lt;p&gt;”.

Eso mismo pasa cuando el la propiedad HtmlEncode de BoundField, esta en True, el valor del campo se convierte a string antes de que se aplique el formato. Y es por eso que es necesario colocar HtmlEncode=False, para evitar la codificación y poder aplicar el formato :D.

Espero haberme dejado entender… y si no.. sólo entiendan que con HtmlEncode=False, funciona el formato de DataFormatString.

Ahora ahondemos un poco más en DataFormatString, las siguientes letras son para formatos numéricos:

C -> Muestra los valores numéricos en formato de moneda.

D -> Muestra los valores numéricos en formato decimal.

E -> Muestra los valores numéricos en formato científico (exponencial).

F -> Muestra los valores numéricos en formato fijo.

G -> Muestra los valores numéricos en formato general.

N -> Muestra los valores numéricos en formato numérico.

X -> Muestra los valores numéricos en formato hexadecimal.

Así por ejemplo si queremos mostrar un promedio de notas con dos decimales, podemos poner lo siguiente:

   DataFormatString=”{0:F2}”

Con el cual tendríamos un resultado como este:

Ahora que si queremos usar dar formato una fecha tiene que ser de la siguiente forma:

   DataFormatString=“{0:M-dd-yyyy}”

Para ver los diversos formatos disponibles podemos visitar el siguiente link.

Nota: En el caso de la fecha y la moneda, están también estarán determinadas por la configuración regional de nuestro sistema.

Algunos otros links útiles:

Saludos,

Post cruzado

Generando automaticamente archivos *.sql para subir a nuestro hosting

Este post va ser un poco rápido sin entrar en detalles, y no voy a hacer un howto, salvo que los comentarios lo ameriten.

Al grano, el caso es el siguiente: normalmente para subir nuestras aplicaciones web a nuestro hosting contamos un FTP para lograr ello. Pero que pasa cuando queremos subir nuestra base de datos ¿?.

Si quieren subir su site local a la web, http://www.vwdhosting.net/, nos da hosting gratuito por 30 días, pero tenemos ASP.NET 2.0 y SQL Server. Es una gran oportunidad para subir nuestro site a la red de redes :D. Por ejemplo en la administración de este hosting en particular nos permite crear nuestra base de datos a partir de dos opciones: restaurar la base de datos desde un archivo, y restaurar desde un archivo mdf de SQL Server 2005.

Pero cada hosting tendrá su propia manera de crear una base de datos, algunos aceptarán su archivo de backup, otros un archivo sql, entre otras formas. Según dicen, las principales formas son usando un archivo de script sql (*.sql).

Nos darán dos opciones con respecto a esto: una de ellas es subir el archivo *.sql y que la herramienta lo ejecute, la otra opción será que la herramienta te permita copiar el código Transact-SQL directamente para ejecutarlo. Y nosotros podemos adaptar un tercera forma creando una página aspx que ejecute todo el query.

Pero ahora, como generamos un *.sql, a partir de una base de datos SQL Server 2000, SQL Express, o SQL Server 2005?.

Pues se ha liberado una fabulosa herramienta, la probé rápidamente y cumplió su cometido, la herramienta en cuestión es SQL Server Hosting Toolkit. Esta se integra con la ventana Server Explorer de Visual Studio 2005.

Esta herramienta permite generar archivos *.sql que contienen todos los objetos necesarios para restaurar nuestra base de datos, tablas, vistas, SPs, usuarios, roles, para ver todos los objetos soportados revisar este link. Por cierto tu escoges si quieres que genere un script en SQL Server 2000 o SQL Server 2005, chevere no?

Scott Gu’s, ha publicado un post detallado de cómo desplegar una base de datos SQl Express a una cuenta de hosting. En este post asume que tu hosting te permite subir un archivo *.sql o te da un herramienta para ejecutar código Transact-SQL.

En un reciente post ha publicado como hacer lo mismo pero ahora que el código *.sql sea ejecutado por página aspx. Vale la pena mencionar que esta página aspx esta disponible para descarga en el sitio del proyecto: RunSQL.aspx.

Esta herramienta, además permite a los proveedores de hosting exponer servicios web para que sus usuarios puedan fácilmente subir sus base de datos.

Saludos,

Post cruzado