Proveedores de Alojamiento (Hosting): WinHost, ASP.NET Hosting

Desde hace unos meses que vengo usando WinHost para mi sitio Web personal, y hasta ahora todo va muy bien. Antes tenía otro proveedor que me hacía dos facturaciones una por el alojamiento del sitio web y otra por el alojamiento de la base de datos. Pero como lo que tengo es un sitio personal, de vez en cuando subo algunos prototipos, buscaba una opción más económica y que el uso de base de datos este incluida dentro del mismo plan, y WinHost cumplía con eso.

Algunas de sus características, a mi parecer básicas para tomar una decisión, son las siguientes:

  • IIS 7 Web Hosting
  • Acceso remoto a través de IIS 7 Manager
  • Incluye una base datos SQL Server y MySql
  • Acceso remoto a la base de datos desde SQL Management Studio
  • ASP.NET en todas sus versiones, y sus add-ins ASP.NET MVC, Silverlight, etc.
  • Y para el correo el uso de SmarterMail

Tiene un panel de control simple y práctico:

WinHost Demo Control Panel

Saludos,

Descargas: Plantillas de diseño para ASP.NET (ASP.NET 2.0 Design Templates)

Hace algunos años, existía un excelente recurso en MSDN para ASP.NET llamado: ASP.NET 2.0 Design Templates, bajo la siguiente url: http://msdn.microsoft.com/asp.net/reference/design/templates/default.aspx. No pude encontrar este recurso en otro lado, si alguien tiene el dato, por favor lo deja en los comentarios.

Aunque la página web mencionada no esta disponible, las plantillas como descargas si lo están. Gracias a mi amigo: flysun0311, por guardar los enlaces en esta entrada: 符合Web标准的ASP .NET 2.0 Starter Kit模板下载.

Todas estas descargas son compatibles para cualquier versión de ASP.NET, es más se pueden usar con cualquier otro lenguaje Php, Jsp, etc, el diseño es uno solo para todos Html y CSS.

P.D.: Si algún enlace no esta disponible, me avisan por los comentarios tengo un bakcup de todos estos archivos en la nube.

Html – Div y Table – “Basic Design Template” – Descarga

ST2 Basic Web Template

Html – Div y Table – “Fun Design Template” – Descarga

Html – Div y Table – “Grid Design Tamplte” – Descarga

Html – Div y Table – “Rounded Design Template” – Descarga

Html – Div y Table – “Simple Design Template” – Descarga

ASP.NET – Web Commerce Design – C# y VB

ASP.NET – Web Corporate Design – C# y VB

ASP.NET – Web Personal Design – C# y VB

ASP.NET – Web Small Business Design – C# y VB

Saludos,

Proveedores de Alojamiento (Hosting): myLittleAdmin, una herramienta para SQL Server via Web

Uno de los clientes, tiene alojada su Web en un proveedor de Hosting, el proveedor te da la opción de conectarte directamente desde un SQL Management Studio a la base de datos remotamente.

Pero que pasa si, por alguna razón:

  • No tenemos instalado SQL Management Studio
  • Estamos en la partición Linux y hay un problema que resolver
  • Estamos en algún cliente y sólo tenemos acceso a internet
  • Da mucha lata levantar la virtual con las herramientas “Developer Ranger”

Pero por suerte, si nuestro proveedor soporta myLittleAdmin estamos salvado. Antes de todo, unos screenshots unas pantallas:

1. Modelo de Objetos

2. Crear una tabla

3. Crear un Registro

4. Hacer un “Abrir Tabla” (Open Table)

 

myLittleAdmin, es una herramienta como SQL Management Studio pero vía Web, es como el phpMyAdmin de MySql. Debido al costo de licencia su mayor ventaja se da en los proveedores de hosting. Si hay dos proveedores de hosting de ASP.NET y sólo uno de ellos soporta myLittleAdmin, es altamente recomendable que seleccionen el que soporta myLittleAdmin.

Enlaces myLittleAdmin:

P.D.: No hay beneficio por recomendar esta herramienta, lo cual si sucediera no me enojaría, es sólo que me gusto y a veces prefiero usar esta en lugar del SQL Management Studio.

Saludos,

[Apis] Html Agility Pack

Estoy iniciando un proyecto personal, portadas del Perú, cuyo fin es mostrar las portadas de los diarios locales, bajo cierta perspectiva. Hay diarios, por ejemplo elcomercio.pe, donde no hay problema en obtener la imagen de portada: http://e.elcomercio.pe/66/impresa/img/2010/05/10/ecpr100510a1.jpg, claro considerando una determinada hora de publicación. Es fácil identificar que el patrón de la imagen sólo esta determinado por la fecha del día, fácil de determinar con un juego de Strings:

   1:  

   2: String.Format("http://e.elcomercio.pe/66/impresa/img/{0}/ecpr{1}a1.jpg",

   3:               DateTime.Now.ToString("yyyy/MM/dd"), DateTime.Now.ToString("ddMMyy"));

   4: //

Pero otros (varios), como Perú21.pe, donde la imagen de portada tiene un atributo adicional: http://e.peru21.pe/102/impresa/img/2010/05/10/234399.jpg. Además de tener la fecha, tiene un número que imagino debe ser el ID de la imagen, podemos probar http://e.peru21.pe/102/impresa/img/2010/05/10/234400.jpg y http://e.peru21.pe/102/impresa/img/2010/05/10/234401.jpg. Estuve tratando de elaborar un algoritmo para obtener la secuencia de números entre portada y portada, pero no es constante. Además no creo que ellos usen un algoritmo para colocar una imagen en portada, ellos deben tener un campo cómo: “EsPortada”, con lo cuál es sencillo hacer un WHERE: “traer la imagen de portada del día tal”.

Cómo es seguro que no ellos no me van a dar acceso a su BD, la última opción es sacarlo del HTML crudo, última opción debido a que agregamos una variable de dependencia: si ellos cambian el html de su portal, podría provocar que nuestro código ya no funcione. Pero esperemos que esto no suceda muy a menudo.

¿Cómo convertir HTml Crudo, a un modelo de “objetos” html?

Antes usaba WebClient, para leer el html de una página, y era “manual” la búsqueda de elementos dentro del html. Cómo aprendizaje, es correcto empezar por ahí, pero después, es mejor usar la API: “Html Agility Pack”: http://htmlagilitypack.codeplex.com:

What is exactly the Html Agility Pack (HAP)?

This is an agile HTML parser that builds a read/write DOM and supports plain XPATH or XSLT (you actually don’t HAVE to understand XPATH nor XSLT to use it, don’t worry…). It is a .NET code library that allows you to parse “out of the web” HTML files. The parser is very tolerant with “real world” malformed HTML. The object model is very similar to what proposes System.Xml, but for HTML documents (or streams).

En resumen, permite convertir el contenido texto de HTML en un modelo rico de elementos Xml, que son de fácil lectura, por ejemplo, en mi escenario, si quiero recuperar la imagen de portada puedo hacer lo siguiente:

   1:  

   2: public String getImgPeru21()

   3: {

   4:   String imgPortada = ""; 

   5:  

   6:   hap.HtmlWeb docWeb = new hap.HtmlWeb();

   7:   hap.HtmlDocument doc = docWeb.Load("http://peru21.pe/impresa/");

   8:   foreach (hap.HtmlNode img in 

   9:             doc.DocumentNode.SelectNodes("//img[@title]"))

  10:   {

  11:     hap.HtmlAttribute att = img.Attributes["title"];

  12:     if (att.Value.ToLower() == "impresa")

  13:     {

  14:       imgPortada = img.Attributes["src"].Value;

  15:     }

  16:   } 

  17:  

  18:   return imgPortada;

  19: }

Y nada, con ese pequeño código puedo obtener la imagen de portada del diario Perú 21, siempre y cuando el designer no se despierte inspirado y cambie el diseño base, no haya cambios sustanciales en el diseño de la web.

Saludos,

[CodeSnippet] Enviar cuando correo cuando el usuario use Internet Explorer 6 (IE6)

Internet Explorer 6, es una de esas piedritas por la que a veces uno tiene que pensar, ¿damos soporte para IE6 o no?, claro hablando de diseño.

En un proyecto actual para una intranet, hemos decidido no dar soporte para IE6, no estresarnos haciendo diseños web paralelos. IE6, fue lanzado allá por el 2001, y como que ya va siendo hora de ni siquiera mencionarlo cuando definamos los navegadores a soportar por nuestra web. [Extra]: Mató IE6 la marca Internet Explorer??.

Regresando al tema, no vamos a bloquear a los usuarios que ingresen con IE6, lo que vamos hacer es enviar un email a Soporte, para actualizar a los usuarios que aún están usando IE6.

   1:  

   2: public static void ValidarIExplore()

   3: {

   4:   if (HttpContext.Current.Request.Browser.Type.ToUpper() == "IE6")

   5:   {

   6:     String fromEmail = ConfigurationManager.AppSettings["emailAdmin"];

   7:     String toEmail = ConfigurationManager.AppSettings["emailSoporte"];

   8:     String subject = String.Format(

   9:           "[{0}], necesita actualizar internet explorer", 

  10:           HttpContext.Current.User.Identity.Name);

  11:     String message = String.Format(

  12:             @"Sres. de soporte, <br/> El usuario {0} necesita actualizar [...] ",

  13:             HttpContext.Current.User.Identity.Name);

  14:  

  15:     SendEmail(fromEmail, toEmail, subject, message);

  16:   }

  17: }

El método es sencillo, y como tengo una página base para todos mis formularios web, aplico lo siguiente:

   1:  

   2: public abstract class ReportPageBase : System.Web.UI.Page

   3: {

   4:   protected void Page_Load(object sender, EventArgs e)

   5:   {

   6:     //si no esta logueado reenviarlo

   7:     if (!User.Identity.IsAuthenticated) { Response.Redirect("~/login.aspx"); }

   8:  

   9:     //validar browser

  10:     Helper.ValidarIExplore();

  11:     

  12:     //other code

  13:   }

  14: }

Para enviar correos desde ASP.NET, consulte la siguiente entrada.

Saludos,

Ejemplos de base de datos para SQL Server

 Ejemplos de Base de Datos - SQL Server

De vez en cuando, hay la oportunidad de revisar uno que otro proyecto Web ASP.NET disponible en la Web, para aprender de su Know-how. Es una manera rápida para aprender de golpe el desarrollo de aplicaciones Web.

Debido a que pienso usar algunas de estas base de datos, para posts futuros, voy a colgarlas en un nuevo proyecto que estoy usando, Gallery Server PRO (pendiente un post con la revisión de este site).

Las base de datos disponibles que he tenido la oportunidad de revisar, las que recuerdo y que sean open source, son las siguientes:

  1. La archi-conocida, Northwind, que es una especie de modelo ordenes de venta (maestro-detalle), y que puede registrar Productos, Clientes, y Vendedores.
  2. La archi-conocida, Pubs, para editoriales que deseen guardar información de libros, empleados, autores, y la venta de libros. Obviamente no es un modelo complejo, simplifica algunas funcionalidades, pero que puede ser un punto de partida si nos estamos iniciando.
  3. TheBeerHouse, proyecto en CodePlex, que maneja foros, artículos, encuentas, además de ofertar productos a la venta (seguimiento de la orden). Por cierto hay una nueva versión, que incluye este portal usando ASP.NET MVC.
  4. Classifieds, de uno de los tantos Starter Kit, y que básicamente podemos guardar clasificados para anunciarlos en nuestro web, además incluye administración de imagenes por clasificado.
  5. BlogEngine, es conocido motor de blog, y que permite manejar posts, comentarios, categorías, tags, y páginas.

Si quieren descargar los queries para la creación de alguna de estas base de datos, pueden hacerlo desde el siguiente enlace: SQL Server – Base de Datos Ejemplos (Powered by Gallery Server Pro)

P.D.: Si tienen sugerencia de alguna más, me avisan.

P.D.2: Recuerden que siempre es mejor visitar el sitio oficinal para tener la última versión de la base de datos, pero este es mi backup personal para el uso de estas base de datos, además de tener el enlace directo, y no tener que descargar todo el proyecto para tener la base de datos.

Saludos,

ASP.NET WebForms vs ASP.NET MVC, la nueva batalla

ASP.NET Web Forms, basado en armar todo por componentes  ASP.NET MVC - basado en construir todo el renderizado tu mismo

Últimamente los debates de C# o VB.Net quedaron atrás, ahora los nuevos debates dentro del mundillo .Net están entre usar ASP.NET Web Forms o ASP.NET MVC. Imaginen la desorientación sobre el tema, que hasta se dedico una sesión del MIX 2009 a tratar sobre este tema: Choosing between ASP.NET Web Forms and MVC. En los inicios de ASP.NET su principal objetivo era ganar terreno a PHP, JSP, y las otras tecnologías existentes, vendiendo que hacer aplicaciones Web era como hacer aplicaciones Windows, aunque haya un trabajo extra por detrás. Con los años de este Framework el uso de la comunidad ha hecho los Web Forms evolucionen, esfuerzos como reducir el tamaño del ViewState, los CSS Adapters, los Starter Kits, las buenas prácticas, entre otras, han ido mejorando el Framework. De hecho no creo que de Microsoft escuchemos no usen Web Forms, ahora usen ASP.NET MVC, por que por parte de ellos y de la comunidad hubo un gran esfuerzo, y mucho cariño, por hacer que los Web Forms, sean un buen Framework de desarrollo Web.

Antes de empezar quisiera usar y resaltar esta línea de un post de ScottGu relacionado con esta discusión, About Technical Debates (and ASP.NET Web Forms and ASP.NET MVC debates in particular):

“Great developers using bad tools/frameworks can make great apps. Bad developers using great tools/frameworks can make bad apps.”

Al citar esta cifra, creo que deben tener un idea de cual es mi punto de vista. Ahora dividamos el problema, vamos a establecer dos grupos de usuarios para dar nuestros comentarios:

  • Grupo de usuarios experimentados de ASP.NET, que tienen varios proyectos en producción y que no han tenido problemas de rendimiento, tiempo de respuesta, etc, cuando han desarrollado proyectos usando WebForms.
  • Grupo de usuarios nuevos de ASP.NET (y en general nuevos en el desarrollo Web), cuyo primero contacto fue hacer proyectos Web usando ASP.NET, y que no han tenido buenos resultados, han tenido problemas de rendimiento, de tiempo de respuesta, de diseño, y todos los que encontramos en los foros.

Usando el mismo patrón que recomendó Jorge Serrano en este artículo, C# o VB, VB o C#,… la envidia me corroe, si eres un usuario experimentando, no necesitas recomendaciones, sólo revisar las características de ASP.NET MVC y ver si alguna de ellas es la estabas buscando: ASP.NET MVC Overview. Cerramos el tema con ellos, y nos dedicamos a los usuarios nuevos en el desarrollo Web y que van a empezar con ASP.NET.

El problema para los nuevos usuarios, y para los que toman como cierto el mensaje: “Desarrolla Aplicaciones Web como si lo hicieras con Windows Forms, sólo arrastras controles y ya tienes tu Aplicación Web”. Y lo toman literalmente, no necesitan aprender la diferencia entre POST Y GET, no hay porque aprender el significado de QueryString, no es necesario saber si es malo guardar un DataSet en el ViewState de la página, sólo la hago para ya no consultar la base de datos y no tener lenta mi aplicación, no se preocupan en aprender HTML, no se preocupan en aprender JavaScript, entre todas las otras que suelen dejarse de aprender.

Entonces si eres un usuario nuevo en ASP.NET (y si no eres nuevo y no sabes que que usa POST o GET), la recomendación básica es aprender los fundamentos del desarrollo Web:

Estos son WebCasts impartidos por el amigo Jonas Stawski. Es más si pueden traten de hacer pequeñas Web simples usando sólo ASP clásico, verán los resultados y la diferencia cuando después aprendan ASP.NET.

Si ya aprendieron los fundamentos, la elección será más fácil. Por otro lado, tampoco es que ASP.NET MVC cambie totalmente la forma de hacer aplicaciones Web Forms, hay muchas funcionalidades que comparten en un común, la diferencia principal esta en como presentar el fron-ed al usuario, no vamos a entrar en detalles muy técnico por que quizás si fuerzas a cualquier de los dos frameworks puedes lograr la funcionalidad del otro, pero vamos mostrar el siguiente gráfico para mostrar algunas diferencias, y como podemos elegir en que escenario usar uno u otro:

Fuente del gráfico, y otro más detallado.

Como recomendación final, podríamos establecer la siguiente línea para aprender correctamente cualquier de las tecnologías y no caer en las malas practicas:

  • Aprender Html
  • Aprender JavaScript
  • Aprender ASP Clásico
  • Aprender ASP.NET MVC
  • Aprender ASP.NET Web Forms

Aprender al final ASP.Net Web Forms, nos ayudará a entender porque algunas opiniones dicen no usar Web Forms, principalmente por el mágico ViewState que hace que los WebForms sean Stateful, por el contrario de toda la Web que es Stateless.

Otros artículos con algunos detalles de este versus, unos más técnicos que otros:

Saludos,

Que hacer cuando IIS no te deja publicar un Sitio Web ASP.NET

Con el paso del tiempo y familiaridad nos daremos cuenta que la publicación de un Sitio Web (Web Site) o Aplicación Web (Web Application), es lo más sencillo gracias a la herramienta, es decir, Visual Studio 2005+ o Visual Web Developer Express, sólo hacemos clic derecho sobre el proyecto Web o el Sitio Web, y seleccionamos Copy Web Site o Publish Web Site, y podemos escoger si publicamos directamente hacia un servidor, un FTP, o File System para copiarlo por RED o llevarlo en un USB.

Reducimos el problema, divide y vencerás forever, a llevar los archivos generados a nuestro Servidor Web IIS, que es donde suceden los mayores problemas al publicar un Sitio Web.

Problema Central

En cuanto a la publicación en un Servidor Web, se pondrá más interesante si es que no tenemos acceso remoto al servidor, y sólo podemos copiar los archivos por FTP o subiéndolos vía web, la identificación de problemas será un poco más difícil porque no tenemos acceso a la servidor (verificar permisos en el sistema de archivos, revisar Event Viewer, etc). Por ejemplo, un error en la definición de la de conexión, puede hacer que no podamos acceder a la pagina y confundir sobre el verdadero error, entonces debemos deshabilitar los errores personalizados, en algunos extremos intentar depurar remotamente la aplicación Web (es lo peor que se puede hacer, evitar llevar este tema a los foros). Si una aplicación funciona bien en desarrollo, debería funcionar también en producción sin la necesidad de hacer una depuración remota, sólo es un tema de configuración y permisos.

Alternativa

Una buena práctica si es que recién estamos empezando y el llevar nuestra aplicación a producción se convierte en un grave problema , es tener un página con código “Inline” que sea nuestro robot “buscaerrores”. Cada vez que deseamos publicar una aplicación Web, primero enviaremos a nuestro robot a verificar que la configuración del servidor Web sea el correcta, si el robot pasa la prueba, la publicación del sitio web será una tarea sencilla.

Algunas Ventajas

Ya sea el equipo infraestructura o el equipo de desarrollo, el que realice la publicación de una Aplicación Web, debemos tener un robot que nos permita detectar los siguientes problemas:

  1. Detectar configuraciones incorrectas en el Application Pool de un Sitio Web. ¿Qué es un Application Pool? Por ejemplo, si no tenemos al usuario por defecto en un Application Pool (NETWORK SERVICE), debemos darle ciertos permisos y hacerlo que pertenezca a un grupo especial para que pueda ser un usuario del Application Pool.
  2. Verificar que las conexiones a la base de datos funcionen correctamente. Hay muchos sitios web, que no hay ninguna página que no funcione sin hacer conexiones a la base de datos, es decir que si por alguna razón no cambiaron la cadena de conexión al pasar a producción, o el servidor de base de datos no tiene los permisos correctos, ninguna página web de toda la Aplicación va a funcionar. Por ejemplo sitios web que generan sus menús desde la base de datos, este menú estará presente en todas las páginas.
  3. Verificar que los permisos en el sistema de archivos sea el correcto. Si habilitamos la carga de archivos en nuestra aplicación debemos dar los permisos necesarios al usuario del Application Pool (por defecto NETWORK SERVICE) para que pueda escribir sobre la carpeta donde vamos a poner los archivos.
  4. Cualquier otra verificación que ustedes requieran hacer antes de pasar una aplicación Web a Producción. La idea es dejar una página base, pero ustedes pueden personalizarla de acuerdo a sus escenarios.

El robot, debe ser muy simple y no depender de ninguna otra página o recurso para funcionar:

Y el código fuente debe ser Inline para que funcione independiente si es un Sitio Web o una Aplicación Web:

Descargar Robot para Verificar IIS para ASP.NET.

Anécdota sobre el tema

Recuerdo hace algunos años, en el team “epica” estábamos liberando una nueva versión de un producto Web para uno de nuestros clientes, el Project Manager tuvo problemas durante la presentación de esta nueva versión, sólo llamo para decirme: “La Web no funciona, revisa que puede estar pasando”. El equipo de infraestructura del cliente (un empresa multinacional) no pudo detectar el problema y sólo se liberaba de la responsabilidad diciendo que la aplicación Web no Funcionaba. Después de un par de intentos fallidos por solucionar el problema, el equipo de desarrollo tuvo que ir a resolver el problema. No recuerdo exactamente el problema, pero era más o menos así: anteriormente habían instalando una Aplicación Web, que había cambiado la estructura común del IIS, ellos al instalar nuestra aplicación Web no lo habían hecho correctamente y nuestra Web estaba heredando el archivo de configuración de la aplicación instalada anteriormente, y por eso no funcionaba correctamente. Después de un par de cambios en el IIS Manager, nuestra aplicación Web estaba funcionando correctamente.

Saludos,

[WebCast] Pruebas Web y de Carga usando VSTS

  1. ¿Si ponemos un cubo más a esta persona, soportará? ¿o está en su límite (cubo/hombre)?
  2. ¿Cómo supo cuantos cubos soporta? ¿Puso uno por uno hasta sentir dolor en la espalda?
  3. ¿Conoces el límite de tu aplicación Web (Req/s))?
  4. ¿Cómo haces para saber cuántos usuarios soporta tu Aplicación Web? ¿Le pides a 800 amigos de Hi5, a tus 380 amigos del facebook, y a tus 900 amigos de Twitter, que entren todos a la vez?

Y nada, el día Jueves 05/Nov a las 04:00 p.m. (GMT-05:00), estaremos presentando el siguiente WebCast:

Título Original: Webcast MSDN: Prácticas pruebas web

Descripción: En esta sesión se revisa el pasado, presente y futuro de las pruebas Web. Comenzamos al revisar cómo se lograron las pruebas Web antes de la llegada de Team System en Microsoft Visual Studio. A continuación, revisamos las herramientas de pruebas Web y de carga disponibles en Team System 2005/2008 de Visual Studio. Y por último, examinamos el futuro de las pruebas Web y de carga con un vistazo a Team System 2010 de Visual Studio.

Al final del WebCast, trataremos de dar algunas recomendaciones básicas de como detectar el posible origen de un cuello de botella; si está en la aplicación o está en la base de datos.

Enlace de Registro: http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032426182&Culture=es-AR.

Si desean agregar el evento a su calendario, pueden descargar el siguiente archivo: WebCast-WebTests.ics.

Saludos,

[CodeSnippet] Mostrar un Label en ASP.NET por 3 segundos

Requerimiento: Después de procesar una operación contra la base de datos, se desea mostrar un mensaje de confirmación en un Label, pero que el mismo desaparezca en unos tres segundos, ver pregunta.

Solución: Conociendo el funcionamiento de la infraestructura web, el browser es quien automáticamente pasado los 3 segundos debe ocultar el mensaje mostrado. Dado que la funcionalidad que necesitamos es del lado del cliente, la opción es usar JavaScript. Dentro de los eventos Timing de JavaScript, existe el método setTimeout() que pertenece al DOM Window, este método permite ejecutar una sentencia o función JavaScript, después de un determinado tiempo. Y la propuesta será tener dos funciones, una que muestre el “Label” y que a la vez llame dentro de 3 segundos a otra función que oculta el Label. Y finalmente para integrarlo con nuestro botón de ASP.NET, al finalizar la ejecución del mismo podemos registrar el script del lado cliente, usando el método RegisterStartupScript de la propiedad Page.ClientScript. Nota: no es necesario usar un Label, podemos usar el elemento HTML Div para mostrar el mensaje.

Código ASPX:

   1: <head runat="server">
   2:     <title></title>
   3:     <script type="text/javascript" language="javascript">
   1:  
   2:         function MostrarLabel() {
   3:             setTimeout("OcultarLabel()", 3000);
   4:             var msj = document.getElementById("lblMensaje");
   5:             msj.style.visibility = "visible";
   6:         }
   7:         function OcultarLabel() {
   8:             var msj = document.getElementById("lblMensaje");
   9:             msj.style.visibility = "hidden";
  10:         }

</script>

   4: </head>
   5: <body >
   6:     <form id="form1" runat="server" >
   7:     <div>
   8:         <div id="lblMensaje" style="visibility:hidden;">
   9:           <h3>Mensaje mostrado por tres segundos...</h3> 
  10:           <br />
  11:         </div>                
  12:         <input type="button" value="click aqui" onclick="MostrarLabel()" />
  13:         <asp:Button ID="btnMostrarMensaje" runat="server" Text="Mostrar" 
  14:             onclick="btnMostrarMensaje_Click" />
  15:          <asp:Button ID="btnNada" runat="server" Text="No Muestra nada"  />        
  16:     </div>
  17:     </form>
  18: </body>

Código Evento:

   1: protected void btnMostrarMensaje_Click(object sender, EventArgs e)
   2:   {  
   3:     //codigo de operaciones contra la base de datos
   4:     Page.ClientScript.RegisterStartupScript(
   5:        Page.ClientScript.GetType(), "onLoad", "MostrarLabel();", true);
   6:   }

Navegadores Probados: Todos sobre Windows Vista SP1.

  • Firefox 3.0.6
  • Internet Explorer 7.0.6001
  • Opera 9.52
  • Google Chrome 1.0.154.48
  • Safari 3.1.2

Notas:

Recursos:

P.D.: Cuando tenga este tipo de requerimientos, no inventen marcianadas para hacerlo con ASP.NET 3.5++, puede ser tan simple de hacerlo con JavaScript. Ojo, tampoco se quiere concluir que todo lo vamos hacer con JavaScript, debemos buscar el equilibrio, sin afectar la seguridad y el rendimiento.

Saludos,