在回发

时间:2019-04-27 20:57:32

标签: c# asp.net repeater postback

现在有一个非常“薛定inger的猫”时刻。

首先,我的设置有一些背景知识。其中大多数可能无关紧要,但是为了完整起见,我提供了它。我正在使用带有MasterPage的.NET 4.6.2 WebForm(.ASPX页)。该母版页包含在另一个母版页中。在WebForm中,我有一个UpdatePanel(UpdateMode =条件)。在UpdatePanel内部,我还有另一个UpdatePanel(也具有UpdateMode = Conditional)。在内部的UpdatePanel内部,我有一个Repeater和一个Button。在WebForm的Page_Load事件期间以及!Page.IsPostBack块内绑定了Repeater。该按钮具有一个Click事件,可以访问Repeater.Items集合。

由于某种原因,在“发回”上单击“按钮”时,如果在Page_Load之前的任何时间 访问了Repeater.Controls集合,则该集合将被清空。我试图弄清楚集合在PostBack上填充的确切时间,但是它似乎发生在System.Web.dll文件中的某个位置,并且我似乎无法在其中调试(一个不相关但令人沮丧的问题)。

为模拟这一点,我做了以下工作:

1)为Repeater.ItemCreated事件添加了一个空处理程序,并在该事件中放置了一个断点

2)在WebForm的Page_Init事件上放置一个断点

3)为Repeater.HasControls()方法添加了调试器监视

第一次加载页面并单击Page_Init断点时,Repeater.HasControls()方法正确评估为false。在Page_Load事件期间,由于这不是PostBack,所以绑定了Repeater,并且对Repeater中创建的每一行都触发一次Repeater.ItemCreated和Repeater.ItemDataBound事件。

单击按钮时,将发生回发。当击中Page_Init断点时,Repeater.HasControls()方法再次评估为false。如果我什么都不做,则下一个触发的事件是Repeater.ItemCreated事件,每行一次-这次,Repeater.ItemDataBound事件不触发,这是正常的,因为Repeater不会在PostBack上反弹(并且,就这一点而言,我们还没有达到Page_Load事件)。接下来,对Button Click事件进行评估,并正确遍历Repeater.Items集合。一切都很好。

但是,如果在此按钮单击“ PostBack Page Init”事件中,而不是简单地评估Repeater.HasControls()方法,而是访问Repeater.Controls集合-IE,则放置一个代码块检查Repeater.Controls的方法,我在Repeater.Controls上放了一块手表,或者甚至只是对Repeater.Controls进行了快速监视, Repeater.ItemCreated事件不再触发。在评估Button Click事件并尝试遍历Repeater.Items集合时,该集合现在为空。

我已经尽力想出一切的原因,但是没有成功。如果有人对我可以测试的更多东西,我可以搜索的地方或其他内容有任何建议,我会喜欢一些建议。

谢谢!

0 个答案:

没有答案
相关问题