Deshabilitar una página ASP

Tengo una página web la cual esta accediendo a una base de datos. El problema es que en ocasiones la página demora un poco en traer los datos, y los usuarios comienzan a ejecutar acciones y a presionar los botones de la página antes que esta retorne los valores, lo cual me esta generando unos errores de transacciones en mi base de datos.
Mi pregunta puntual es la siguiente:
Como puedo hacer para deshabilitar la página web (Bloquear los controles del document) y como volverlos a habilitar.
Si pudiera hacer eso podría deshabilitar el documento para consultar mi base de datos y luego habilitarlos cuando la transacción se encuentre completa.
Agradecería enormemente la ayuda, ya que de esto depende poder solucionar una gran cantidad de errores que tiene mi sistema.
Saludos ATENTAMENTE. KOK-Ricardo (Experto en Visual Basic y SQL-SERVER)
Respuesta
1
Lo siento pero no hay ningún método efectivo 100x100 que funcione con todos los navegadores, hay diversos usos de javascript que pueden ayudarte tal como inhabilitar el botón derecho, anular los botones de atras/adelante del navegador(no funciona en netscape por lo que he podido comprobar pero no importa mucho pues apenas se usa ya este navegador y si va en IExplorer u Opera). Estos scripts los encontraras por internet en javascript.
También puedes abrir tu página de interés en un popup para evitar el botón ver--código fuente-- por si alguien quiere husmear cuando vea que no puede echar hacia atrás o refrescar la página.
Busca más información, cuando yo averigüe todo esto fue hace casi 2 años pero en este sentido poco se ha avanzado y es más la imaginación que le eches, o sea, ...
... podrías hacer un alert antes de cargar los datos y que la gente se espere y mantienes el foco en esa ventana y cuando se cargue la otra cierras esa ventana o cosas similares, o pon algo que pueda distraer al usuario mientras descarga, de hecho que tu transacción tarde mucho puede hacer que pierdas usuarios y tanto si inhabilitas o no los controles si el volcado de datos tarda perderás los usuarios.
Importante! Cuando vuelques los datos usa Getrows, es mucho mejor que hacer bucles y yo lo uso siempre que veo que la transacción de datos es compleja o larga o se han de hacer muchos cálculos. Notarás la diferencia, te paso un link que te habla sobre ello.
http://www.aspfacil.com/articulos/110201.asp
Saludos
McAlons Multimedia Design
:::::::::::::::::::::::::
www.lenguasecreta.com
:::::::::::::::::::::::::
(Última web en construcción)

2 respuestas más de otros expertos

Respuesta
1
Una buena idea puede ser poner un <div> que ocupe toda la página completa y tape literalmente toda la web. Cuando no haya nada ejecutándose lo dejas normalmente con el atributo:
visibility="hidden"
De modo que no se vea que esta.
Después, cuando se de a uno de los botones de acción, antes de enviar el formulario (supongo, o lo que sea que se realice), accedes al div y le cambias el atributo a "visible", tapadolo todo y no dejando que toquen nada más.
El código seria más o menos:
<div id="tapa" visibility="hidden">

Aquí pones lo que quieras que se vea cuando la capa se vea, un gif animado que ponga "cargando..." o algo así
</div>

Y con javascript lo haces visible como:
this.document.getElementById("tapa").setAttribute("visibility","visible");

Espero que quede más o menos claro... si necesitas algún apunte más preguntame más.
Hola...
Agradezco mucho tu ayuda, pero la solución afecta mucho a lo que es la visual de la página, ya que mi página esta trabajando con Remote Scripting con los cual no hago POST en la página. En resumen la página no desaparece nunca.
Si ejecuto tu solución la página desaparece hasta que termina la transacción y luego aparece, y tu entenderás que eso es bastante molesto para el usuario.
Pero no te preocupes, ya que encontré una solución que me sirve bastante.
La solución que encontré es recorrer los controles de la página y deshabilitarlos uno por uno (Claro que solo los tipos de objeto que necesito).
Claro que ahora tengo una duda aun más extraña. Lo que me ocurre es que aparte de deshabilitar (disabled = false) los objetos les cambie la propiedad CURSOR del STYLE, le asigné WAIT para que apareciera un reloj de arena en este lapso de tiempo. Todo funciona de maravillas menos el DROPDOWN (El famoso ComboBox). Este control no quiere aceptar la propiedad CURSOR para poder cambiar el cursor al reloj de arena.
Si tu sabes como poder poner el cursor en reloj de arena sobre el DropDown te lo agradecería mucho.
Si no conoces la solución para esto solo avisame y te puntuare sin problemas...
Agradeciendo tu tiempo y pidiendo disculpas por las molestias.
Saludos KOK-Ricardo
Siento que mi idea no te sirviera...
Lo que me comentas me parece muy raro, porque un combobox no es nada especial que yo sepa para que no te tome el estilo que le pongas al cursor. He echado un vistazo en google y no he encontrado nada que indique un problema como ese...
¿Tal vez puedas enviarme un trozo de código o decirme donde pueda verlo?
Siento no haberte podido ayudar.
Gracias por tu tiempo pero ya resolví mi problema. El problema es que estoy programando este sistema en Visual InterDev (de microsoft) y el DropDown en web no tiene esta propiedad por lo cual no la admitirá nunca, así que como necesito que el usuario no pueda hacer operaciones dentro de una transacción le puse el Wait al cursor para el body completo y así si toma el cursor.
Aun no se por que el DropDown no toma esta ropiedad en Visual Interdev pero mi problema esta solucionado.
Nuevamente agradezco tu ayuda y tu tiempo.
Pd: Tu solución si sirve para páginas que hacen post así que te puntuare como corresponde.
Respuesta
1
Sin saber muy bien como tienes estructurada la página, solo te puedo decir que epor que no intentas utilizar la propiedad disabled en los botones y cajas para que el usuario no pueda pulsar o escribir nada hasta que tu se lo permitas, y mientras tu controlas la transacción con la BD.
Gracias pero con esa solución aun me quedan objetos habilitados, pero no te preocupes, ya que tengo una solución que me ayudo mucho.
Gracias por tu tiempo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas