2009-04-23 41 views
7

Tôi hiện đang bị kẹt. Tôi có biểu mẫu web có nút đăng ký hoặc lưu bản ghi. Điều tôi muốn hiển thị là cảnh báo javascript và sau đó chuyển hướng đến một trang. Đây là mã tôi đang sử dụngAsp.net Webform Hiển thị Thông báo và chuyển hướng

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

Mã này chỉ chuyển hướng mà không đưa ra lời nhắc Đã lưu thành công.

Đây là Mã DisplayAlert tôi

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

bất cứ ai có thể giúp tôi tìm một giải pháp cho điều này?

Cảm ơn

Trả lời

7

Bạn không thể trả lời.Chuyển hướng vì cảnh báo javascript của bạn sẽ không bao giờ được hiển thị. Tốt hơn để có mã javascript của bạn thực sự làm windows.location.href='default.aspx' để thực hiện chuyển hướng sau khi cảnh báo được hiển thị. Một cái gì đó như thế này:

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

Cảm ơn Keltex! Tôi sẽ thử điều này. – AlteredConcept

4

Phương pháp DisplayAlert thêm tập lệnh khách vào yêu cầu trang hiện đang thực thi. Khi bạn gọi Response.Redirect, ASP.NET phát hành chuyển hướng HTTP 301 tới trình duyệt, do đó bắt đầu một yêu cầu trang mới, nơi tập lệnh khách hàng đã đăng ký không còn tồn tại nữa.

Vì mã của bạn đang thực thi ở phía máy chủ, không có cách nào để hiển thị phía máy khách cảnh báo và thực hiện chuyển hướng.

Ngoài ra, việc hiển thị hộp cảnh báo JavaScript có thể gây nhầm lẫn với luồng công việc tinh thần của người dùng, một thông báo nội dòng sẽ thích hợp hơn nhiều. Có lẽ bạn có thể thêm thông báo vào Phiên và hiển thị thông báo này trên yêu cầu trang Default.aspx.

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

Sau đó, trong Default.aspx.cs mã sau (hoặc một lớp trang cơ sở chung vì vậy đây có thể xảy ra trên bất kỳ trang nào, hay thậm chí là trang chủ):

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

Mã này không phải là thử nghiệm nhưng nên chỉ cho bạn đi đúng hướng

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

này hoạt động hoàn hảo:

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

Hoàn hảo! Cảm ơn –

+0

Nếu bạn đang thực hiện điều này từ bên trong một điều khiển, bạn có thể cần phải thêm 'Trang'' vào trước' ClientScript' như sau: 'Page.ClientScript ...' –

Các vấn đề liên quan