Genera un delay en una aplicación ASP.NET

En ocasiones (muy raras tal vez) necesitarás generar un delay. Un tiempo de espera. Simplemente unos segundos en los que la aplicación duerma.

Te preguntarás para qué querrí­a alguien esto. Bueno, uno de los casos en los que puede ser útil es si necesitas simular un tiempo de respuesta lento de la conexión a internet. Por ejemplo, si tienes un UpdateProgress de Ajax que estás probando en un servidor local, el procesamiento puede ser tan rápido que quizás nunca veas tu gif animado girar. En estos casos, puedes colocar un delay que te permita simular que el servidor y/o la conexión tardan un rato en reaccionar.

Para hacerlo, utiliza este código:

Threading.Thread.Sleep(3000)

Donde el 3000 que pongo son milisegundos, en este caso el tiempo de espera serí­a de 3 segundos.

IE=EmulateIE7 no funciona cuando se coloca en un Master Page

Si estás desarrollando un sitio web en ASP.NET y quieres forzar que se despliegue con compatibilidad de Internet Explorer 7 cuando los usuarios lo visiten en Internet Explorer 8, utiliza el siguiente tag:

  1. <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />

Esto es equivalente a visualizar el sitio web en Internet Explorer 8 y oprimir el botón de Vista de Compatibilidad que aparece al lado del botón Actualizar.

Importante:

Si colocas el tag de compatibilidad después de algún tag de hoja de estilos (link href=”estilo.css”), no funcionará.

Debe ir antes que cualquier otro, ponlo justo abajo de .

Cómo mostrar las fechas en español

Es muy común que tengas que desplegar fechas en una aplicación ASP.NET. Existen varias funciones para crear, y hacer operaciones con fechas. En algunos casos, dependiendo de la configuración regional del servidor, tus fechas pueden aparecer en inglés, como:

Friday, January 02, 2009

Para asegurarte de que aparezcan en español utiliza el siguiente código:

  1. Dim FechaI As String = FechaInicio.ToString("D", System.Globalization.CultureInfo.CreateSpecificCulture("es-MX"))

La variable FechaInicio en el ejemplo es de tipo DateTime ya sea que provenga de algún valor tomado de una base de datos o generado mediante DateTime.Now

Haciéndolo así­ la fecha aparecerá como:

Viernes, 02 de enero de 2009

El string D indica el formato en el que aparecerá la fecha. Para más opciones visita la documentación de MSDN.

Los eventos dentro de un User Control se disparan dos veces

Encontré un caso raro hoy. Hice un User Control (.ascx) y lo metí­ dentro de una página .aspx, y habí­a un evento que se disparaba dos veces.

Dentro del código ASP de un User control tení­a un formulario y al final un botón para enviarlo:

  1. <asp:ImageButton ID="Enviar" runat="server" BorderWidth="0px"
  2.    ImageUrl="../Images/BotonEnviarOff.jpg" onclick="Enviar_Click" />

En el code-behind de mi archivo .ascx tenía lo que regularmente se esperaría:

  1. Protected Sub Enviar_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles Enviar.Click
  2.      'Codigo aqui
  3. End Sub

Dentro de ese evento hací­a un enví­o de e-mail y guardaba un registro en una base de datos. Lo extraño es que cuando iba a revisar tení­a dos e-mails y habí­a dos registros en la base de datos.

Por alguna razón (un poco confusa para mí­ todaví­a) al establecer el evento que serí­a disparado en el evento click, es decir, el atributo onclick dentro del ImageButton éste se disparaba dos veces. Supongo que uno se disparaba por default y el otro por haber explí­citamente indicando el evento a ejecutarse.

La forma como lo solucioné fue eliminar ese atributo, de tal forma que mi botón quedara así:

  1. <asp:ImageButton ID="Enviar" runat="server" BorderWidth="0px"
  2.     ImageUrl="../Images/BotonEnviarOff.jpg"  />

Al parecer esto también tiene algo que ver con el atributo AutoEventWireup de la directiva Page o Control para el control de usuario.

Cómo crear usuarios y asignarlos a roles con código de servidor

Si creas una aplicación que requiere autenticación y te piden crear muchos usuarios, la mejor manera de hacerlo es mediante código de servidor.

Antes que nada deberás haber configurado tu aplicación con Membership y Role. Busca “Membership” en este blog para encontrar cómo hacerlo.

El código vb.net para crear un usuario y asignarlo a un rol (o función) es:

  1. If Membership.GetUser("usuario1") Is Nothing Then
  2.    Membership.CreateUser("usuario1", "password", "usuario1@hotmail.com")
  3.    Roles.AddUserToRole("usuario1", "Rol")
  4. End If

Si necesitas crear cientos de usuarios, te recomiendo crear una tabla temporal en la base de datos y meter las lí­neas anteriores en un ciclo que vaya tomando un valor de la tabla en cada iteración.

También puedes crear algo más completo usando MembershipCreateStatus, sigue el ejemplo que aparece en esta liga.