【问题标题】:Asp.net Webform Display Alert and redirectAsp.net Webform 显示警报和重定向
【发布时间】:2009-04-23 15:47:56
【问题描述】:

我目前卡住了。我有一个带有注册或保存记录的按钮的网络表单。 我想要的是让它显示一个 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
                    );
    }

谁能帮我找到解决办法?

谢谢

【问题讨论】:

    标签: asp.net javascript redirect alert


    【解决方案1】:

    您无法执行 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);
    }
    

    【讨论】:

      【解决方案2】:

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

      代码未经测试,但应为您指明正确的方向

      【讨论】:

        【解决方案3】:

        这很完美:

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

        【讨论】:

        • 如果您在控件中执行此操作,您可能需要在ClientScript 前面添加Page.,如下所示:Page.ClientScript...
        【解决方案4】:
        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);
        }  
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-08-21
          • 1970-01-01
          • 2018-07-29
          • 1970-01-01
          • 1970-01-01
          • 2017-03-31
          • 1970-01-01
          相关资源
          最近更新 更多