不知道这样描述IPostBackEventHandler对不对,但从字面上来看是没有多大问题的。
此前一直想自己做一个Web控件,点击他时可以触发自己写的事件,然后做相应的处理。现在知道了IPostBackEventHandler这个接口,事情视乎变得非常明亮了。
IPostBackEventHandler需要实现
- void IPostBackEventHandler.RaisePostBackEvent(string eventArgument);
只要页面上的__EVENTTARGET被设置为某个服务器控件的名字,在页面回发时系统就会调用该函数。
- <input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="你的控件ID" />
- <input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="传入参数" />
下面是我自己写的一个按钮控件代码
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Text;
- using System.Web;
- using System.Web.UI;
- using System.Web.UI.WebControls;
- namespace CommonControls
- {
- [DefaultProperty("Text")]
- [ToolboxData("<{0}:ButtonFelyAJAX runat=server></{0}:ButtonFelyAJAX>")]
- public class ButtonFelyAJAX : Button, IAjaxControl,IPostBackEventHandler
- {
- public delegate void deleClickAJAX(object sender, object e);
- [Category("操作")]
- public event deleClickAJAX ClickAJAX;//定义事件
- #region IPostBackEventHandler 成员
- void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
- {
- string __EVENTTARGET = HttpContext.Current.Request.Form["__EVENTTARGET"];//eventArgument就是页面上__EVENTARGUMENT的值
- if (ClickAJAX != null)
- {
- ClickAJAX(this, eventArgument);
- }
- base.RaisePostBackEvent(eventArgument);//不写按钮的其他事件就不触发了
- }
- #endregion
- }
- }
如果有回发控件存在aspnet页面就会在页面上填一个名为function __doPostBack(eventTarget, eventArgument) 的函数,当你的控件被点击时调用这个函数,后台事件就会被触发了