2009-04-23 90 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