c# - 调试:Microsoft JScript 运行时错误

标签 c# asp.net debugging error-handling

我迫切需要调试帮助,现在已经被这个错误卡住了 6 天......

我在我的 ASp.net 应用程序中遇到的错误是:

Microsoft JScript runtime error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled.
Details: Error parsing near '<script type='text/j'.

下面是相关的代码片段,

    CollyDataExchangeWebService Col_ValSub = new CollyDataExchangeWebService();
    CollyReportServiceRequest ServiceReq = new CollyReportServiceRequest();
    CollyReportServiceRequestData ServiceReqData = new CollyReportServiceRequestData();

    ServiceReqData.AmendmentIndicatorSpecified = true;
    ServiceReqData.AmendmentIndicator = false;

    ServiceReqData.CollyReport = ColRep;
    ServiceReq.ServiceRequestData = ServiceReqData;
    ServiceReq.ServiceRequestHeader = ServiceHeader;

    errValidate = null;

    //btnOK.OnClientClick = "MSGShow()";
    bool Valid = true;
    string ErrMsgs = "";

    if (((System.Web.UI.WebControls.Button)(sender)).CommandArgument == "Validate")
    {
        CollyReportServiceResponse ValResponse = Col_ValSub.validateReport(ServiceReq);


        switch (ValResponse.ServiceResponseHeader.ServiceStatus)
        {
            case ServiceStatus.Successful:

                btnOK.OnClientClick = "";
                valHeader.Text = "Validation is Completed. No errors were found";
                mlValPopup.Show();

                break;

            case ServiceStatus.ValidationErrors:
                Valid = false;
                ErrMsgs = ErrMsgs + _ValidationError(ValResponse);
                ValBTN.Update();
                mlValPopup.Show();
                break;

            case ServiceStatus.SystemError:
                btnOK.OnClientClick = "";
                Valid = false;
                ErrMsgs = ErrMsgs + _SystemError(ValResponse);
                ValBTN.Update();
                mlValPopup.Show();
                break;
        }

经过几个小时的调试,我发现这条线导致了错误:

CollyReportServiceResponse ValResponse = Col_ValSub.validateReport(ServiceReq);

经过 6 天的调试和挫折,我发现一些记录导致了这个问题,而其他的则不会在旧版本的代码中出现,但是在新版本中所有的记录都会导致这个错误,所以它必须对DB,这意味着代码中的某些方法与 null 的行为不同,但我无法确切地找出问题所在,因为我的应用程序有 30k 行代码

在四处搜索并尝试各种解决方案后,以下 2 个不是我的问题的解决方案。

forums.asp.net/t/1357862.aspx http://www.vbforums.com/showthread.php?t=656246

我想说的是,我已经很难处理这个应用程序了,因为它是由其他程序员编写的,而这些程序员现在早已离开,留下了未记录或注释过的意大利面条代码。

我没有编写代码,但过去的其他程序员已经将 Response.Write 放入代码中:

   private void MessageBox(string msg)
    {
        if (!string.IsNullOrEmpty(msg))
        {
            Global.tmpmsg = msg;
            msg = null;
        }
        Response.Write("<script type=\"text/javascript\" language=\"javascript\">");
        Response.Write("window.open('ErrorPage.aspx?msg=" + "','PopUp','screenX=0,screenY=0,width=700,height=340,resizable=1,status=no,scrollbars=yes,toolbars=no');");
        Response.Write("</script>");

    }

这是另一种方法:

        Response.Write("<script type=\"text/javascript\" language=\"javascript\">");
        Response.Write("alert('No search resuls were found');");
        Response.Write("</script>"); 

或者这个:

if (!string.IsNullOrEmpty(msg))
{
    Global.tmpmsg = msg;
    Response.Write("<script type=\"text/javascript\" language=\"javascript\">");
    Response.Write("window.open('ErrorPage.aspx?msg=" + "','PopUp','screenX=0,screenY=0,width=700,height=340,resizable=1,status=no,scrollbars=yes,toolbars=no');");
    Response.Write("</script>");
}

在 Jrummel 的评论之后,我将其添加到代码中,然后什么都没有发生。

private void MessageBox(string msg)
{/*
    if (!string.IsNullOrEmpty(msg))
    {
        Global.tmpmsg = msg;
        msg = null;
    }
    Response.Write("<script type=\"text/javascript\" language=\"javascript\">");
    Response.Write("window.open('ErrorPage.aspx?msg=" + "','PopUp','screenX=0,screenY=0,width=700,height=340,resizable=1,status=no,scrollbars=yes,toolbars=no');");
    Response.Write("</script>");
    */
// Define the name and type of the client scripts on the page.
String csname1 = "PopupScript";
Type cstype = this.GetType();

// Get a ClientScriptManager reference from the Page class.
ClientScriptManager cs = Page.ClientScript;

// Check to see if the startup script is already registered.
if (!cs.IsStartupScriptRegistered(cstype, csname1))
{
    String cstext1 = "<script type=\"text/javascript\" language=\"javascript\">" + " " + "window.open('ErrorPage.aspx?msg=" + "','PopUp','screenX=0,screenY=0,width=700,height=340,resizable=1,status=no,scrollbars=yes,toolbars=no');" + " " + "</script>";
  cs.RegisterStartupScript(cstype, csname1, cstext1, false);
}



}

最佳答案

经过 2 周的调试和 2 天的暴力破解后,我发现了错误:

在我拥有的 800 个数据库列之一中,有一个空值/不正确的值。该值与我的 ASP.NET 代码中的 150 种方法之一发生 react ,即使 Response.Write() 不是问题所在,也会出现 JavaScript 错误。我还没有找到对这个值使用react的方法,但我找到了解决方案,即在列记录中简单地输入一个有效值..

程序员如何通过暴力查找问题:

在我的案例中,经过长时间的调试后,我采集了一个工作记录样本和另一个错误前导记录样本。一旦我做到了这一点,我就使用了

DELETE FROM tablename WHERE UniqueColID= unique identifier for the error causing record

然后我做了:

INSERT INTO tablename ([uniqueIdentifier],[ column 2],[column 3]) SELECT @UniqueIdentifierofErrorCausingRecord, column2, [column3] FROM TableName WHERE [uniqueIdentifier]=@UniqueIdentifierForWorkingRecord;

第一个语句所做的是删除非工作记录,然后第二个语句使用与工作记录相同的列值但使用非工作记录的唯一标识符重新插入该记录。这样我就可以遍历每个表以找出导致错误的表,然后我可以查明该表的哪一列有问题。

在我的案例中,具体问题是 DateTime.TryParse(),因为表格列值以不正确的格式插入。代码在其中一种方法中执行了字段填充,而没有使用 DateTime.Parse 方法进行尝试和捕获。 .. 经过一些测试,似乎即使是 try/catch 也无法发现此错误,因为它是一个 javascript 错误..

关于c# - 调试:Microsoft JScript 运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11433167/

相关文章:

c# - 如何使用 Doubles 检测精度的完全损失?

c# - .NET 是否有 "Responsive Design + Server Side Components"(RESS) 框架

asp.net - TinyMCE:双前色和背景色按钮?

c# - iTextSharp 从现有的 PDF 模板生成 PDF

asp.net - IP 地址的经度和纬度值

c# - 如何从模型中获取图像以在 CSS 样式标签的 View 中使用?

c - 仅对共享库使用 Electric Fence (libefence)

c# - 正确使用断言和异常

c - C 中的奇怪错误(ubuntu): unexpected behavior change due to adding debugging statements

c# - wpf如何根据类型设置数据模板