ExportToHttpResponse给出:“无法评估表达式,因为代码已优化或本机框架位于调用堆栈之上。”

时间:2013-04-17 05:43:41

标签: c# asp.net crystal-reports httpresponse

在加载ASP.Net页面时,会调用一个报告函数。

protected void Page_Load(object sender, EventArgs e)
{
    GlobalFunctions obj = new GlobalFunctions();
    obj.GetReport(Page PageName, string ReportName);
}

GetReport定义为:

public void GetReport(Page PageName, string ReportName)
{
    ReportClass rpt = new ReportClass();
    rpt = GetReportFromDLL(ReportName);   //No error here
    rpt.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, ReportName); 
}

错误:

  

无法通过班级访问“响应”。

我尝试使用“HttpContext.Current.Response”代替“Response”

rpt.ExportToHttpResponse(ExportFormatType.PortableDocFormat,HttpContext.Current.Response, true, ReportName);

但是我收到了这个错误:

  

“无法评估表达式,因为代码已优化或a   本机框架位于调用堆栈的顶部。“

请帮忙!

2 个答案:

答案 0 :(得分:0)

我不确定为什么你不能将响应传递给函数...请尝试以下

  public void GetReport(HttpResponse response, string ReportName)...

并致电:

   obj.GetReport(Response, "some report name");

答案 1 :(得分:0)

经过努力,我发现 ExportToHttpReponse总是抛出错误“无法评估表达式,因为代码已经过优化,或者本机框架位于调用堆栈之上。” 如果整个代码块不在Try-Catch Block中。

以下是避免此错误的解决方案:

public void GetReport(Page PageName, string ReportName)
{
    try
    {
        ReportClass rpt = new ReportClass();
        rpt = GetReportFromDLL(ReportName);   //No error here
        rpt.ExportToHttpResponse(ExportFormatType.PortableDocFormat, Response, true, ReportName);
    }
    catch (Exception ex)
    {
        //do nothing
    } 
}

这只是删除错误,报告将打印在HttpResponse上。