2010-04-12 139 views
1

我有一个控件,其中有一个ImageButton绑定到一个OnClick事件...单击此控件后,将执行回发并且不会调用事件处理程序。 AutoEventWireup已设置为true,并且我已经加倍检查了拼写等......我们在一年之内没有触及过此控件,直到几周前它一直运行正常。ASP.NET控件事件处理程序在回发时未触发?

我们对加载此控件的控件进行了更改......所以我想知道,可以通过什么样的更改来阻止此事件处理程序被调用?有相当多的JavaScript代码的事情,所以这可能是罪魁祸首太...

编辑:一些澄清......我们动态加载ImageButton的父控件在页面的onload事件......如果这是有道理的。

回答

0

所以,事实证明,我们在控制一个设置PostBackUrl属性对我们的按钮中的一个......这引起了控制事件处理程序不火的时候,在控制一个按钮是按下。

+0

嗨,我似乎有一个类似的问题。我想知道您是否可以详细阐述您的解决方案。也许从控件A和B开始吧?纽扣?集装箱?我在这里先向您的帮助表示感谢! – John 2010-05-06 16:30:31

2

AutoEventWireup是无关紧要的。你的ImageButton是动态加载的,也就是说没有标记出来吗?如果它在页面生命周期的后期加载到页面上,例如在PreRender中,事件不会触发。

如果有JavaScript问题,您的网页甚至不会回发。这是否发生?

+0

该网页绝对是后备...只是没有事件...是的,控制看起来像它是动态的(我们有一个自定义控件加载这个)。 – Polaris878 2010-04-12 21:39:38

+0

在这种情况下,确保将它放到生命周期的事件处理程序部分的页面上。这意味着在OnInit或OnLoad。如果可以,OnInit会更好,因为它会减少ViewState。即Page.Controls.Add(myImageButton)应该发生OnInit(或OnLoad) – BritishDeveloper 2010-04-12 22:03:37

+0

并且是imageButton的Click事件绑定OnLoad呢?如果是的话,那么一些疯狂的事情正在发生......(如果你对肮脏的代码感兴趣,我有一个黑客) – BritishDeveloper 2010-04-13 10:44:43

1

我同意BritishDeveloper所说的。我在动态加载控件时遇到了类似的问题,但我无法获得对控件的引用。有人指出我需要始终记住页面生命周期。我发现我需要确保在PageInit中加载控件,因为在执行异步回发之后,控件仍然存在,但未在回发中加载,因此无法找到它。这是所有csharp代码隐藏和ajax,但我猜控制没有得到重新加载。

2

您是否给ImageButton一个ID?

+0

是的,它肯定有一个ID :) – Polaris878 2010-04-12 22:25:59

+1

做任何它的父控制(可能是动态创建的)没有ID?大多数情况下,当我遇到类似这样的事情时,这是因为在控制树的某个地方没有分配ID – zincorp 2010-04-13 19:39:14

+0

这对我来说是个窍门,谢谢! – chteuchteu 2015-02-09 09:43:28

0

如果您动态创建控件。任何时候使用新创建的控件启动回发,都需要重新创建它。只要认为你的应用程序正在服务器上运行。服务器如何保存关于动态创建的控件的信息?不要使用Page.IsPostBack创建回传。 PostbackUrl是不好的解决方案。 Workarround将是需要的。

0

我可以进一步了解更多细节......我刚刚失去了几个小时来解决我自己的问题,类似于这里描述的问题。在创建一些搜索控件的过程中,我添加了一对ImageButton并在它们上设置PostbackUrl属性。几天后,在测试新代码时,我注意到网络表单上没有其他按钮正确回发。他们会发布回传,但代码隐藏行为就好像每个回发都是初始页面请求,并且没有事件处理程序正在发射。

经过几个小时的故障排除,我遇到了这篇文章。当我回去并从这两个ImageButton中移除PostbackUrl时,一切都恢复正常。我不知道这是为什么导致这个问题,但这里提到的修复工作适合我。我想补充说,我的ImageButtons没有动态添加...他们在标记中,这个问题仍然出现。使用PostbackUrl设置搜索你的标记以获取任何控件......删除它(如果需要的话,可以在程序周围)...查看你的事件处理程序是否会正确触发。

相关问题