ASP.NET WebForm 显示警告并重定向

7

我现在遇到了困难。我有一个带有按钮的网络表单,该按钮可以注册或保存记录。 我想要的是,它显示一个JavaScript警报,然后重定向到另一页。 这是我正在使用的代码:

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

有人能帮我找到这个问题的解决方案吗?

谢谢

4个回答

7

因为你的JavaScript警告框将永远不会显示,所以你无法执行Response.Redirect。最好让你的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);
}

4

这个完美地工作:

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

如果您正在控件内执行此操作,则可能需要在ClientScript前面添加Page.,如下所示:Page.ClientScript... - Tony L.

4
DisplayAlert 方法将客户端脚本添加到当前正在执行的页面请求中。当您调用 Response.Redirect 时,ASP.NET 会向浏览器发出 HTTP 301 重定向,因此开始一个新的页面请求,在该请求中注册的客户端脚本不再存在。
由于您的代码在服务器端执行,因此无法在客户端显示警报并执行重定向。
此外,显示 JavaScript 警报框可能会使用户的心理工作流程混乱,最好使用内联消息。也许您可以将消息添加到 Session 中,并在 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);
}  

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接