asp.NET自定义服务器控件内部细节系列教程五
如大家要转载,请保留本人的版权:
/*
*Description:asp.NET自定义服务器控件内部细节系列教程
*Auther:崇崇-天真的好蓝
*MSN:chongchong2008@msn.com
*Dates:2007-05-20
*Copyright:ChongChong2008 YiChang HuBei China
*/
五 服务器控件的回传架构
参与回传架构主要有两个重要的接口IPostBackEventHandler和IPostBackDataHandler接口
IPostBackEventHandler接口使控件引发一个标志着已经发生回传的事件。
IPostBackDataHandler接口使控件检索已被传送的表单数据,从而相应的更新状态,然后在服务器端引发事件以标志其状态变化。
1。IPostBackEventHandler
1.1 把回传事件映射到服务器端事件
public interface IPostBackEventHandler
{
void RaisePostBackEvent(string eventArguments);
}
eventArguments参数是为了如果控件生成了能够引起回传事件的多个HTML标签,那么可以利用这个参数来识别而引发不同的事件。
1.2 生成回传的客户端脚本
如果想利用一个超级链接来引起回传,同样需要先实现IPostBackEventHandler接口,然后需要利用下面的方法:
Page.GetPostBackClientHyperlink(object ,string);
GetPostBackClientHyperlink主要实现两个功能:
第一:返回一个字符串"javascript:__doPostBack('youControlUniqueID','')",该字符串包括一个由页面框架生成的到__doPostBack javascript函数的调用。
第二:告知页面生成两个隐藏域(__EVENTTARGET和__EVENTARGUMENT),以及一个引起回传(____doPostBack)的javascript函数.
2。IPostBackDataHandler
为了参与数据回传处理必须实现IPostBackDataHandler接口,它右两个方法
public interface IPostBackDataHandler
{
bool LoadPostDate(string postDateKey , NameValueCollection postCollection);
void RaisePostDateChangedEvent();
}
在加载回传数据阶段,页面查看名/值表单传送集中的每一个名字,并且寻找控件树中与名字匹配的UniqueID控件。如果页面找到这样一个控件,并且这个控件实现IPostBackDataHandler,则页面在这个控件上调用LoadPostData.
LoadPostData方法有两个参数,一个包含回传元素名称的字符串和一个包含传送表单数据的名/值集的System.Collections.Specialized.NameValueCollection实例。控件可以用回传数据来更新它的状态。
如果控件状态在回传时改变,而且希望引发事件来标记此变化,那么必须从LoadPostData方法中返回True值。
当控件的LoadPostData方法返回True时,页面会调用此控件的RaisePostDateChangedEvent方法。