Tip:自定义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; }
set { _CheckMethod = value; }
}

protected override bool HasTriggered()
{
if (this._CheckMethod != null)
{
Page page = this.Owner.Page;
MethodInfo methodInfo = page.GetType().GetMethod(this._CheckMethod);
return (bool)methodInfo.Invoke(page, null);
}

return false;
}
}
 
  在HasTriggered方法中,如果用 户指定了CheckMethod属性,则使用反射调用定义在页面中的相应方法,得到是否刷新的结果。其实在一开始,我并不想使用反射,而是想定义一个事 件,在事件中进行判断。可惜如果使用了事件,在编辑模式下就无法使用XML来指定响应事件的方法了——对于非控件的对象,VS的编辑模式只能指定属性。
  ProgramicTrigger使用起来自然也非常方便:
aspx
<asp:UpdatePanel ID="UpdatePanel1" runat="server"
UpdateMode="Conditional" ChildrenAsTriggers="false">
<ContentTemplate>
<%= DateTime.Now %>
<asp:Button ID="Button1" runat="server" Text="Button" />
</ContentTemplate>
<Triggers>
<ext:ProgramicTrigger CheckMethod="CheckMethod" />
</Triggers>
</asp:UpdatePanel>
aspx.cs
public bool CheckMethod()
{
// ...
}
 
  您可以尝试在CheckMethod中给出不同的实现,然后点击页面中的按钮,察看页面上显示的时间是否变化。
  ProgramicTrigger只是最简单的示例,如果需要的话,您不妨在开发过程中也自定义一个UpdatePanel触发器?


本文转自 jeffz 51CTO博客,原文链接:http://blog.51cto.com/jeffz/60252,如需转载请自行联系原作者
相关文章
|
1月前
|
存储 数据库
如何使用代码修改 attachment 实例的 CHANGED_BY 字段
如何使用代码修改 attachment 实例的 CHANGED_BY 字段
10 0
|
6月前
【element-ui用法】el-radio-group默认选择和数据回显问题的解决方案
【element-ui用法】el-radio-group默认选择和数据回显问题的解决方案
215 0
|
7月前
|
Web App开发 API 开发者
关于 SAP UI5 Context.prototype.delete 方法的输入参数 Group ID 的细节
关于 SAP UI5 Context.prototype.delete 方法的输入参数 Group ID 的细节
60 0
element:el-select添加图片以及自定义内容
element:el-select添加图片以及自定义内容
el-select 数据回显,只显示value不显示lable
el-select 数据回显,只显示value不显示lable
el-select 数据回显,只显示value不显示lable
element-ui中的Select选择器中remote-method方法带自定义参数
element-ui中的Select选择器中remote-method方法带自定义参数
|
前端开发 开发者 iOS开发
通过 url 参数 parameters 和 script tag 属性来配置 SAP UI5 运行时
通过 url 参数 parameters 和 script tag 属性来配置 SAP UI5 运行时
通过 url 参数 parameters 和 script tag 属性来配置 SAP UI5 运行时
SAP Spartacus unit detail 页面显示后自动 focus 设置的原理
这个自动 focus 设置的效果是:我们从 Spartacus Unit list 页面,随便选择一行,进入明细页面之后:
SAP Spartacus unit detail 页面显示后自动 focus 设置的原理
Item描述信息的更改也会导致will trigger ORDERADM_H的update函数触发
Item描述信息的更改也会导致will trigger ORDERADM_H的update函数触发
106 0
Item描述信息的更改也会导致will trigger ORDERADM_H的update函数触发
|
.NET
艾伟:Tip:自定义UpdatePanelTrigger
  大家在使用UpdatePanel的时候有没有遇到过这种情况呢?   页面上放置着3到4的UpdatePanel,它们互相独立,并且UpdateMode都是Condition,这意味着没有哪个UpdatePanel每次都会更新。
906 0