background image

自定义

UpdatePanelTrigger

大家在使用

UpdatePanel 的时候有没有遇到过这种情况呢?

  页面上放置着

3 到 4 的 UpdatePanel,它们互相独立,并且 UpdateMode 都是

Condition , 这 意 味 着 没 有 哪 个 UpdatePanel 每 次 都 会 更 新 。 大 多 数
UpdatePanel 都是由某个控件回发而更新,但是其中的一个例外。它没有哪个控件
来触发它,它有自己的一套逻辑来判断是否更新。这段逻辑独立于其他控件。

  理论上,这段逻辑可以放在页面的某个生命周期里进行判断,例如

OnLoad。但是如果,

这个判断甚至必须放在

PreRenderComplete 之后呢?再者,如果我们真的很想

把判断是否更新的逻辑给独立与页面的生命周期的阶段呢?

  那么我们可以自己定义一个

UpdatePanel 触发器。

  

UpdatePanel 触发器的作用自然是用于触发某个 UpdatePanel 的更新。在 ASP.NET 

AJAX 中,我们最常见的 UpdatePanel 触发器就是 AsyncPostBackTrigger 和
PostBackTrigger。但是在某些需要的时候,我们可以定义自己的触发器。

  如果要定义一个

UpdatePanel 触发器,我们必须继承 UpdatePanelTrigger 抽象类,

并实现它的

HasTriggered 方法。UpdatePanelTrigger 还有一个 virtual 方法就是

Initialize。这个方法会在 UpdatePanel 的 OnInit 或 OnLoad 阶段时调用,它的实
现如果要涉及到生命周期方面的问题,则必须注意这一点。

HasTriggered 方法会

在页面

Render

——

其实是在

ASP.NET AJAX 自定义的输出方法中被调用。我们

可以在这里实现自己的逻辑。

  我们现在就来实现一个

ProgramicTrigger,用于解决掀先前提出的问题。这个

ProgramicTrigge 的实现很简单,只有寥寥数行代码:

ProgramicTrigger

public class ProgramicTrigger : UpdatePanelTrigger

{

    private string _CheckMethod = null;

    public string CheckMethod

    {

        get { return _CheckMethod; }