Asp.net Webform Alerta de exibição e redirecionamento
-
13-09-2019 - |
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
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 ??p>
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);
}