如何从提供者Web部件到使用者Web部件调用Ajax OnClick

时间:2008-12-29 14:26:44

标签: ajax connection invoke

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

Web部件A(提供者)调用Web部件B(使用者)

上的方法

网络A部分

输入t = myButton.GetType();             object [] p = new object [1];             p [0] = EventArgs.Empty;             MethodInfo m = t.GetMethod(“OnClick”,BindingFlags.NonPublic | BindingFlags.Instance);             m.Invoke(myButton,p);

网络B部分

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

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

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

感谢。

罗布

2 个答案:

答案 0 :(得分:1)

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

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

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

我希望这会有所帮助。

答案 1 :(得分:0)

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

document.getElementById('ElID').onclick();
祝你好运!