Frage

Ich bin zur Zeit stecken. Ich habe ein Web-Formular mit einer Schaltfläche, die registriert oder einen Datensatz speichern. Was ich möchte, ist, haben sie eine Javascript-Alarm angezeigt werden und dann auf eine Seite umgeleitet werden. Hier ist der Code ich verwende

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

Dieser Code nur leitet, ohne die Eingabeaufforderung Erfolgreich gespeichert zu geben.

Hier ist mein DisplayAlert-Code

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

Kann mir jemand helfen, eine Lösung für dieses Problem zu finden?

Danke

War es hilfreich?

Lösung

Sie können kein Response.Redirect tun, weil sie JavaScript Alarm wird nie angezeigt bekommen. Besser haben Ihr JavaScript-Code tatsächlich tun ein windows.location.href='default.aspx' die Umleitung zu tun, nachdem die Warnung angezeigt wird. So etwas wie folgt aus:

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

Andere Tipps

Die DisplayAlert Methode fügt das Client-Skript auf die derzeit ausgeführte Seitenanfrage. Wenn Sie Response.Redirect nennen, ASP.NET gibt eine HTTP 301 an den Browser umleiten, damit eine neue Seite Anfrage starten, wo der registrierten Client-Skript existiert nicht mehr.

Da Ihr Code auf der Server-Seite ausgeführt wird, gibt es keine Möglichkeit, den Alarm Client-Seite anzuzeigen und die Umleitung durchzuführen.

Auch eine JavaScript-Alert-Box Anzeigen können psychische Workflow eines Benutzers verwirrend sein, würde eine Inline-Nachricht viel mehr vorzuziehen. Vielleicht könnten Sie die Nachricht an die Session hinzufügen und diese auf Wunsch Default.aspx-Seite angezeigt werden.

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

Dann in Default.aspx.cs Code hinter (oder eine gemeinsame Basisseitenklasse so kann dies auf einem beliebigen Seite passieren, oder auch die Master-Seite):

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

Der Code ist nicht getestet, aber sollten Sie in die richtige Richtung

Das funktioniert perfekt:

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);
}  
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top