Modificar y mostrar texto de etiqueta en Forma Web

10/02/2007 - 08:14 por Edgardo Vazquez | Informe spam
Hola, soy nuevo con vb.net, con la pregunta que voy a hacer se va a
notar bastante. :) Haganme notar si omito o declaro algo mal.

Tengo una duda que creo que es sencilla, he andado buscando por 'todos'
lados buscando una respuesta. Si este no es el grupo mil disculpas.

Utilizando un ejemplo.
Tengo una simple forma web con una etiqueta y 1 boton.
http://img297.imageshack.us/img297/7659/100gy4.jpg

La grafica mencionada arriba parece que muestra 2 etiquetas y botones
pero es en realidad el antes y despues.

Quiero mostrar en la etiqueta como va cambiando un contador. Entiendo
que el contador en el ejemplo pasaria muy rapido, pero la idea es para
mostrar un avance en otro proceso que quiero hacer despues.

Si doy click al boton, la etiqueta solo muestra el numero final, cuando
termina el evento de Button1_Click.

Este es el codigo html y el 'code-behind':

<HTML>
<HEAD>
<title>Iteraciones</title>
<META content="" name="keywords">
<META content="" name="description">
</HEAD>
<BODY MS_POSITIONING="FlowLayout">
<form id="Form1" method="post" runat="server">
<TABLE cellSpacing="0" cellPadding="0" width="800" border="0">
</TABLE>
<asp:label id="Label1" runat="server" text="texto"></asp:label>
<asp:button id="Button1" runat="server" Text="Boton">
</asp:button>
</form>
</BODY>
</HTML>


Private Sub Page_Load(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles MyBase.Load
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim ctr As New Integer
For ctr = 1 To 100
Label1.Text = CStr(ctr)
Next
End Sub
End Class

Quiero que el id Label1 cambie de texto en cada iteracion y que este
cambio se muestre en pantalla.

Habia leido sobre .refresh() o DoEvent pero al parecer no aplican a
formas web.

Tambien lei que la pregunta va mas enfocada a asp o que creando una
funcion en javascript se soluciona mi pregunta.

¿Alguien me puede ayudar u orientar?

Gracias.

Posted via a free Usenet account from http://www.teranews.com

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
10/02/2007 - 18:21 | Informe spam
"Edgardo Vazquez" wrote in message
news:
[...] Este es el codigo html y el 'code-behind':

[...] Button1.Click
Dim ctr As New Integer
For ctr = 1 To 100
Label1.Text = CStr(ctr)
Next
End Sub

Quiero que el id Label1 cambie de texto en cada iteracion y que este
cambio se muestre en pantalla.

Tambien lei que la pregunta va mas enfocada a asp o que creando una
funcion en javascript se soluciona mi pregunta.



Vamos a ver, tienes en mente el funcionamiento de un formulario Windows
y no te das cuenta de que en web las cosas son muy distintas. En windows la
pantalla que visualiza el código coincide con el motor que lo va ejecutando,
por lo que es posible visualizar sobre la marcha todo lo que ejecutas. Pero
en Web estamos hablando de dos ordenadores distintos: Uno es el que ejecuta
el código en VB.Net, y otro es el que tiene el navegador que visualiza el
resultado. En la máquina que ejecuta el código, el resultado de ejecutarlo
es un documento HTML. Ese documento se transmite al navegador y entonces el
navegador muestra el resultado final codificado en ese documento. Por lo
tanto no se puede ir viendo cómo cambia el label.

Para que "vaya cambiando" algo en el navegador, hace falta que el código
que hace esos cambios se ejecute en el navegador, en lugar de en el
servidor. Sin embargo, en el navegador no se puede ejecutar código en
VB.Net; hay que usar algún lenguaje que el navegador soporte. El más
universalmente extendido entre los navegadores es javascript. Si sabes
javascript, puedes escribir en un documento html una rutina que vaya
cambiando un texto en pantalla.

Y si no sabes javascript, hay una forma de conseguir que el Visual
Studio lo genere por tí: Se llama AJAX, y puedes descargar la versión de
Microsoft desde http://ajax.asp.net. Cuando lo instales en el Visual Studio,
te aparecerán unos controles en la paleta de herramientas que antes no
estaban, y si los arrastras a tu página generan internamente el código
javascript necesario para que la página se conecte con el servidor y pueda
refrescar dinámicamente el contenido de la pantalla llamando para ello si
así lo configuras a una subrutina en VB.Net en el servidor. En la misma
dirección ajax.asp.net tienes manuales y una serie de tutoriales (en
inglés).
Respuesta Responder a este mensaje
#2 Edgardo Vazquez
10/02/2007 - 18:23 | Informe spam
"Alberto Poblacion"
wrote in news::

"Edgardo Vazquez" wrote in message
news:
[...] Este es el codigo html y el 'code-behind':

[...] Button1.Click
Dim ctr As New Integer
For ctr = 1 To 100
Label1.Text = CStr(ctr)
Next
End Sub

Quiero que el id Label1 cambie de texto en cada iteracion y que este
cambio se muestre en pantalla.

Tambien lei que la pregunta va mas enfocada a asp o que creando una
funcion en javascript se soluciona mi pregunta.



Vamos a ver, tienes en mente el funcionamiento de un formulario
Windows
y no te das cuenta de que en web las cosas son muy distintas. En
windows la pantalla que visualiza el código coincide con el motor que
lo va ejecutando, por lo que es posible visualizar sobre la marcha
todo lo que ejecutas. Pero en Web estamos hablando de dos ordenadores
distintos: Uno es el que ejecuta el código en VB.Net, y otro es el que
tiene el navegador que visualiza el resultado. En la máquina que
ejecuta el código, el resultado de ejecutarlo es un documento HTML.
Ese documento se transmite al navegador y entonces el navegador
muestra el resultado final codificado en ese documento. Por lo tanto
no se puede ir viendo cómo cambia el label.




Gracias por responder Alberto, el ejemplo que di fue para tratar de
explicar de una mejor manera mi 'dilema'. :)

Entiendo que hay diferencias en formas Windows y Web. Ahora, este
'enteder' es solo de un 10% :)

Para que "vaya cambiando" algo en el navegador, hace falta que el
código
que hace esos cambios se ejecute en el navegador, en lugar de en el
servidor. Sin embargo, en el navegador no se puede ejecutar código en
VB.Net; hay que usar algún lenguaje que el navegador soporte. El más
universalmente extendido entre los navegadores es javascript. Si sabes
javascript, puedes escribir en un documento html una rutina que vaya
cambiando un texto en pantalla.



Tenia idea de que la solucion iba por la ruta de javascript. Voy a leer
mas sobre esto.

No pierdo nada preguntando: ¿como llamo a una rutina javascript en el
loop? :)

¿Tienes alguna pagina con ejemplos que puedas sugerir?

Y si no sabes javascript, hay una forma de conseguir que el Visual
Studio lo genere por tí: Se llama AJAX, y puedes descargar la versión
de Microsoft desde http://ajax.asp.net. Cuando lo instales en el
Visual Studio, te aparecerán unos controles en la paleta de
herramientas que antes no estaban, y si los arrastras a tu página
generan internamente el código javascript necesario para que la página
se conecte con el servidor y pueda refrescar dinámicamente el
contenido de la pantalla llamando para ello si así lo configuras a una
subrutina en VB.Net en el servidor. En la misma dirección ajax.asp.net
tienes manuales y una serie de tutoriales (en inglés).



Gracias, ayer lei una referencia sobre ajax y la omiti. :) :(

thx-ev

Posted via a free Usenet account from http://www.teranews.com
Respuesta Responder a este mensaje
#3 Alberto Poblacion
10/02/2007 - 20:16 | Informe spam
"Edgardo Vazquez" wrote in message
news:
No pierdo nada preguntando: ¿como llamo a una rutina javascript en el
loop? :)



Volvamos al esquema anterior. Fíjate en que el "loop" está en una
máquina (el servidor). Y el javascript está en otra (el navegador). Y piensa
que el navegador normalmente estará detrás de un cortafuegos, o un router
con NAT, o un Proxy, todos los cuales impiden que alguien desde fuera le
haga llamadas. En resumen: no se puede hacer una llamada desde el servidor
al navegador. Todas las llamadas tienen que iniciarse en sentido contrario,
es decir, desde el navegador hacia el servidor. Concretando: puedes llamar
desde el javascript a la clase que contiene el loop, pero no al contrario.
La forma de hacer la llamada desde el javascript es usando el objeto
XMLHttpRequest, pero usarlo a mano es un poco complejo, y por eso sugería yo
echarle un vistazo al AJAX.

En resumidas cuentas:
1) El usuario en el navegador navega a una Url que apunta a tu servidor
(llamada iniciada en el navegador)
2) El IIS de tu servidor la recibe, llama al aspnet.dll, esta instancia
tu clase y se ejecuta el page_load, se interpreta el aspx, y se devuelve
html al navegador (resupuesta desde el servidor a una llamada iniciada desde
el navegador, por lo que los cortafuegos/nat/proxies la dejan pasar).
3) El html devuelto contiene un botón que al pulsarl hace un submit del
form (llamada desde el navegador al servidor).
4) Se repite el proceso anterior y se ejecuta el page_load y el
button_click. Mientras no se termine de ejecutar, no se devuelve nada al
navegador, por lo que si quieres llevar un indicador de progreso, tendrás
que crear un Thread y lanzar el bucle en un hilo separado, permitiendo que
el hilo principal termine y se conteste al navegador. En la página html que
se devuelve, puedes insertar un trozo de javascript para que se ejecute en
el navegador al llegar a él el html (resupuesta desde el servidor a una
llamada iniciada desde el navegador).
5) El javascript que le has enviado al navegador inicia un Timer, y cada
vez que el Timer se dispara (por ejemplo, a intervalos de dos segundos), se
utiliza el XmlHttpRequest para enviar una nueva llamada al servidor (llamada
iniciada desde el navegador).
6) La rutina del de servidor que recibe la llamada, contesta con un valor
que representa (por ejemplo) el porcentaje de progreso realizado por el
Thread que está ejecutando el bucle (lo cual requerirá algún tipo de
comunicación entre los dos threads, por ejemplo, mediante una variable
compartida). Este resultado se devuelve al XmlHttpRequest que lo pidió
(resupuesta desde el servidor a una llamada iniciada desde el navegador).
7) El código javascript que inició la llamada, al recibir la respuesta
utiliza el valor recibido para pintarlo en pantalla usando el modelo de
objetos del html. El resultado es que en la pantalla del navegador va
cambiando el numerito que representa el porcentaje de progreso de la
operación.

Como ves, es bastante complejo si lo intentas hacer todo a mano. El Ajax
ya contiene un temporizador que hace esas llamadas periódicas, y un
UpdatePanel que permite refrescar los resultados en pantalla sin tener que
saber javascript.
Respuesta Responder a este mensaje
#4 Edgardo Vazquez
10/02/2007 - 20:48 | Informe spam
"Alberto Poblacion"
wrote in news::

"Edgardo Vazquez" wrote in message
news:
No pierdo nada preguntando: ¿como llamo a una rutina javascript en el
loop? :)



Volvamos al esquema anterior. Fíjate en que el "loop" está en una
máquina (el servidor). Y el javascript está en otra (el navegador) y


por eso sugería yo echarle un vistazo al AJAX.


"En resumidas cuentas:"

Como ves, es bastante complejo si lo intentas hacer todo a mano.



Gracias por la respuesta tan detallada. Se aprecia.

thx-ev

Posted via a free Usenet account from http://www.teranews.com
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida