2009-01-21 17 views
5

Tengo un problema: cuando llamo a Response.Redirect() desde la página maestra, no funciona. Bueno, la depuración puedo ver que hasta el método Pre_Render() se carga la página de destino, pero luego se representa la página anterior.¿Cómo puedo hacer que Response.Redirect() trabaje desde MasterPage?

Aquí hay un código para explicar mejor:

(de MasterPageMain.master.cs)

protected void Page_Init(object sender, EventArgs e) 
{ 
    string m_QueryStringValue = Request.QueryString.Get("action"); 
    if ((!string.IsNullOrEmpty(m_QueryStringValue)) && (m_QueryStringValue.ToLower() == "send")) 
    { 
     if (Session["to"] != null && Session["to"] is List<string>) this.SendPageByMail(); 
     else 
     { 
      Session.Add("AddressToSend", Request.RawUrl); 
      Response.Redirect("~/chooseRecipients.aspx"); 
     } 
    } 
} 

Tengo un javascript que añade la cadena de consulta añadiendo "action = enviar" cuando hago clic en la opción Enviar botón.

Si estoy en la página "~/somethingInterestingToSend()" -por ejemplo- quiero entrar en la página de selección de destinatarios, pero cuando hago clic en el botón Enviar siempre veo la misma página.

¿Cuál puede ser el error?

+1

Una nota al margen: tenga cuidado al usar la sesión para almacenar variables. Tenga en cuenta que el usuario puede tener dos pestañas abiertas con su sitio y cada página sobrescribe el valor anterior. Será mejor enviar la URL de retorno en la cadena de consulta –

Respuesta

0

No sé si es la raíz de su problema, pero cambiaría 2 cosas. Me gustaría cambiar el código para:

Response.Redirect("~/chooseRecipients.aspx", false); 

y seguir la lógica de Pageload

1

No estoy seguro de entender completamente su descripción del problema, pero aquí hay algunas cosas a tener en cuenta:

Menciona un botón de envío. Si es así, al hacer clic en él se activa una devolución de datos de JavaScript al servidor. Esta devolución de datos es a la URL original. No estoy seguro de lo que está modificando con Javascript, pero no creo que cambie la URL de devolución (y la cadena de consulta).

Si necesita realizar una lógica para redirigir, es posible que desee ejecutarla en el evento clic de botón en el servidor.

Si no es necesario para ejecutar cualquier lógica en el servidor, es posible para la redirección con javascript:

window.location = "chooseRecipients.aspx"; 
1

No se puede probar esta teoría (que se ejecuta desde la memoria en el momento), sino dar a este un tiro:

(lo siento, limpió el código un poco también)

protected void Page_Init(object sender, EventArgs e) 
{ 
    string m_QueryStringValue = Request.QueryString.Get("action") ?? ""; 
    if (m_QueryStringValue.ToLower() == "send") 
    { 
     if ((Session["to"] as List<string>) != null) 
     { 
      this.SendPageByMail(); 
     } 
     else 
     { 
      Session.Add("AddressToSend", Request.RawUrl); 
      Response.Redirect("~/chooseRecipients.aspx", false); 
      HttpContext.Current.ApplicationInstance.CompleteRequest() 
     } 
    } 
} 
+0

lo siento, no funciona – p4bl0

1

Si desea redirigir no conectado a los usuarios a una página de acceso debe comprobar el Request.RawUrl() como este:

string strURL=Request.RawUrl.ToUpper(); 

if (!strURL.Contains("LOGIN.ASPX") && !strURL.Contains("LOGOUT.ASPX") 
    && !strURL.Contains("ERROR.ASPX") && !strURL.Contains("UNDERCONSTRUCTION.ASPX")) 
{ 
    Response.Redirect("~/Login.aspx", false); 
} 

Todos los demás sitios serán redirigidos.

Cuestiones relacionadas