最近做ASP.NET的项目,突然发现刚才还好好的控件,在我对.aspx修改之后,竟然不能正常运行了。比如说一个简单的button控件,原先有一个button_click事件与之绑定。但在我稍微改了改前台页面的美工之后,它的button_click事件就失效了。后来到那个著名的“Windows Form Designer generated code”,即“InitializeComponent”函数中去看了看,竟然发现事件绑定的代码没了。

        后来在csdn上问了一下,才知道这是Visual Studio.net 2003的著名Bug(好像听说Visual Studio.net 2005中修复了这个bug,不知道真的假的)。这个Bug的重现方法是:你在前台代码中拖进一个控件,然后双击它产生一个简单的事件(一般是click事件)。然后你到“InitializeComponent”函数中看看事件绑定代码在不在。这是如果正常的话,绑定代码应该还在。接着,你剪切(ctrl+x)这个控件,然后复制(ctrl+v)到你想放的页面上其他的一些位置。这时,你再到“InitializeComponent”函数中去看那个事件绑定代码,不出意外,这段代码已经不在了。

        这个bug的逻辑其实很简单。你想想,当你把一个控件删除之后,它在“InitializeComponent”函数中的初始化代码和事件绑定代码肯定也被去掉了。但你可以看到,那个事件处理函数(比如button_click)应该还安静地躺在后面的代码里。其实删除控件与剪切控件是,Visual Studio.net 2003做的是同样的一件事情。但是当你把那个你剪切的控件重新由复制到页面上,其实这个与拖一个新的控件到页面上是没有任何区别的。这就很容易明白为什么事件绑定代码没有出现,因为Visual Studio.net 2003当你是新建一个控件罢了。

        这确实是个恼人的bug,特别当你页面数量很多时,要你一个一个的检查,简直是无法忍受的。这里提供几个方法解决的方法可供参考:

1.当第一次拖入控件时,Visual Studio.net 2003在“InitializeComponent”函数中为你创建了相关事件绑定代码之后,想办法把这些代码移出“InitializeComponent”函数,因为Visual Studio.net 2003的“Windows Form Designer generated code”功能只会修改“InitializeComponent”函数中的代码。移出的方法很多,可以放在“onInit”函数中,或者另写一个函数放置。

2.如果你做了剪切操作之后,请记得重新绑定它的事件代码。这是请不要双击这个控件,而是到事件标签中选择对应事件的下拉框,你会看看你剪切前就写好的那个事件处理代码。

3.如果你还是不放心你的大量页面中是不是由事件没有做绑定,你可以试试下面的这个工具(转载自http://kb.csdn.net/.net/Articles/200512/a448b858-1521-4cc8-a4ae-897f50f6b591.html)。它是在事后对所有.cs文件中的事件处理函数找其相应的绑定。使用这个代码有一个局限,就是对于那些不喜欢删除不再使用的事件处理函数的人来说,这个工具就意义不大了。

下面贴一下这个工具的检查绑定的代码
ASP.NET控件事件丢失的探究private ArrayList FindLost()
        }

相关文章:

  • 2022-12-23
  • 2022-01-03
  • 2021-08-29
  • 2021-08-06
  • 2021-09-01
  • 2021-07-31
  • 2021-09-13
  • 2021-06-17
猜你喜欢
  • 2021-06-13
  • 2022-12-23
  • 2020-09-25
  • 2021-11-12
  • 2021-09-24
相关资源
相似解决方案