Asp.net Webform Anzeige Alert und umleiten
-
13-09-2019 - |
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
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);
}