2009-04-23 92 views
7

我目前被卡住了。我有一個註冊或保存記錄的按鈕。 我想是讓它顯示一個JavaScript警報,然後重定向到一個頁面。 這裏是我使用Asp.net Webform顯示警告和重定向

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

此代碼只是重定向沒有給成功保存提示的代碼。

這是我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 
        ); 
    } 

誰能幫我找到一個解決的辦法?

感謝

回答

7

你不能做一個Response.Redirect的,因爲你的JavaScript警告將永遠不會顯示。最好讓你的javascript代碼實際上做一個windows.location.href='default.aspx'來做警報顯示後的重定向。類似這樣的:

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

謝謝Keltex! 我會試試這個。 – AlteredConcept 2009-04-23 16:09:13

4

DisplayAlert方法將客戶端腳本添加到當前正在執行的頁面請求中。當您調用Response.Redirect時,ASP.NET會向瀏覽器發出HTTP 301重定向,因此會在已註冊的客戶端腳本不再存在的情況下啓動新的頁面請求。

由於您的代碼正在服務器端執行,因此無法顯示警報客戶端並執行重定向。另外,顯示JavaScript警告框可能會讓用戶的精神工作流程產生混淆,內聯消息會更加可取。也許你可以將消息添加到會話中,並將其顯示在Default.aspx頁面請求中。

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

然後,在後面Default.aspx.cs代碼(或一個共同的基頁類,所以會發生這種情況的任何頁上,或甚至在主頁):

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

代碼不進行測試,但應該指向你在正確的方向

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

這完美的作品:

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

完美!謝謝 – 2014-01-28 08:20:53