0

我们遇到了一个 .NET 3.5 WebForms 站点的问题,有时我们的错误日志开始填满以下错误消息:

“找到了具有相同 ID 'ctl09' 的多个控件。FindControl 要求控件具有唯一的 ID。”

我对异常知之甚少,因为我在本地调试时从未见过它,也从未在错误日志中很快捕获到它以运行远程调试会话。我知道应用程序池回收解决了这个问题。

这只会影响站点中的单个 [高流量] 页面。奇怪的是,该站点使用了 4.0 之前的 ID 生成逻辑。因此,当页面工作时,整个视图源中没有一个 html 元素不是自动生成的控件 ID 前缀后跟“实际”ID(即 ctl09_someID_someOtherID)。

所以,有两个主要问题,尽管欢迎任何想法:

  1. 什么情况下会随机停止正确构建控件?
  2. 除了 Global.asax,我如何捕获此错误并强制控件...重新编译?应用程序池回收?

我很难过。

4

1 回答 1

0
  1. 据我所知,只有干扰页面生命周期或 AJAX 回发的外部实体可能会导致这种情况,如果反过来生成每个控件,那么您将不会“随机”体验重复的 id。

  2. 我不认为这是一个可行的选择,应用程序池回收?没办法,这一定是有正当理由的。

也许更多信息/代码会有用?它是一个特定的页面吗?你在使用 ViewState 吗?'狡猾的'控制ID有很多原因。

于 2010-05-26T15:05:37.767 回答