页面返回在BinaryWrite上无法正常工作

时间:2012-08-24 12:57:50

标签: c# asp.net response.write

我有一个主页/主菜单页面。有表格的链接。如果您使用输入运行表单,您将获得Excel输出。如果单击“打开”在浏览器中打开该输出,则后退按钮会将您带到主页/主菜单。

这是可以理解的,因为如果表单页面是X.aspx,则输出Excel的binaryWrite并不会真正改变它。

问题是,如果有回发,后退按钮会将您带到表单页面。这是不一致的。如果我运行页面或下拉导致回发,我真的希望后退按钮将我带到表单字段,以便我可以再次运行excel表。

我尝试过的事情。

我尝试添加位置标头。

e.ContentFileName = "ELTFile.Output.xls";

在回复之前。写作......

private void SendFileToBrowser(DownloadFileEventArgs e)
{
    if (!e.Cancel && e.FileObject != null)
    {
        this.Page.Response.Clear();
        this.Page.Response.ClearContent();
        this.Page.Response.AddHeader("Content-Disposition", string.Format("inline; filename={0}", e.ContentFileName));
        this.Page.Response.AddHeader("Content-Length", e.FileObject.LongLength.ToString());
        this.Page.Response.AddHeader("Location", e.ContentFileName);
        this.Page.Response.ContentType = e.ContentType;
        this.Page.Response.BinaryWrite(e.FileObject);
        this.Page.Response.End();
    }
}

我试过

Response.Cache.SetCacheability(HttpCacheability.Public);

以及

Response.Cache.SetCacheability(HttpCacheability.Server);

但基本上,根据我是否在单击“提交”按钮生成Excel之前回发,我得到主菜单(不想要)或表单页面(想要)。我每次都想要表单页面。基本上我想告诉浏览器“我知道这不是一个不同的页面,但是那样对待它,请你好吗?”

1 个答案:

答案 0 :(得分:1)

您无法直接将网页添加到浏览器历史记录中。

您可以使您的应用程序使得表单始终是excel输出之前的页面。

要执行此操作,请使用单独的页面输出excel。 当您有生成excel的输入时,Response.Redirect到生成页面。 这会将您的输入表单保留在浏览器历史记录中。

注意:如果您愿意,也可以重定向到同一页面,但这需要您跟踪它。