2010-03-12 19 views
5

Estoy usando Asp.net 2.0. Hago un server.transfer de la página 1 a la página 2. La URL permanece en la página 1. Ahora hago clic en un enlace en la página 2 y eso me transferirá a la página 3. Entonces la URL debe permanecer en la página 1. En cambio, el navegador muestra la URL de página 2. ¿Es ese el comportamiento esperado?Server.transfer cambiando la URL por segunda vez

En realidad, estaba tratando de ocultar los parámetros de la URL.

  1. No puedo usar response.redirect porque no puedo acceder a la página anterior desde aquí.
  2. Intenté usar PostBackUrl, pero eso no funcionará para mí porque necesito guardar los datos en la página actual y luego mostrar la siguiente página si no ocurrió ningún error. Si los datos eran incorrectos y/o había errores, entonces necesito mostrar al usuario la misma página.
  3. Ahora pensé en probar server.transfer, pero eso muestra la URL de la página anterior.

¿Alguien puede señalarme en la dirección correcta?

+0

Terminé usando sesiones y eso me solucionó el problema. Pero aún me gustaría saber cuál es la solución para este problema. –

Respuesta

1

Se espera que esto suceda.

Cuando usa Server.Transfer ASP.NET deja de procesar la solicitud original a través de un ThreadAbortException y luego inmediatamente, en el mismo subproceso, comienza a procesar la nueva solicitud. La nueva solicitud se ejecuta y envía su salida al navegador. El navegador no sabe nada sobre el Server.Transfer. Todo lo que sabe el navegador es que solicitó la página 1 y el servidor le devolvió algo de contenido, que como desarrollador que conoce es en realidad de la página 2.

Las devoluciones de datos es donde se filtra la URL de la página2, si estaba destinada a ocultarse. Para que el contenido de la página2 pueda procesar una devolución de datos, debe realizar una devolución de datos a la página2. Si se publicó en la página 1, la página 1 no sabría qué hacer con viewstate y formaría eventos, ya que en realidad los genera la página2. Para lograr esto, el elemento <form> servido por la página 2 tiene un action de page2. Mira su fuente HTML en el navegador después de la Server.Transfer, verá esto:

<form name="aspnetForm" method="post" action="Page2.aspx" id="aspnetForm"> 

El uso de los tradicionales formularios web, la única manera de ocultar completamente la URL desde la que el usuario sería no utilizar las devoluciones de datos y tienen todo los enlaces en la página 2 realmente vinculan de nuevo a la página1 y agregan toda la lógica a la página1 para manejarla adecuadamente.

Alternativamente, no podría usar devoluciones de datos en absoluto. Si realizó todas las acciones a través de ajax, entonces no habría cambios en la URL del navegador y, de todos modos, podría obtener una mejor experiencia para el usuario.

Aún mejor sería utilizar ASP.NET MVC, que lo empuja hacia URLs similares a REST, que son muy fáciles de entender para el usuario y que puede asignar a parámetros más complejos internamente.

Cuestiones relacionadas