2009-04-23 5 views
7

Je suis actuellement bloqué. J'ai un formulaire Web avec un bouton qui enregistre ou enregistre un enregistrement. Ce que je voudrais, c'est d'afficher une alerte javascript, puis de rediriger vers une page. Voici le code que je utiliseAsp.net Webform Affichage Alerte et redirection

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-il me aider à trouver une solution à cela?

Merci

Répondre

7

Vous ne pouvez pas faire un Response.Redirect parce que votre javascript alerte ne sera jamais affichée. Mieux vaut avoir votre code javascript faire windows.location.href='default.aspx' pour faire la redirection après l'affichage de l'alerte. 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); 
} 
+0

Merci Keltex! Je vais essayer ça. – AlteredConcept

4

La méthode DisplayAlert ajoute le script client à la demande de page en cours d'exécution. Lorsque vous appelez Response.Redirect, ASP.NET émet une redirection HTTP 301 vers le navigateur, démarrant ainsi une nouvelle demande de page dans laquelle le script client enregistré n'existe plus.

Comme votre code s'exécute côté serveur, il n'y a aucun moyen d'afficher le côté client d'alerte et d'effectuer la redirection.

En outre, l'affichage d'une boîte d'alerte JavaScript peut être déroutant pour le flux de travail mental d'un utilisateur, un message en ligne serait beaucoup plus préférable. Peut-être pourriez-vous ajouter le message à la session et l'afficher dans la demande de page Default.aspx.

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

Puis dans le code Default.aspx.cs derrière (ou une classe de page de base commune pour ce qui 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 devrait vous orienter dans la bonne direction

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

Cela fonctionne parfaitement:

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

Parfait! Merci –

+0

Si vous faites cela depuis un contrôle, vous devrez peut-être ajouter 'Page.' devant' ClientScript' comme ceci: 'Page.ClientScript ...' –

Questions connexes