无法在网页上评估表达式….

与此问题相关: 无法计算表达式,因为代码已优化或本机框位于调用堆栈之上

我目前在我的例外中看到这个:

{无法评估表达式,因为代码已优化或本机框架位于调用堆栈之上。}

这是有问题的代码。 在response.End();上抛出exception

DataSet dataSet = new DataSet(); dataSet.Tables.Add(table); // Table is a well-formatted DataTable formed from data stored in a Session variable HttpResponse response = HttpContext.Current.Response; response.Clear(); response.Charset = ""; response.ContentType = "application/vnd.ms-excel"; response.AddHeader("Content-Disposition", "attachment;filename=\"ExcelFile.xls\""); using (StringWriter stringWriter = new StringWriter()) using (HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter)) { DataGrid dataGrid = new DataGrid { DataSource = dataSet.Tables[0] }; dataGrid.DataBind(); dataGrid.RenderControl(htmlTextWriter); response.Write(stringWriter.ToString()); response.End(); } 

此代码用于网页上的“导出到Excel”按钮。 这是直接从使用相同function的另一个页面复制的。

有关如何调试此问题的任何想法? 我怎样才能达到可以看到exception的程度? 此外,相关问题如何适用于此? 最佳答案和选定的答案非常模糊。

请注意, table中的数据存储在会话状态中。

提前致谢。

代码很好。 当您执行Response.End()时,您会收到ThreadAbortException:

http://support.microsoft.com/kb/312629/EN-US/

有些人认为Response.End()过于激烈了:

Response.End()被认为是有害的吗?

我建议处理这个特定的exception(因为你知道你会得到它),并移动reponse.End()(如mellamokb建议):

  HttpResponse response = HttpContext.Current.Response; try { DataSet dataSet = new DataSet(); DataTable table = new DataTable(); dataSet.Tables.Add(table); response.Clear(); response.Charset = ""; response.ContentType = "application/vnd.ms-excel"; response.AddHeader("Content-Disposition", "attachment;filename=\"ExcelFile.xls\""); using (StringWriter stringWriter = new StringWriter()) using (HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter)) { DataGrid dataGrid = new DataGrid { DataSource = dataSet.Tables[0] }; dataGrid.DataBind(); dataGrid.RenderControl(htmlTextWriter); response.Write(stringWriter.ToString()); } response.End(); } catch (ThreadAbortException ex) { //Log some trace info here } 

它可以在没有例外的情况下解决。

而不是

Response.End()

使用

Response.Flush()

不停止执行页面的function。

当我尝试使用页面的Reponse下载.xlsx文件时,我也遇到了一些问题:打开excel文件后,我得到以下错误文本:

Excel在myFilename.xlsx中找到了不可读的内容。 您想恢复此工作簿的内容吗? 如果您信任本书的来源,请单击“是”。

通过添加Response.SuppressContent = true;解决了这个问题Response.SuppressContent = true;Response.Flush()

使用HttpContext.Current.ApplicationInstance.CompleteRequest()而不是Response.End()