【问题标题】:wait till code executes before running redirect等到代码执行后再运行重定向
【发布时间】:2010-09-29 01:39:18
【问题描述】:

我有一个页面重定向,它在使用 WebClient 和 StringBuilder 将字符串写入 MSword 文档后运行。

        HttpContext.Current.Response.Write(strHTMLContent);
        this.Page.Response.Redirect("http://www.google.com");
        HttpContext.Current.Response.End();

但是字符串永远不会被写入(或者它没有机会写入),因为重定向会立即发生。

我怎样才能让我的重定向只在字符串写入发生之前运行?

谢谢大家

这是用于生成 MSWord 的代码:

        HttpContext.Current.Response.Charset = "";
        HttpContext.Current.Response.ContentType = "application/msword";
        string strFileName = "GenerateDocument" + ".doc";
        HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + strFileName);
        StringBuilder strHTMLContent = new StringBuilder();

【问题讨论】:

  • 你到底想在这里做什么?在用户的浏览器中显示 strHTMLContent?或者将他们重定向到google.com
  • 尝试在 MSWord 文档中显示 strHTMLContent(可行),然后将浏览器重定向到 google.com
  • 见上面输出到 MSWord 的代码

标签: c# redirect response.redirect


【解决方案1】:

重定向结束所有处理并指示浏览器下一步指向哪里。您可能想做的是编写您希望用户看到的数据,但包括meta refresh 或维基百科文章中概述的类似机制。

【讨论】:

  • 我试过这个:HttpContext.Current.Response.Write(strHTMLContent); HtmlMeta 元 = 新 HtmlMeta(); meta.HttpEquiv = "刷新"; meta.Content = "0;url=google.com" this.Header.Controls.Add(meta);但由于某种原因,它不会将元信息添加到我的 html 中,尽管我在代码中看不到任何错误。
  • @leonnz 有没有办法将它作为 strHTMLContent 的一部分包含在内?
  • strHTMLContent 中的数据被写入到 MSWord 文档中,因此元重定向在那里不太好,因为我需要我的浏览器窗口来重定向。以编程方式添加元标记没有奏效......但它应该,还没有弄清楚为什么。
【解决方案2】:

如果我错了,请纠正我,但如果他将其放入 try/catch/finally 中,刷新才会执行,直到写入响应之后才执行?

 try 
    {
      HttpContext.Current.Response.Write(strHTMLContent);
      HttpContext.Current.Response.End();
    }
 catch(Exception ex)
    {
      //handle exception
     }
 finally
     {
       this.Page.Response.Redirect("http://www.google.com");
     }

【讨论】:

  • 我得到了相同的结果,重定向立即运行。如果重要的话,整个事情都封装在一个 onclick 事件中,我不确定。
猜你喜欢
  • 2018-06-15
  • 2019-09-23
  • 2015-10-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 2014-05-22
  • 2011-04-09
相关资源
最近更新 更多