net example evitar ejemplo ejecutar despues asp __dopostback javascript c# asp.net forms postback

javascript - example - ¿Cómo publico y luego redirecciono a una URL externa de ASP.Net?



javascript__ dopostback c# example (6)

Aquí he resuelto este problema hoy. Comencé con este artículo en C # Corner, pero encontré el ejemplo, aunque técnicamente correcto, un poco incompleto. Todo lo que dijo era correcto, pero tenía que visitar algunos sitios externos para armar esto y trabajar exactamente como yo quería.

No ayudó que el usuario no estuviera entregando un formulario técnicamente; estaban haciendo clic en un enlace para ir a nuestro centro de soporte, pero para iniciar sesión en una publicación http tenía que hacerse en el sitio del centro de soporte.

Esta solución implica el uso de HttpContext.Current.Response.Write () para escribir los datos para el formulario, luego usar un poco de Javascript en el

<body onload="">

método para enviar el formulario a la URL adecuada.

Cuando el usuario hace clic en el enlace del Centro de soporte, se llama al siguiente método para escribir la respuesta y redirigir al usuario:

public static void PassthroughAuthentication() { System.Web.HttpContext.Current.Response.Write("<body onload=document.forms[0].submit();window.location=/"Home.aspx/";>"); System.Web.HttpContext.Current.Response.Write("<form name=/"Form/" target=_blank method=post action=/"https://external-url.com/security.asp/">"); System.Web.HttpContext.Current.Response.Write(string.Format("<input type=hidden name=/"cFName/" value=/"{0}/">", "Username")); System.Web.HttpContext.Current.Response.Write("</form>"); System.Web.HttpContext.Current.Response.Write("</body>"); }

La clave de este método está en ese bit de onload de Javascript, que, cuando se carga el cuerpo de la página, envía el formulario y luego redirige al usuario a mi página de inicio. La razón de ese poco de hoodoo es que estoy lanzando el sitio externo en una nueva ventana, pero no quiero que el usuario vuelva a enviar el formulario oculto si actualiza la página. Además, esa forma oculta empujó la página hacia abajo unos pocos píxeles, lo que me molestó.

Estaría muy interesado en cualquier idea más clara que alguien tenga sobre esta.

Eric Sipple

ASP.NET del lado del servidor controla la devolución a su propia página. Esto hace que los casos en los que desee redirigir a un usuario a una página externa, pero que es necesario enviarlos a esa página por alguna razón (para autenticación, por ejemplo) sean un problema.

Un HttpWebRequest funciona muy bien si no desea redireccionar, y JavaScript está bien en algunos casos, pero puede ser complicado si realmente necesita el código del lado del servidor para juntar los datos para la publicación.

Entonces, ¿cómo publican ambos en una URL externa y redirigen al usuario al resultado de su código subyacente de ASP.NET?


Lo he hecho presentando un formulario que envía automáticamente (usando JavaScript) a la URL remota deseada: reúna la información que necesita para la publicación en la devolución de datos del formulario web y luego cree el HTML para el formulario de publicación remota y vuelva a procesarlo. al cliente.

Creé una clase de utilidad para esto que contiene la URL remota y una colección de pares de nombre / valor para el formulario.

La publicación cruzada de páginas funcionará si posee ambas páginas, pero no si necesita publicar en otro sitio (PayPal, por ejemplo).


Si está utilizando ASP.NET 2.0, puede hacerlo con la publicación de páginas cruzadas .

Editar: me perdí el hecho de que estás preguntando por una página externa . Para eso, creo que necesitaría tener su página ASP.NET generada en un formulario HTML cuya acción está configurada en la URL remota y el método está establecido en POST. (Con la publicación de páginas cruzadas, esta podría ser una página diferente sin UI, solo elementos de formulario ocultos). Luego agregue un poco de javascript para enviar el formulario tan pronto como se reciba el resultado de la devolución en el cliente.


Haría la publicación del formulario en tu código detrás de usar la clase HttpWebRequest. Aquí hay una buena clase de ayuda para comenzar:

http://geekswithblogs.net/rakker/archive/2006/04/21/76044.aspx

A partir de ahí, puede hacer un Response.Redirect, o quizás necesite variar su acción en función del resultado de la publicación (si hubo un error, mostrarlo al usuario o lo que sea). Creo que ya tienes la respuesta en tu pregunta para ser sincero: parece que piensas que es una publicación O redireccionamiento cuando en realidad puedes hacer ambas cosas desde tu código.


Necesitaba abrir en la misma ventana, tratar con posibles problemas de marcos de la página original, y luego redireccionar a un sitio externo en el código subyacente:

Private Sub ExternalRedirector(ByVal externalUrl As String) Dim clientRedirectName As String = "ClientExternalRedirect" Dim externalRedirectJS As New StringBuilder() If Not String.IsNullOrEmpty(externalUrl) Then If Not Page.ClientScript.IsStartupScriptRegistered(clientRedirectName) Then externalRedirectJS.Append("function CheckWindow() {") externalRedirectJS.Append(" if (window.top != window) {") externalRedirectJS.Append(" window.top.location = ''") externalRedirectJS.Append(externalUrl) externalRedirectJS.Append("'';") externalRedirectJS.Append(" return false;") externalRedirectJS.Append(" }") externalRedirectJS.Append(" else {") externalRedirectJS.Append(" window.location = ''") externalRedirectJS.Append(externalUrl) externalRedirectJS.Append("'';") externalRedirectJS.Append(" }") externalRedirectJS.Append("}") externalRedirectJS.Append("CheckWindow();") Page.ClientScript.RegisterStartupScript(Page.GetType(), clientRedirectName, externalRedirectJS.ToString(), True) End If End If End Sub


Empecé con este ejemplo de CodeProject

Luego, en lugar de agregar a la página, tomé prestado de saalon (arriba) e hice una Response.Write ().