Cómo limpiar todos los campos de un formulario

En algunos casos uno tiene un formulario mediante el cual se dan de alta registros y se desea que la alta sea continua. Es decir, que al dar de alta un registro y oprimir un botón para guardar, la página limpie todos los campos y quede lista para volver a empezar.

Normalmente uno pensaría en restablecer todos los campos mediante código de servidor, justo después de hacer la inserción en la base de datos, algo como esto:

  1. TextBox.Text = ""
  2. DropDown1.SelectedValue = "sinseleccion"
  3. CheckBox1.Checked = False

En ocasiones no tenemos tres campos, sino 20, 30, o 40.

Para no tener que hacer el recorrido manual por cada uno de los campos, simplemente hay que hacer un redireccionamiento a la misma página. Suponiendo que nuestra página se llama Alta.aspx, haríamos esto:

  1. Response.Redirect("Alta.aspx")

Y listo, el Response.Redirect manda nuevamente a la misma página, sin hacer un postback.

Cómo obtener el ancho, alto y tamaño en KBytes de una imagen

Para obtener el ancho, el alto, y el tamaño en KBytes de una imagen, utiliza el siguiente código:

  1. Dim Im As New System.Drawing.Bitmap("c:\Imagen.jpg")
  2. Dim FIm As New FileInfo("c:\Imagen.jpg")
  3. Dim TamanoBytes, TamanoKBytes As Long
  4. TamanoKBytes = FIm.Length / 1024
  5. TamanoBytes = FIm.Length 'Por si lo quieres en Bytes
  6. 'InfoImagen es un Label
  7. InfoImagen.Text = "Ancho: " & Im.Width & " pixeles; Alto: " & Im.Height & " pixeles; Tamaño: " & TamanoKBytes & " KB;"
  8. 'Siempre recuerda cerrar el Bitmap
  9. Im.Dispose()

Si no cierras el Bitmap utilizando su método Dispose, aparecerá un error que dice que la imagen está siendo utilizada por otro proceso cuando la quieras borrar o modificar su nombre.

Control de servidor RollOver para ASP.NET

El RollOver es un efecto mediante el cual se muestra una imagen cuando el ratón se encuentra lejos, y otra imagen cuando el ratón se pasa sobre la imagen.

No existe un control de servidor en ASP.NET para crear un efecto RollOver. Para hacerlo tendríamos que añadir un control de tipo LinkButton y luego añadir algo de JavaScript mediante código de servidor. Suena muy complicado si tenemos, por ejemplo, una barra de navegación con varias opciones de menú.

Buscando en Google encontré este artículo de Scott Mitchell. Basándose en el concepto de herencia, se crea un nuevo control llamado RollOver que hace justamente lo que queremos.

No voy a entrar en los detalles de programación, porque los puedes leer en la liga antes mencionada, pero sí te voy a explicar cómo hacerlo funcionar en 1 minuto.

En la carpeta raíz de tu aplicación, crea un fólder llamado bin (si es que no lo tienes ya), y coloca ahí el archivo .dll que descargaste.

Listo, esta es toda la configuración que tienes que hacer, ahora, para utilizarlo tienes que registrarlo en cada una de las páginas en las que lo vayas a usar. Para hacerlo, pega esta línea al principio del código de tu página:

  1. <%@ Register TagPrefix="skm" Namespace="RolloverButton" Assembly="RolloverButton" %>

Y para usarlo, pega este código en el lugar donde quieras que aparezca el RollOver:

  1. <skm:RollOver
  2.        runat="server"
  3.        id="RollOver1"
  4.        ImageUrl="Images/Icono_Home.gif"
  5.        RollOverImageUrl="Images/Icono_HomeOn.gif"
  6.        PostBackUrl="Default.aspx"
  7.        Height="100px"
  8.        ToolTip="Ir a Inicio"
  9.        Width="100px" />
  • ImageUrl: Es la imagen que aparecerá cuando el ratón esté lejos.
  • RollOverImageUrl: Es la imagen que aparecerá cuando el ratón pase sobre el control.
  • PostBackUrl: Es la liga a la cual se llevará al hacer clic sobre la imagen.

Como otro ejemplo, te pongo el código de una página que se crea a partir de un MasterPage:

  1. <%@ Page Language="VB" MasterPageFile="~/Ppal.master"
  2.        AutoEventWireup="false" CodeFile="Tira.aspx.vb"
  3.        Inherits="Tira" title="Untitled Page" %>
  4.        
  5. <%@ Register TagPrefix="skm" Namespace="RolloverButton" Assembly="RolloverButton" %>
  6.  
  7. <asp:Content ID="Content1" ContentPlaceHolderID="Cuerpo" Runat="Server">
  8.  
  9.     <skm:RollOver
  10.            runat="server"
  11.            id="RollOver1"
  12.            ImageUrl="Images/Icono_Home.gif"
  13.            RollOverImageUrl="Images/Icono_HomeOn.gif"
  14.            PostBackUrl="Default.aspx"
  15.            Height="100px"
  16.            ToolTip="Ir a Inicio"
  17.            Width="100px" />
  18.     <br />
  19.  
  20. </asp:Content>

Nota: Este control no soporta el uso de la tilde (~) para designar al directorio raíz.

Los campos insertados se truncan en 1024 caracteres

Al crear un TableAdapter en una aplicación de ASP.NET 2 usando Visual Web Developer 2005 Express, se establecen algunos límites que no son obvios a primera vista.

En un proyecto en el que trabajo tengo una base de datos en MySQL con un campo llamado Cuerpo que es de tipo longtext y está diseñado para que pueda almacenar varios párrafos de HTML.

Al crear el TableAdapter y el Business Logic uno nunca establece los tamaños de los campos, ya que la herramienta lo hace por uno mismo.

En mi caso, al insertar un registro mediante mi aplicación, el campo Cuerpo se truncaba, almacenando únicamente alrededor de 1000 o 1024 caracteres.

Mi primera idea fue ir a revisar mi tabla de MySQL, pero el límite no estaba ahí. En seguida fui a ver las propiedades de la tabla en el TableAdapter de mi aplicación:

Propiedades

Como puedes ver, el MaxLength del campo en cuestión estaba establecido en 60,000, así que tampoco estaba ahí el problema. Después de un rato de darle vueltas al asunto, se me ocurrió ver las propiedades de la sentencia que hacía el insert en la base de datos, la cual en mi ejemplo se llama InsertaEnvio. Solamente hay que seleccionarla y oprimir el pequeño botón con tres puntos:

TableAdapter

Se mostrará la ventana de propiedades de la sentencia SQL. Seleccioné el campo problemático, y noté que en la propiedad Size tenía un valor de 1024:

Tamano del campo

Listo, ahí estaba el error, solamente lo modifiqué a un valor lo suficientemente grande:

Tamano modificado

Salve el archivo xsd, probé nuevamente, y el problema desapareció.

Establecer Title y añadir Metatags y scripts al elemento Head mediante programación

Es posible modificar el tag Title y añadir Metatags y otros elemenos al Head de nuestra página mediante el código de servidor.

Esto puede ser muy útil si estamos utilizando MasterPages. Añadimos el código una vez a nuestro MasterPage, y éste se encarga de colocar estos valores a lo largo de toda nuestra aplicación.

El código siguiente establece el título de la aplicación, crea un Metatag para Keywords, otro para Description y finalmente agrega la referencia a un archivo .js de JavaScript. Lo interesante de esto último es que mediante la función Page.ResolveUrl se genera dinámicamente la ruta del .js partiendo de la ruta raíz de la aplicación. Si existen páginas creadas a partir del MasterPage en diferentes niveles de carpeta (o si movemos la página a alguna subcarpeta) la ruta al script siempre se generará correctamente.

Este es el código:

  1. Page.Title = "Trebol, todo tipo de articulos de papeleria"
  2.  
  3. Dim PalabrasClave As New HtmlMeta()
  4. PalabrasClave.Name = "Keywords"
  5. PalabrasClave.Content = "colores, lapices, plumas"
  6.  
  7. Dim Descripcion As New HtmlMeta()
  8. Descripcion.Name = "Description"
  9. Descripcion.Content = "Articulos de papeleria"
  10.  
  11. Dim ScriptCambiadorEstilos As New HtmlGenericControl("script")
  12. ScriptCambiadorEstilos.Attributes.Add("type", "text/javascript")
  13. 'Recuerda que la tilde (~) indica la raiz de tu aplicacion
  14. ScriptCambiadorEstilos.Attributes.Add("src", Page.ResolveUrl("~/scripts/styleswitch.js"))
  15.  
  16. Dim Cabeza As HtmlHead = CType(Page.Header, HtmlHead)
  17. Cabeza.Controls.Add(PalabrasClave)
  18. Cabeza.Controls.Add(Descripcion)
  19. Cabeza.Controls.Add(ScriptCambiadorEstilos)