2009-04-23 25 views
7

Actualmente estoy atascado. Tengo un formulario web con un botón que registra o guarda un registro. Lo que me gustaría es que muestre una alerta de JavaScript y luego redirija a una página. Aquí está el código que estoy usandoAsp.net Webform Display Alerta y redirección

protected void Save(..) 
{ 
    // Do save stuff 
    DisplayAlert("The changes were saved Successfully"); 
    Response.Redirect("Default.aspx"); 
} 

Este código sólo redirige sin dar el aviso Guardado con éxito.

Aquí está mi código DisplayAlert

protected virtual void DisplayAlert(string message) 
    { 
     ClientScript.RegisterStartupScript(
         this.GetType(), 
         Guid.NewGuid().ToString(), 
         string.Format("alert('{0}');", message.Replace("'", @"\'").Replace("\n", "\\n").Replace("\r", "\\r")), 
         true 
        ); 
    } 

¿Puede alguien ayudarme a encontrar una solución a esto?

Gracias

Respuesta

7

No se puede hacer un Response.Redirect porque nunca se tiene visualizado javascript alerta. Es mejor tener su código de JavaScript realmente hacer un windows.location.href='default.aspx' para hacer la redirección después de que se muestra la alerta. Algo como esto:

protected virtual void DisplayAlert(string message) 
{ 
    ClientScript.RegisterStartupScript(
     this.GetType(), 
     Guid.NewGuid().ToString(), 
     string.Format("alert('{0}');window.location.href = 'default.aspx'", 
     message.Replace("'", @"\'").Replace("\n", "\\n").Replace("\r", "\\r")), 
     true); 
} 
+0

Gracias Keltex! Voy a intentar esto. – AlteredConcept

4

El método DisplayAlert añade el script de cliente a la solicitud de la página que se está ejecutando. Cuando llama a Response.Redirect, ASP.NET emite un redireccionamiento HTTP 301 al navegador, por lo tanto, inicia una nueva solicitud de página donde el script del cliente registrado ya no existe.

Como su código se está ejecutando en el lado del servidor, no hay forma de mostrar la alerta del lado del cliente y realizar la redirección.

Además, mostrar un cuadro de alerta de JavaScript puede ser confuso para el flujo de trabajo mental de un usuario, un mensaje en línea sería mucho más preferible. Quizás podría agregar el mensaje a la sesión y mostrarlo en la solicitud de la página Default.aspx.

protected void Save(..) 
{ 
    // Do save stuff 
    Session["StatusMessage"] = "The changes were saved Successfully"; 
    Response.Redirect("Default.aspx"); 
} 

Luego, en el código Default.aspx.cs detrás (o una clase de página de base común, de modo que esto puede suceder en cualquier página, o incluso la página maestra):

protected void Page_Load(object sender, EventArgs e) 
{ 
    if(!string.IsNullOrEmpty((string)Session["StatusMessage"])) 
    { 
     string message = (string)Session["StatusMessage"]; 
     // Clear the session variable 
     Session["StatusMessage"] = null; 
     // Enable some control to display the message (control is likely on the master page) 
     Label messageLabel = (Label)FindControl("MessageLabel"); 
     messageLabel.Visible = true; 
     messageLabel.Text = message; 
    } 
} 

El código no es probados, pero que tiene que introducir en la dirección correcta

1
protected void Save(..) 
{  
    // Do save stuff  
    ShowMessageBox(); 
} 

private void ShowMessageBox() 
{   
    string sJavaScript = "<script language=javascript>\n";   
    sJavaScript += "var agree;\n";   
    sJavaScript += "agree = confirm('Do you want to continue?.');\n";   
    sJavaScript += "if(agree)\n";   
    sJavaScript += "window.location = \"http://google.com\";\n";   
    sJavaScript += "</script>";  
    Response.Write(sJavaScript); 
} 
4

Esto funciona perfecto:

string url = "home.aspx"; 
ClientScript.RegisterStartupScript(this.GetType(), "callfunction", "alert('Saved Sucessfully.');window.location.href = '" + url + "';",true); 
+0

¡Perfecto! Gracias –

+0

Si está haciendo esto desde dentro de un control, es posible que necesite agregar 'Página' delante de' ClientScript' como lo siguiente: 'Page.ClientScript ...' –

Cuestiones relacionadas