如何在asp.net中的单个回发中发送响应一次后使用response.redirect发送新响应

时间:2009-12-18 11:35:58

标签: asp.net response

我正在使用response.write和response.flush在页面init上显示一个加载div 直到时间页面完全呈现。 像这样:

Page.Response.Write(loadinghtmlstring);
Page.Response.Flush();

如果通过try catch发生错误,我将重定向到错误页面。

try
{}
 catch (WrapedException wre)
        {
            BaseUserControl.StoreException = wre;
            Response.Redirect(base.ErrorPagePath, false);
        }
        catch (Exception ex)
        {
            BaseUserControl.StoreException = new WrapedException(ex.Message, ex);
            Response.Redirect(base.ErrorPagePath, false);
        }

现在,如果在显示加载div后我的页面上发生任何错误 我收到的错误是:

  

无法在HTTP标头后重定向   已发送。

2 个答案:

答案 0 :(得分:1)

我知道这可能不完全是你在答案中寻找的东西......但是你为什么不在你的装载机对话框中使用Javascript? YUI有一个很好的加载对话框here,我相信jquery也有一个。这将使得在页面上使用ASP.NET生成的加载器变得复杂,并且可以解决您的错误问题。

答案 1 :(得分:1)

这种情况正在发生,因为您正在编写并刷新响应(通过刷新标头写入)。重定向需要覆盖这些标头,此时不能。拨打Response.Flush()后,无法使用Response.Redirect()

您可以执行以下操作:

try
{
    Response.Write("abc");
}
catch (WrapedException wre)
{
    BaseUserControl.StoreException = wre;
    Response.Redirect(base.ErrorPagePath, false);
}
catch (Exception ex)
{
    BaseUserControl.StoreException = new WrapedException(ex.Message, ex);
    Response.Redirect(base.ErrorPagePath, false);
}
finally
{
    Response.Flush();
}