2009-04-23 12 views
7

Attualmente sono bloccato. Ho un modulo web con un pulsante che registra o salva un record. Quello che mi piacerebbe è visualizzare un avviso javascript e poi reindirizzare a una pagina. Ecco il codice che sto usandoAsp.net Webform Display Avviso e reindirizzamento

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

Questo codice solo reindirizza 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

risposta

7

Non si può fare un Response.Redirect perché non sarà mai mostrato Javascript avviso. Meglio avere il tuo codice javascript in realtà fare un windows.location.href='default.aspx' per effettuare il reindirizzamento dopo che viene visualizzato l'avviso. Qualcosa del genere:

+0

Grazie Keltex! Ci proverò. – AlteredConcept

4

Il metodo DisplayAlert aggiunge lo script client alla richiesta di pagina attualmente in esecuzione. Quando si chiama Response.Redirect, ASP.NET invia un reindirizzamento HTTP 301 al browser, quindi avvia una nuova richiesta di pagina in cui lo script client registrato non esiste più.

Poiché il codice è in esecuzione sul lato server, non è possibile visualizzare l'avviso lato client ed eseguire il reindirizzamento.

Inoltre, la visualizzazione di una finestra di avviso JavaScript può confondere il flusso di lavoro mentale dell'utente, un messaggio in linea sarebbe molto più preferibile. Forse potresti aggiungere il messaggio alla Sessione e visualizzarlo nella richiesta di 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, in modo 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

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

Questo funziona perfetto:

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

Perfetto! Grazie –

+0

Se lo stai facendo da un controllo, potresti dover aggiungere 'Pagina' davanti a' ClientScript' in questo modo: 'Page.ClientScript ...' –