0

我有以下情况:

  1. UserControlA包含一个<asp:Button id="bSomeid" onClick="AddItem" />带有一些代码的项目到购物篮中AddItem
  2. UserControlB包含一些在事件LinkButton中动态添加选择UserControlA到页面的's OnClick

这一切都在一个UpdatePanel. 它有点复杂,但我已将信息修剪为我认为导致问题的原因,如有必要,我将添加更多信息。

我遇到的问题是,AddItem在我将项目添加到页面后单击LinkButton.

我理解为什么会发生这种情况 - 在页面周期的后期为 onclick 中的下一个帖子注册事件已经很晚了 - 但是任何人都可以想到解决这个问题的方法吗?我可以强制在下一次回发时触发事件吗?我试图想办法在其中运行我的代码,但page_load我需要访问sender.onClick

使用 .NET 4.0。

编辑

我设法找到一种方法来获取在 Page_Load 中发送请求的链接按钮(使用Request.Form["__EVENTTARGET"];),因此我将代码移到了Page_load事件中。它仍然需要点击 2 次,所以我认为这与 onClick 注册晚有关。

是否有任何其他一般性检查可能导致按钮需要单击 2 次才能正确发布事件?

4

2 回答 2

0

如果您对页面生命周期后期的怀疑属实,那么您可以尝试使用ScriptManager.RegisterAsyncPostBackControl方法在链接按钮单击中注册动态添加的控件 - 考虑到您的按钮在用户控制范围内,您需要添加公共UserControlA方法实际上注册按钮bSomeid1和链接按钮点击UserControlB实际上会调用A控件的方法。

编辑

没有发生按钮单击的另一个原因可能是当回发发生时,作为动态控件的按钮没有添加到页面层次结构中(或者当回发数据已经处理时,它在页面生命周期的后期添加)。一个真正完整的解决方案应该将动态控件添加回页面层次结构page_load本身(并在层次结构中严格维护相同的控件 ID)。如果这不可能,那么您可以嗅探请求 ( Request.Form) 以检测回发。

在您的情况下,您应该确定按钮是否确实导致了每次点击的回发。如果是,Request.Form第一个请求的 POST 数据 ( ) 是什么 - 第一次单击(和回发)时的 __EVENTTARGET 值是多少?这应该开始您的故障排除。

另一方面,一个简单的解决方法可能是使用 html 锚元素(您仍然可以使用链接按钮)并在 click 事件中有一个 javascript 处理程序,该处理程序将设置一些隐藏变量,然后提交表单(您可以模拟单击隐藏按钮以触发 ASP.NET 客户端提交管道)。现在可以在回发时使用隐藏变量值来确定单击了哪个链接按钮。

于 2013-01-08T09:31:12.167 回答
0

“是否有任何其他一般性检查可能导致按钮需要单击 2 次才能正确发布事件?”

它是否需要在控件上单击两次,或者是否需要在屏幕上的其他位置单击一次,然后单击控件第一次触发?

我有我自己的(类似)更新面板问题,其中第一个(预期的)触发器没有触发,似乎在其他地方单击一次,然后随后的触发器第一次触发(总共 2 次点击)

[编辑] 由于您正在使用此 ATM,它也可能对我有所帮助。你有一个带有触发事件的文本框吗?我愿意,如果我把它留空(这样它就不会触发),那么就不需要第二次点击了。

于 2013-01-09T13:18:24.087 回答