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

È stato utile?

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);
}  
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top