Foros del Web » Programando para Internet » ASP Clásico »

Problema con Includes y Nombres Redefinidos

Estas en el tema de Problema con Includes y Nombres Redefinidos en el foro de ASP Clásico en Foros del Web. Tengo un serio problema, y lamentablemente me he dado cuenta muy tarde de el, ya tengo casi todo el sitio terminado... Resulta que construi mi ...
  #1 (permalink)  
Antiguo 10/04/2008, 22:25
Avatar de i_e_s27  
Fecha de Ingreso: marzo-2008
Ubicación: En mi casa
Mensajes: 208
Antigüedad: 17 años, 1 mes
Puntos: 5
Problema con Includes y Nombres Redefinidos

Tengo un serio problema, y lamentablemente me he dado cuenta muy tarde de el, ya tengo casi todo el sitio terminado...

Resulta que construi mi pagina de la siguiente forma:

Pagina defualt.asp:



y cada vez que necesito mostrar una seccion diferente lo hago en un QuerryString asi: defualt.asp?seccion=

Y en la pagina default tengo un Select Case asi:

Código:
				<%
				Dim Seccion
				Seccion = Trim(Request.QueryString("seccion"))
				select case Seccion
					Case "ofertas_y_novedades" %>
					<!--#include file='ofertas_y_novedades.asp'-->
					<% Case "catalogo" %>
					<!--#include file='catalogo.asp'-->
					<% Case "busqueda" %>
					<!--#include file='busqueda.asp'-->
					<% Case "la_empresa" %>
					<!--#include file='la_empresa.asp'-->
					<% Case "garantias_y_faq" %>
					<!--#include file='garantias_y_faq.asp'-->
					<% Case "contacto" %>
					<!--#include file='contacto.asp'-->
					<% Case Else %>
					<!--#include file='home.asp'-->
				<% end select %>

El problema que me acabo de dar cuenta es que los Includes los mete antes que la operacion logica Select Case (o If o lo que sea)...
Entonces si en la pagina 'ofertas_y_novedades.asp' tengo Dim pepe y en la pagina 'catalogo.asp' tambien tengo Dim pepe Me dice que tengo el Nombre Redefinido.

Como puedo hacer para meter esos includes pero a medida que me lo valla solicitando el select case?

Atencion que adentro de los includes tmb tengo codigo ASP que debe ser ejecutado!

Tambien se me vino a la cabeza que cada vez que cargo la pagina el servidor esta levantando todas las secciones a la vez en memoria... lo cual es ineficaz.

Habia pensado en iFrames... pero como los implemento? Otra cosa: yo no quiero tener un cuadrado con una barra de desplazamiento a la derecha, como marque en Rojo en la imagen, sino una sola barra, como la que marque en azul en el dibujo.

Muchas Gracias!!!
  #2 (permalink)  
Antiguo 10/04/2008, 22:46
Avatar de i_e_s27  
Fecha de Ingreso: marzo-2008
Ubicación: En mi casa
Mensajes: 208
Antigüedad: 17 años, 1 mes
Puntos: 5
Re: Problema con Includes y Nombres Redefinidos

Se puede hacer un server.execute() en vez de un Include?

Digo, porque los includes se incluyen (valga la redundancia) antes de que el código asp sea interpretado, pero no se como funciona server.execute()

Ayudaaaa!!
  #3 (permalink)  
Antiguo 11/04/2008, 00:55
Avatar de i_e_s27  
Fecha de Ingreso: marzo-2008
Ubicación: En mi casa
Mensajes: 208
Antigüedad: 17 años, 1 mes
Puntos: 5
Re: Problema con Includes y Nombres Redefinidos

Pude resolver el problema con server.execute()... pero... encontre algo muy raro (para mi por lo menos jaja), y quiero compartirlo con ustedes:

Resulta que en la pagina default.asp, donde tenia el select case, antes de eso, arriba del todo tenia un include que me daba la conexion a la base de datos:

Código:
<!--#include file="conexion.asp"-->
................mucho codigo que no viene al caso................
				<%
				Dim Seccion
				Seccion = Trim(Request.QueryString("seccion"))
				select case Seccion
					Case "ofertas_y_novedades" %>
					<!--#include file='ofertas_y_novedades.asp'-->
					<% Case "catalogo" %>
					<!--#include file='catalogo.asp'-->
					<% Case "busqueda" %>
					<!--#include file='busqueda.asp'-->
					<% Case "la_empresa" %>
					<!--#include file='la_empresa.asp'-->
					<% Case "garantias_y_faq" %>
					<!--#include file='garantias_y_faq.asp'-->
					<% Case "contacto" %>
					<!--#include file='contacto.asp'-->
					<% Case Else %>
					<!--#include file='home.asp'-->
				<% end select %>
................mucho codigo que no viene al caso................
<!--#include file='cerrarconexion.asp'-->
...y esto andaba bien, las paginas incluidas en el select case tomaban la base de datos sin ningun problema.

Pero cuando pase a server.execute() paso algo raro:

Código:
<!--#include file="conexion.asp"-->
................mucho codigo que no viene al caso................
				<%
				Dim Seccion
				Seccion = Trim(Request.QueryString("seccion"))
				select case Seccion
					Case "ofertas_y_novedades"
						Server.Execute("ofertas_y_novedades.asp")
					Case "catalogo"
						Server.Execute("catalogo.asp")
					Case "busqueda"
						Server.Execute("busqueda.asp")
					Case "la_empresa"
						Server.Execute("la_empresa.asp")
					Case "garantias_y_faq"
						Server.Execute("garantias_y_faq.asp")
					Case "contacto"
						Server.Execute("contacto.asp")
					Case Else
						Server.Execute("home.asp")
				end select
				%>
................mucho codigo que no viene al caso................
<!--#include file='cerrarconexion.asp'-->
Las paginas del Select Case no me tomaban la conexion a la base de datos!!!

Asi que tube que poner un include a la conexion de la base de datos en cada una de las paginas de las secciones, y tambien el include para cerrar la conexion, aunque no se si es necesario este ultimo, ya que si lo tengo al final del todo en la pagina default.asp, va a cerrar la conexion y setear la conexion a Nothing, se abra donde se abra... de todas formas, funciona sin tirar errores CON y SIN el include 'cerrarconexion.asp' en cada pagina seccion Y CON dicho include en la pagina default.asp tambien


Muy raro esto, se ve que el server.execute() no toma las variables de la pagina que la llama, osea, ejecuta el archivo sin depender de nadie e imprime el resultado en la pagina que lo solicita... Sin embargo:

Si yo escribo default.asp?seccion=catalogo&accion=vercatalogo&ca tegoria=1

Me abre la pagina default.asp, y me ejecuta la seccion catalogo.asp, PERO catalogo.asp puede leer los QuerryStrings accion y categoria!!!!!

Osea que SI puede leer los QuerryStrings de la pagina que lo ejecuta, pero NO puede leer la variable conexion de la pagina que lo ejecuta...

Tambien intente poner la conexion directamente en el default.asp, sin include, sino escrita de una, y tampoco funciono (luego me di cuenta porque: incluirla es lo mismo que escribirla, porque el include se hace ANTES de procesar el codigo, es como si estubiera escrita ahi)

Bueno... una vez mas he aprendido mediante el viejo metodo autodidacta de prueba y error jajaja

PD: Vale la pena agregar a modo de comentario que el comando server.execute() funciona en IIS 5.0 para arriba, osea Windows 2000 para arriba (el XP tiene IIS 5.1)

Saludos!!!
  #4 (permalink)  
Antiguo 11/04/2008, 01:16
Avatar de i_e_s27  
Fecha de Ingreso: marzo-2008
Ubicación: En mi casa
Mensajes: 208
Antigüedad: 17 años, 1 mes
Puntos: 5
Re: Problema con Includes y Nombres Redefinidos

Me auto-cito:

Cita:
Iniciado por i_e_s27 Ver Mensaje
Tambien se me vino a la cabeza que cada vez que cargo la pagina el servidor esta levantando todas las secciones a la vez en memoria... lo cual es ineficaz.
Segun tengo entendido este metodo de server.execute() es mas eficaz ya que, a diferencia del include, no guarda en memoria las otras paginas cuando el select case no las llama
  #5 (permalink)  
Antiguo 11/04/2008, 08:58
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años, 3 meses
Puntos: 146
Re: Problema con Includes y Nombres Redefinidos

Ok, veamos

En un poco más simple de lo que quizá pareciera entender el por qué del comportamiento que observaste.

Primero, Lo que incluyes en el archivo NO se manda a la segunda página y los parámetros si por que los parámetros están dentro de un objeto contextual que existe para cada página. En este objeto se hacen referencias a las variables de servidor y a los objetos Session y Request, cuando tu utilizas Server.Execute o Server.Redirect creas una instancia nueva de este objeto y por ende a los mismos valores, pero si te das cuenta el código de la página "origen" no se involucra en estos objetos.
Server.Transfer según tengo entendido no crea un nuevo objeto, sino que apunta al mismo de la página "origen" y es más rápido por esto mismo que un Response.Redirect, al igual que este último no regresa el control a la página que lo llamó a diferencia de Server.Execute.

Espero me haya dado a entender.

PD. Tienes razón en ASP 2.0 no existen ni Transfer ni Execute, pero habían métodos para emularlos
  #6 (permalink)  
Antiguo 11/04/2008, 11:40
Avatar de u_goldman
Moderador
 
Fecha de Ingreso: enero-2002
Mensajes: 8.031
Antigüedad: 23 años, 4 meses
Puntos: 98
Re: Problema con Includes y Nombres Redefinidos

Desgraciadamente al ser procedural, el problema con el que te encontraste es el siguiente

Código:
'incluir.asp
Dim variable

'pagina.asp
Dim variable
<!--#include file = "variable"-->
Si esto lo interpretamos tal y como lo ve nuestro IIS:

Código:
Dim variable
Dim variable
Estamos redefiniedo la variable, lo cual no es válido, por eso el error, lo que explica Myakire es totalmente correcto acerca del server.execute, que crea una instancia nueva de un objeto, en tanto que server.transfer solamente pasa el foco de la aplicación a otro archivo en el servidor, el resultado de esto no será visible en el cliente (concretamente la URL), pero todos los objetos estarán disponibles en el archivo al que transferiste (Response, Request, etc).

Ahora, el problema que tuviste podría ser solventado si divides tu código en pequeñas subrutinas y funciones, de manera tal que no necesites definir variables que interfieran con otras, sino que las tengas "contenidas" dentro de su procedimiento correspondiente.


Saludos
__________________
"El hombre que ha empezado a vivir seriamente por dentro, empieza a vivir más sencillamente por fuera."
-- Ernest Hemingway
  #7 (permalink)  
Antiguo 11/04/2008, 12:14
Avatar de i_e_s27  
Fecha de Ingreso: marzo-2008
Ubicación: En mi casa
Mensajes: 208
Antigüedad: 17 años, 1 mes
Puntos: 5
Re: Problema con Includes y Nombres Redefinidos

Gracias a los dos por sus respuestas!

No se que seria de este foro sin gente como ustedes dos (Myakire y u_goldman) y tambien Al Zuwaga, Shiryu_Libra, tammander y otros mas que de momento no se me vienen a la mente.

Un para ustedes
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:48.