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

Était-ce utile?

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);
}  
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top