无法计算表达式,因为在 ASP.NET 中打印页面时对代码进行了优化

Posted

技术标签:

【中文标题】无法计算表达式,因为在 ASP.NET 中打印页面时对代码进行了优化【英文标题】:Unable to evaluate expression because the code is optimized while printing a page in ASP.NET 【发布时间】:2020-01-22 01:25:21 【问题描述】:

打印页面时出现“无法评估表达式,因为代码已优化”异常。

对于打印,我使用字符串生成器附加 html 组件,然后将其放入 Literal,然后将其分配给 Session["ctrl"]。我使用页面名称Print.aspx 和辅助函数PrintHelper

private void PrintApplication(StudentDetails StudentData )

        List<StudentAttDetails> itemAtt = new List<StudentAttDetails>();
        List<StudentAcadDetails> itemAcad = new List<StudentAcadDetails>();
        itemAtt = StudentData.AttDetails;
        itemAcad = StudentData.AccDetails;

        try
        
            StringBuilder sb = new StringBuilder();
            sb.Append("<div class=' peopledetails-piims'>");
            sb.Append("<table class='blueTable'>");
            sb.Append("<tr>");
            sb.Append("<td colspan='2' style='font-size:1em;font-weight:bold;text-align-left;'>स्कूल की जानकारी, स्थिति व जगह</td><td colspan='2' style='font-size:1.2em;font-weight:bold;text-align-right;'>आवेदन क्रमांक:" + "</td>");
            sb.Append("</tr>");
            sb.Append("<tr>");
            sb.Append("<td>यूडाइस कोड:</td><td>" + StudentData.UdiseCode + "</td><td>सत्र:</td><td>" + StudentData.Session + "</td>");
            sb.Append("</tr>");
            sb.Append("<tr>");
            sb.Append("<td>कक्षा: </td><td>" + StudentData.Class + "</td><td>मधायम:</td><td>" + StudentData.Medium + "</td>");
            sb.Append("</tr>");
            sb.Append("<tr>");
            sb.Append("<td>आवेदन क्रमांक:  </td><td>" + StudentData.ApplicationId + "</td><td>विध्यार्थी का नाम:</td><td>" + StudentData.StudentName + "</td>");
            sb.Append("</tr>");
            sb.Append("<tr>");
            sb.Append("<td>जाति </td><td>:</td><td>" + StudentData.Caste + "</td><td>जन्मतिथि </td><td>:</td><td>" + StudentData.DOB + "</td>");
            sb.Append("</tr>");
            sb.Append("<tr>");
            sb.Append("<td>अभिभावक का नाम </td><td>:</td><td>" + StudentData.ParentsName + "</td><td>घर का पता </td><td>:</td><td>" + StudentData.Address + "</td>");
            sb.Append("</tr>");
            sb.Append("<tr>");
            sb.Append("<td>दाखिले का वर्ष </td><td>:</td><td>" + StudentData.YearOfJoin + "</td>");
            sb.Append("</tr>");
            sb.Append("</table>");

            //sb.Append("</br>");
            //sb.Append("</br>");

            sb.Append("<table class='blueTable'>");
            sb.Append("<thead>");
            sb.Append("<tr>");
            sb.Append("<td colspan='3' style='font-size:1em;font-weight:bold;text-align: center;'>उपस्थिति की जानकारी</td>");
            sb.Append("</tr>");
            sb.Append("</thead>");
            sb.Append("<thead>");
            sb.Append("<tr>");
            sb.Append("<th>SNo</th><th>वर्ष</th><th>बच्चे की उपस्थिति</th>");
            sb.Append("</tr>");
            sb.Append("</thead>");
            sb.Append("<tbody>");
            int snPreferences = 1;
            foreach (StudentAttDetails sad in itemAtt)
            
                sb.Append("<tr>");
                sb.Append("<td>" + snPreferences.ToString() + "</td><td>" + (sad.Year).ToString() + "</td><td>" + sad.Attendance + "</td>");
                sb.Append("</tr>");
                snPreferences += 1;
            
            sb.Append("</tbody>");
            sb.Append("</table>");

            //sb.Append("</br>");
            //sb.Append("</br>");


            sb.Append("<table class='blueTable'>");
            sb.Append("<thead>");
            sb.Append("<tr>");
            sb.Append("<td colspan='3' style='font-size:1em;font-weight:bold;text-align: center;'>विवरण की जानकारी</td>");
            sb.Append("</tr>");
            sb.Append("</thead>");
            sb.Append("<thead>");
            sb.Append("<tr>");
            sb.Append("<th>SNo</th><th>वर्ष</th><th>ग्रेड</th><th>कुल बच्चो की संख्या</th><th>कक्षा मे प्राप्त श्रेणी</th>");
            sb.Append("</tr>");
            sb.Append("</thead>");
            sb.Append("<tbody>");
            int sno = 1;
            foreach (StudentAcadDetails sacd in itemAcad)
            
                sb.Append("<tr>");
                sb.Append("<td>" + sno.ToString() + "</td><td>" + (sacd.Year).ToString() + "</td><td>" + sacd.Grade.ToString() + "</td><td>" + (sacd.TotalStudent).ToString() + "</td><td>" + (sacd.Rank).ToString() + "</td><td>");
                sb.Append("</tr>");
                sno += 1;
            
            sb.Append("</tbody>");
            sb.Append("</table>");
            sb.Append("</div>");

            ltlPrint.Text = "";
            ltlPrint.Text = sb.ToString();

            Session["ctrl"] = null;
            #region Print Application
            Session["ctrl"] = ltlPrint;
            ClientScript.RegisterStartupScript(typeof(Page), "onclick", "<script language=javascript>window.open('../Print.aspx','PrintMe','height=700px,width=700px,scrollbars=1');</script>");
            #endregion
        
        catch (Exception ex)
        
        

打印.aspx

protected void Page_Load(object sender, EventArgs e)

        try
        
            Control ctrl = (Control)Session["ctrl"];
            PrintHelper.PrintWebControlStudentApp(ctrl);
        
        catch(Exception ex)
        
        
 

我在Print.aspx 页面上遇到错误,catch() 抛出异常:

由于代码已优化,无法计算表达式

【问题讨论】:

【参考方案1】:

检查 Page.aspx 页面,由于您的系统对母版页的某些依赖性,该线程被中止。 谢谢

【讨论】:

【参考方案2】:

您使用调试构建吗?或者是发布版本,而不是肯定的代码是优化的。

【讨论】:

我不明白。你想说重建/构建解决方案而不是调试吗?【参考方案3】:
ClientScript.RegisterStartupScript(typeof(Page), "onclick", "<script language=javascript>window.open('../Print.aspx','PrintMe','height=700px,width=700px,scrollbars=1');</script>");

您的错误---无法计算表达式,因为代码是 优化

注意:- 我认为...您收到错误只是因为页面没有以正确的方式重定向...在目的地

string url="";// In this Line you have to add url in proper way ...so you can easliy redirect 

string dim = "toolbar=0,fullscreen=1,location=0,directories=0,status=0,menubar=0,scrollbars=0,resizable=0,maximize=0,height=1000px";

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), Guid.NewGuid().ToString().Trim(), "window.open('" + url + "', 'Popup', '" + dim + "');", true);

【讨论】:

我尝试了你上面提到的方法,但得到了同样的错误。

以上是关于无法计算表达式,因为在 ASP.NET 中打印页面时对代码进行了优化的主要内容,如果未能解决你的问题,请参考以下文章

无法在 asp.net web 控件顶部显示打印对话框

如何计算 ASP.Net MVC 中正则表达式捕获的匹配数?

如何在asp.net中实现票据的打印

如何在asp.net中实现票据的打印

如何在asp.net中,将页面上的东西按格式打印出来?

如何在 reportviewer 控件上从 asp.net 调用打印?