一聚教程网:一个值得你收藏的教程网站

热门教程

ASP.NET组件设计Step by Step(6)

时间:2022-07-02 11:53:32 编辑:袖梨 来源:一聚教程网

asp.net页面如果是通过post请求到服务器,框架将会遵行事件周期生成、调用控件,而控件(如果支持回传)则将加载回传数据,并且映射成控件的服务器端事件,就好像在重放客户的客户行为(客户按下一个按钮,却引发服务器端控件的click事件)。其中的机制如何?
如果一个控件需要处理回传事件,那么必须实现一个特定接口 IPostBackEventHandler接口:
public interface IPostBackEventHandler{
void RaisePostBackEvent(string eventArgument);
}
以及另外一个接口:
IPostBackDataHandler
{
bool LoadPostData( string postDataKey, NameValueCollection postCollection);
void RaisePostDataChangedEvent();
}
一旦控件实现了这些接口,页面框架就会自动在PostBack数据完成后,调用控件的此接口IPostBackDataHandler。LoadPostData,从而让控件读取post上来的数据。PostDataKey为PostBack数据中的命名键名,通过NameValueCollection[postDataKey]可以获得页面框架传递给控件的值。控件应当读取此值,进行自己内部状态更新,反映状态变化。如果控件返回真,表示服务器控件状态改变,此时页面框架会立即调用此控件的RaisePostDataChangedEvent方法。此时,控件应当自己定义该引发那些服务器控件对外提供的事件。这些事件往往是控件编程者精心设计留给使用这控键的aspx编程者的代码舞台。
至于另一个接口IPostBackEventHandler,也是回传时候服务器调用的接口。我们知道每一个控件都有一个UniqueID,当客户端触发一个可以引起回传的客户端事件(譬如按下了submit按钮),那么自然HTTP Post数据到服务器端,服务器页面框架进行到PostBack处理时候,会检索控件是否支持IpostBackEventHandler接口,并且查找控件的UniqueID发现支持就立即调用此接口的RaisePostBackEvent方法,表示UniqueID的控件发生了一个需要捕获的事件。很明显,并非客户端所有事件都可以投射到服务器端,只能够是能够引发Post Back(也就是能够提交表单数据到服务器的事件)的事件和控件。注意,这里严格要求了UniqueID必须在服务器端和客户端对应一致,否则无法映射事件。

热门栏目