Asp.net Webform Affichage d'alerte et de rediriger
-
13-09-2019 - |
Question
Je suis actuellement coincé. J'ai un formulaire en ligne avec un bouton qui enregistre ou enregistre un enregistrement. Ce que je voudrais l'avoir est d'afficher une alerte javascript puis rediriger vers une page. Voici le code que je utilise
protected void Save(..)
{
// Do save stuff
DisplayAlert("The changes were saved Successfully");
Response.Redirect("Default.aspx");
}
Ce code redirige simplement sans donner l'invite enregistré.
Voici mon code affichAlerte
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
);
}
Quelqu'un peut me aider à trouver une solution à cela?
Merci
La solution
Vous ne pouvez pas faire un Response.Redirect parce que votre javascript alerte ne sera jamais affichée. Il vaut mieux avoir votre code javascript faire en fait un windows.location.href='default.aspx'
pour faire la redirection après l'alerte est affichée. Quelque chose comme ceci:
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);
}
Autres conseils
La méthode affichAlerte ajoute le script client à la demande de la page en cours d'exécution. Lorsque vous appelez Response.Redirect, ASP.NET émet un HTTP redirection 301 vers le navigateur, en commençant donc une nouvelle demande de page où le script client enregistré n'existe plus.
Étant donné que votre code est exécuté sur le côté serveur, il n'y a pas moyen d'afficher l'alerte côté client et effectuer la redirection.
En outre, l'affichage d'une zone d'alerte JavaScript peut être source de confusion mentale flux de travail d'un utilisateur, un message en ligne serait beaucoup plus préférable. Peut-être que vous pouvez ajouter le message à la session et afficher ceci sur la demande de la page Default.aspx.
protected void Save(..)
{
// Do save stuff
Session["StatusMessage"] = "The changes were saved Successfully";
Response.Redirect("Default.aspx");
}
Ensuite, dans le code Default.aspx.cs derrière (ou une classe de page de base commune si cela peut se produire sur une page, ou même la page principale):
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;
}
}
Le code n'est pas testé, mais vous devez pointer dans la bonne direction
Cela fonctionne parfaitement:
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);
}