自定义
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; }