Asp.net Webform visualizzazione Alert e reindirizzare
-
13-09-2019 - |
Domanda
Al momento sono bloccato. Ho un modulo web con un pulsante che registra o salva un record. Quello che mi piacerebbe è averlo visualizzare un avviso di javascript e quindi reindirizzare ad una pagina. Ecco il codice che sto usando
protected void Save(..)
{
// Do save stuff
DisplayAlert("The changes were saved Successfully");
Response.Redirect("Default.aspx");
}
Questo codice reindirizza solo senza dare la richiesta salvata con successo.
Ecco il mio codice DisplayAlert
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
);
}
Qualcuno può aiutarmi a trovare una soluzione a questo?
Grazie
Soluzione
Non si può fare un Response.Redirect perché non sarà mai mostrato Javascript avviso. Meglio avere il codice JavaScript in realtà fare un windows.location.href='default.aspx'
per fare il reindirizzamento dopo la visualizzazione l'avviso. Qualcosa di simile a questo:
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);
}
Altri suggerimenti
Il metodo DisplayAlert aggiunge lo script client alla richiesta di pagina attualmente in esecuzione. Quando si chiama Response.Redirect, ASP.NET rilascia un HTTP 301 redirect al browser, quindi, di iniziare una nuova richiesta di pagina in cui lo script client registrato non esiste più.
Dal momento che il codice è in esecuzione sul lato server, non c'è modo per visualizzare il lato client di allarme ed eseguire il redirect.
Inoltre, la visualizzazione di una finestra di avviso JavaScript può essere fonte di confusione per il flusso di lavoro mentale di un utente, un messaggio in linea sarebbe molto più preferibile. Forse si potrebbe aggiungere il messaggio alla sessione e visualizzare questo su richiesta della pagina Default.aspx.
protected void Save(..)
{
// Do save stuff
Session["StatusMessage"] = "The changes were saved Successfully";
Response.Redirect("Default.aspx");
}
Poi nel codice Default.aspx.cs dietro (o di una classe di pagina di base comune per cui questo può accadere in qualsiasi pagina, o anche la pagina master):
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;
}
}
Il codice non è testato, ma dovrebbe puntare nella giusta direzione
Questo funziona perfetto:
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);
}