0

我试图通过在单独的 Web 部件上调用按钮 onclick 方法来管理 ajax 连接,以强制消费者进行部分回发。

Web 部分 A(提供者)调用 Web 部分 B(消费者)上的方法

Web 部分 A

类型 t = myButton.GetType(); 对象[] p = 新对象[1]; p[0] = EventArgs.Empty;MethodInfo m = t.GetMethod("OnClick", BindingFlags.NonPublic | BindingFlags.Instance); m.Invoke(myButton, p);

Web 部分 B

public void btnHidden_​​Click(object sender, EventArgs e) { Label1.Text = "隐藏按钮:" + DateTime.Now.ToString(); }

当我使用反射时,我得到了关于 HiddenButton 的正确信息。但是,我无法调用“OnClick”事件。btnHidden_​​Click 不执行。当我从 WebPart B 调用到 WebPart B 时,它工作正常,但不是从不同的 webpart。

似乎没有太多关于这种行为的信息。有什么建议么?

谢谢。

4

2 回答 2

1

由于 Web 部件应该尽可能松耦合,因此我将使用 Web 部件连接基础结构和订阅者模式来处理这个问题。

连接部件之间的通信是通过接口完成的。该接口可以包括订阅和取消订阅方法。建立连接后,消费者部分可以订阅任何 UpdatePanel 控件,当提供者中的选定项目发生更改时,它需要更新。然后,当所选项目发生更改时,提供者部分可以遍历其订阅者并调用 UpdatePanel 上的 Update 方法以强制异步回发。

我自己没有尝试过,但我能看到的唯一缺点是您可能必须对 Update 的调用进行排队,因为任何异步回发的触发都会取消当前正在进行的任何其他异步回发。

我希望这有帮助。

于 2009-02-17T04:30:45.703 回答
0

使用 JavaScript 解决这个问题非常容易。我不想说 Web 部件不好(尽管我从未使用过它们),但我会说,如果你能够将最微小的 JS 编程到 Web 部件中,那么代码就是:

document.getElementById('ElID').onclick();

祝你好运!

于 2009-02-17T04:40:11.250 回答