Pergunta

Atualmente estou preso. Eu tenho um formulário Web com um botão que os registos ou salva um registro. O que eu gostaria de tê-lo é exibir um alerta de javascript e, em seguida, redirecionar para uma página. Aqui está o código que estou usando

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

Este código apenas redireciona sem dar o prompt salvo com sucesso.

Aqui está o meu 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
                    );
    }

Alguém pode me ajudar a encontrar uma solução para isso?

Graças

Foi útil?

Solução

Você não pode fazer um Response.Redirect porque o seu alerta de javascript nunca será exibido. É melhor ter o seu código javascript realmente fazer um windows.location.href='default.aspx' para fazer o redirecionamento após o alerta é exibido. Algo parecido com isto:

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

Outras dicas

O método DisplayAlert adiciona o script de cliente para a solicitação da página atualmente em execução. Quando você chamar Response.Redirect, ASP.NET emite um redirecionamento HTTP 301 para o navegador, portanto, iniciar um novo pedido de página onde o script cliente registado já não existe.

Uma vez que o seu código está sendo executado no lado do servidor, não há nenhuma maneira de exibir do lado do cliente o alerta e realizar o redirecionamento.

Além disso, exibindo uma caixa de alerta JavaScript pode ser confuso para o fluxo de trabalho mental do usuário, uma mensagem em linha seria muito mais preferível. Talvez você poderia adicionar a mensagem para a sessão e exibir isso no pedido de página Default.aspx.

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

Então, em Default.aspx.cs por trás de código (ou uma classe de página base comum de modo que este pode acontecer em qualquer página, ou mesmo a página principal):

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

O código não é testado, mas deve apontar na direção certa

Isso funciona perfeito:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top