生成和下载“Excel”文档会中断“ASP.net”登录状态



在我的ASP.net web应用程序中,我有一个页面显示了一个(不是很复杂)表。我已经实现了一个按钮,所以当(注册的)成员点击它时,浏览器会将表下载为Excel文档

生成此Excel的代码如下:

        Dim response As HttpResponse = HttpContext.Current.Response
        ' first let's clean up the response.object
        response.Clear()
        response.Charset = ""
        Dim filename As String = MapPath("~/ex1.xls")
        ' set the response mime type for excel
        response.ContentType = "application/vnd.ms-excel"
        response.AddHeader("Content-Disposition", "attachment;filename=""" & filename & """")
        ' create a string writer
        Using sw As New StringWriter()
            Using htw As New HtmlTextWriter(sw)
                ' instantiate a datagrid
                Dim dg As New DataGrid()
                dg.DataSource = dt
                dg.DataBind()
                dg.RenderControl(htw)
                response.Write(sw.ToString())
                response.[End]()
            End Using
        End Using

问题是,该代码以某种方式破坏了ASPN.net LoginStatus,因为当您在下载该Excel后尝试注销时("注销"按钮在应用程序中始终可见),每次点击按钮都会一遍又一遍地下载相同的Excel(每次点击一次)。如果您重新加载窗口或更改页面,"注销"将再次生效。

这是用chrome:检查时的"注销"链接

<a id="ctl00_ctl00_MainContent_LoginStatus1" href="javascript:__doPostBack('ctl00$ctl00$MainContent$LoginStatus1$ctl00','')">Log Out</a>

我已经尝试使用从其他页面下载Excel

onclick="window.document.forms[0].target='_blank';"  

现在它打开了一个新的选项卡,下载了Excel,关闭了该选项卡(快速过程),但仍然不断断开注销链接。

我没有任何想法,任何帮助、代码、提示或任何可能的解决方案来解决这个问题都是非常受欢迎的。

在空白目标中打开一个新页面,让新页面生成excel

这看起来像是一个服务器端错误。您要注销的代码实际上运行了下载Excel的代码。可能是您应该抛出一个"Response.End();"在注销的单击处理程序中。

一个快速的解决方案是使用报表查看器控件,该控件具有导出到excel的功能。

我知道这个解决方案并不完全是你想要的,但根据我的经验,当用户正在寻找excel功能时,我提供了一个rdlc报告,它具有所有导出功能,而不是向用户提供表/网格视图结果。

最新更新