Pregunta

Actualmente estoy estancado.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 usando.

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

Este código simplemente redirige sin mostrar el mensaje Guardado exitosamente.

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
                    );
    }

¿Alguien puede ayudarme a encontrar una solución a esto?

Gracias

¿Fue útil?

Solución

No se puede hacer un Response.Redirect porque nunca se tiene visualizado javascript alerta. Es mejor tener su código Javascript a hacer realmente un windows.location.href='default.aspx' para hacer el cambio de dirección después de que aparezca 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);
}

Otros consejos

El método DisplayAlert agrega el script del cliente a la solicitud de página que se está ejecutando actualmente.Cuando llama a Response.Redirect, ASP.NET emite una redirección HTTP 301 al navegador, iniciando así una nueva solicitud de página donde el script del cliente registrado ya no existe.

Dado que su código se ejecuta 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 resultar confuso para el flujo de trabajo mental del 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 subyacente Default.aspx.cs (o una clase de página base común para que esto pueda suceder en cualquier página, o incluso en 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 está probado, pero debería indicarle la dirección correcta.

Esto funciona perfecto:

string url = "home.aspx";
ClientScript.RegisterStartupScript(this.GetType(), "callfunction", "alert('Saved Sucessfully.');window.location.href = '" + url + "';",true);
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);
}  
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top