在我的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报告,它具有所有导出功能,而不是向用户提供表/网格视图结果。