如何正确处理/调试 HttpExceptions
本文关键字:调试 HttpExceptions 正确处理 | 更新日期: 2023-09-27 18:31:23
所以我最近在尝试查看我一直通过 iis7 工作的网站时得到了这个 httpexeption。错误如下:
说明:执行 当前 Web 请求。请查看堆栈跟踪以获取更多信息 有关错误及其在代码中起源位置的信息。
异常详细信息:System.Web.HttpException:控件集合 无法修改,因为控件包含代码块(即 <% ... %>).
源错误:
在执行 当前网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。
堆栈跟踪:
[HttpException (0x80004005):控件集合不能 修改,因为控件包含代码块(即 <% ... %>)。
System.Web.UI.ControlCollection.AddAt(Int32 index, Control sub) +8689794 Telerik.Web.UI.RadAjaxControl.MoveUpdatePanel(Control initiator, Control update) +132[HttpException (0x80004005):请看代码是否包装 块,生成异常,在 RadCodeBlock 中解析 错误。 Telerik.Web.UI.RadAjaxControl.MoveUpdatePanel(Control 发起方,控制已更新) +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, 儿童) +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, 控制适配器适配器) +99
System.Web.UI.Control.RenderControl(HtmlTextWriter writer) +25
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +1266
在对这个问题进行研究时,我似乎发现的唯一可行的解决方案是将 javascript 包装在 radcode 块中或使用 <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>
这在我的页面正文中找到,但我尝试将其移动到页面底部以及标题,因为发现这是其他人的可能解决方案,但无济于事。
任何帮助或建议将不胜感激。谢谢。
听起来,通过错误,某处背后的代码正在寻求动态地向页面添加控件,并且正在添加的控件具有动态内容。 我会搜索执行以下操作的代码
Controls.Add(
看看注释掉那行是否可以解决问题。 这也可能是 Telerik 软件中的一个错误,因此您可以尝试发布到他们的论坛或向他们的支持发送电子邮件,看看这个问题是否已经出现。