如何正确处理/调试HttpExceptions?

时间:2012-04-16 21:44:18

标签: c# asp.net

所以我最近在尝试查看我通过iis7工作的网站时得到了这个httpexeption。错误如下:

  

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.Web.HttpException:Controls集合   因为控件包含代码块(即<%),所以无法修改   ......%>)。

     

来源错误:

     

执行期间生成了未处理的异常   当前的网络请求。有关的来源和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

     

堆栈追踪:

     

[HttpException(0x80004005):Controls集合不能   修改,因为控件包含代码块(即<%...%>)。]   System.Web.UI.ControlCollection.AddAt(Int32索引,Control子)   +8689794 Telerik.Web.UI.RadAjaxControl.MoveUpdatePanel(Control initiator,Control updated)+132

     

[HttpException(0x80004005):请查看是否包装代码   块,生成异常,在RadCodeBlock内解析   错误。] Telerik.Web.UI.RadAjaxControl.MoveUpdatePanel(控制   发起人,控制更新)+180
  Telerik.Web.UI.RadAjaxControl.PerformRender()+375
  Telerik.Web.UI.RadAjaxControl.OnPageRender(HtmlTextWriter writer,   控制页面)+1222
  Telerik.Web.UI.RadAjaxControl.RenderPageInAjaxMode(HtmlTextWriter的   作家,控制页面)+95
  System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer,   ICollection孩子)+256
  System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)+19
  System.Web.UI.Page.Render(HtmlTextWriter writer)+29
  System.Web.UI.Adapters.ControlAdapter.Render(HtmlTextWriter writer)   +21 System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer,ControlAdapter adapter)+8703529
  System.Web.UI.Control.RenderControl(HtmlTextWriter writer,   ControlAdapter适配器)+99
  System.Web.UI.Control.RenderControl(HtmlTextWriter writer)+25
  System.Web.UI.Page.ProcessRequestMain(布尔   includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)   1266

在对问题进行研究时,我似乎发现的唯一可行解决方案是将javascript包装在radcodeblock中或使用<span runat="server">。我尝试了这两种方法,似乎都没有用。我也有点困惑,为什么我会得到这个错误,因为这个网站的前一个开发人员实现的javascript没有包含任何项目,因为我可以告诉使用<%...%>

此外,我已经开始检查我页面中的所有控件,以确保它所抱怨的上述条件实际上没有发生。换句话说,据我所知,除了页面声明之外,代码中没有使用<%...%>的地方。即:

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="LoginPage.aspx.cs" Inherits="Datamart.UI.Reporting.Web.LoginPage" culture="auto" meta:resourcekey="PageResource1" uiculture="auto" ValidateRequest="False" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>

所以我想知道我可能做错了什么,或者找出问题的确切位置和下一步是什么。我认为错误发生的位置如下:

<telerik:RadScriptBlock ID="RadScriptBlock1" runat="server">  
            <script type="text/javascript">
            function onTabSelecting(sender, args) 
            {
                if ( args.get_tab().get_pageView()) 
                {
                    if (args.get_tab().get_pageView().get_id()) 
                    {
                        args.get_tab().set_postBack( false );
                    }
                }
            }
            function StopPropagation(e) 
            {
                //cancel bubbling 
                e.cancelBubble = true;
                if (e.stopPropagation)
                    e.stopPropagation();
            }

            //the following code use radconfirm to mimic the blocking of the execution thread.
            //The approach has the following limitations:
            //1. It works inly for elements that have *click* method, e.g. links and buttons
            //2. It cannot be used in if(!confirm) checks
            window.blockConfirm = function(text, mozEvent, oWidth, oHeight, callerObj1, oTitle) 
            {
                var ev = mozEvent ? mozEvent : window.event; //Moz support requires passing the event argument manually 
                //Cancel the event 
                ev.cancelBubble = true;
                ev.returnValue = false;
                if (ev.stopPropagation) 
                    ev.stopPropagation();
                if (ev.preventDefault) 
                    ev.preventDefault();

                //Determine who is the caller 
                var callerObj = ev.srcElement ? ev.srcElement : ev.target;

                //Call the original radconfirm and pass it all necessary parameters
                if (callerObj) 
                {
                    //Show the confirm, then when it is closing, if returned value was true, automatically call the caller's click method again.
                    var callBackFn = function(arg) 
                    {
                        if (arg) 
                        {
                            callerObj["onclick"] = "";
                            if (callerObj.click) callerObj.click(); //Works fine every time in IE, but does not work for links in Moz 
                            else if (callerObj.tagName == "A") //We assume it is a link button! 
                            {
                                try 
                                {
                                    eval(callerObj.href)
                                }
                                catch (e) { }
                            }
                        }
                    }

                    radconfirm(text, callBackFn, oWidth, oHeight, callerObj, oTitle);
                }
                return false;
            }
            function noBack() 
            {
                window.history.forward(); 
            }
            noBack();
            window.onload = noBack;
            window.onpageshow = function(evt) 
            {
                if (evt.persisted) noBack(); 
            }
            window.onunload = function() 
            {
                void (0);
            }
            </script>          
        </telerik:RadScriptBlock>

这可以在我的页面正文中找到,但我已经尝试将其移动到页面的底部以及标题,因为这被发现是其他人的可能解决方案,但无济于事。

非常感谢任何帮助或建议。谢谢。

1 个答案:

答案 0 :(得分:0)

听起来,错误的是,某个地方的代码正在寻找动态地向页面添加控件,并且正在添加的控件上有动态内容。我会搜索类似

的代码
Controls.Add(

看看是否注释掉那条线就行了。这可能也是Telerik软件中的一个错误,因此您可以尝试发布到他们的论坛或通过电子邮件发送他们的支持,看看是否已经出现此问题。