2010-11-02 16 views
2

字面来,我的网站已经非常间歇性地抛出以下异常:

Multiple controls with the same ID 'ctl00$ctl00$ctl34' were found. Trace requires that controls have unique IDs.

at System.Web.TraceContext.AddNewControl(String id, String parentId, String type, Int32 viewStateSize, Int32 controlStateSize)

at System.Web.UI.Control.BuildProfileTree(String parentId, Boolean calcViewState)

.... etc (entire stack trace is within System.Web namespace)

at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

有时用户会去到一个页面这个异常将被抛出 - 它发生在不同的页面上,并显示不同的控制ID。通常,重新加载页面将工作。其他时候,在修复之前,例外情况会持续几次刷新。

现在我知道了这个错误,当你添加动态控件到一个页面,通常会出现和你不小心使用了一个命名容器内相同的ID,所以我理解错误的意思。

但在我的网站上,我没有添加动态控件。至少不是我所知道的。

我正在运行Umbraco,Telerik和Peter Blum等第三方组件,他们几乎可以肯定地在控制树上动态地添加控件,但正如我所说,这个错误已经存在多年了,所有这些模块的版本。

异常的间歇性暗示某种多线程计时问题,或使用一个随机数的地方。谁知道...我在我的代码中找不到原因。

所以我的问题是 - 我怎么能去调试这个问题,因为整个堆栈跟踪是.NET框架内?

回答

1

根据我的经验,当您更新服务器上的页面(文件)时,首先打开app_offline.htm,同时某个用户试图打开您的网站。

贝斯如果您更新从FTP文件(那需要一些时间),或者当您仅上传ASPX或只隐藏文件的代码。

所以,当你上传的文件,在asp.net触发编译,因为他发现在文件中的一些不同,但因为文件没有完全更新,有乱用的编译的DLL。

  • 我建议先打开asp_offline.htm文件。
  • 我也建议如果您尝试只更新一个或两个文件,然后更新它们都aspx和代码后面的文件。
  • 如果你看到这个问题的快速解决方法是打开asp_offline.htm文件,只需打开web.config文件,使线并保存它,然后删除asp_offline.html。这样你发出信号再次更新网站并找到所有的变化。

其他可能的方法是禁用优化编译并强制他编译大部分文件,即使我认为这个技巧不适用于我。

<compilation optimizeCompilations="false"> 

希望得到这个帮助。

0

这听起来像你要求排除故障的步骤或想法。

也许其中之一可能帮助:

  • 目录中的所有发生了此异常页面名称或网址。这是同一页吗?它是一组拥有第三方控件的页面吗?这些页面是否混合了许多第三方控件(即Telerik和Blum)?

  • 在事件查看器中有哪些提示可能是罪魁祸首?

  • 做的任何第三方控件有任何API的日志?

  • 那些第三方控件的API是否允许在命名中使用任何“帮助”,种子或约定?

  • ASP.NET 4's New ClientIDMode Property视为可能的潜在解决方案。我想这应该由供应商来实施。也许在测试环境中将您的应用程序转换为.NET 4,并查看是否可以复制该应用程序?我怀疑,因为它本质上是随机的,你可能无法预测这个问题。

0

如果你是动态创建数据绑定控件然后调用的DataBind()方法之前做出一定它们添加到页面,或在页面上控制。

相关问题