Unable to evaluate expression… on web page

Related to this question: Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack

I am currently seeing this in my exception:

{Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack.}

Here’s the offending code. The exception is thrown on response.End();

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();
}

This code is being used in an “export to excel” button on a web page. This is copied directly from another page that uses the same functionality that works correctly.

Any ideas on how to debug this issue? How can I get to a point where I can see the exception? Also, how does the related question apply here? The top answer and selected answers are incredibly vague.

Please note that the data in table is stored in Session state.

Thanks in advance.

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

It can be solved without getting an exception.

Instead of the

Response.End()

use the

Response.Flush()

function which does not stop the execution of the page.

I’ve also had some problems when I’ve tried to download an .xlsx file using the Reponse of the page: after opening the excel file I’ve got the following error text:

Excel found unreadble content in myFilename.xlsx. Do you want to recover the contents of this workbook? If you trust the source of this book, click Yes.

Solved this with adding Response.SuppressContent = true; after the Response.Flush().

Method 2

The code is fine. When you do Response.End() you get a ThreadAbortException:

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

Some people consider Response.End() too drastic though:

Is Response.End() considered harmful?

I would suggest handling this specific exception (since you know you are going to get it), and moving the reponse.End() (like mellamokb suggested):

        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
        }

Method 3

Use HttpContext.Current.ApplicationInstance.CompleteRequest() instead of Response.End()


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x