数据的回发IPostBackDataHandler
在HTTP协议中,当用户通过向服务器发出一个请求的时候,页面HTML本身是不会发送回服务器的,请求中仅仅包含各种请求参数。在ASP.NET中,为了处理用户到达的要求,服务器端将会创建一个页面对象进行请求的处理工作。针对用户的回发请求来说,服务器又创建一个与生成当前的页面对象同类型的页面对象。因此,我们通过页面对象中的控件可以直接访问请求中的参数,以简化针对请求参数的访问。 需要从回发的请求参数中获取参数的控件,必须实现接口IPostBackDataHandler,这个接口的定义如下:
public interface IPostBackDataHandler
{
bool LoadPostData(string postDataKey,NameValueCollection postCollection);
void RaisePostDataChangedEvent();
}
}
在控件的实现中,通过重写LoadPostData来获取自己特定的参数。方法的参数中postDataKey一般就是控件的UniqueID,第二个参数postCollection则是请求参数中所有参数的集合。
如果控件的状态因为回发的参数发生了变化,则返回真,否则,返回假。控件获取请求参数的操作在页面事件的InitComplete事件之后,PreLoad事件之前完成。
回发服务器端事件IPostBackEventHandler
控件不仅可以取得请求中的参数,还可以触发服务器端的事件。对button类的对象来说,各种Button都支持Click事件和Command事件。
用户对按钮点击是在浏览器中完成的,服务器上的对象又是如何触发点击事件的呢?
对于ASP.NET服务器来说,能够收到的只有来自客户端的请求,请求中包含了各种各样的请求参数,当用户在浏览器中点击按钮之后,服务器受到排的只有
含有按钮唯一的标识得请求。在服务器上,如果用户不是回发请求,那么就不会有任何的控件事件发生。当回发请求的时候,
我们可以在服务器上检查控件的ID是否与某个请求参数中的按钮的ID相同,如果是,那么我们就可以认为是这个按钮
导致了回发请求,我们就可以触发这个按钮的点击事件了。
对于控件来说,如果需要你在服务器上检查请求是否由这个控件回发,并触发这个控件的事件,那么,这个控件必须实现接口IPostBackEventHandler,这个接口的定义如下:
public interface IPostBackEventHandler
{
void RaisePostBackEvent(string eventArgument);
}
由于匹配控件的ID与请求参数的名称这个问题将由页面对象完成,所以,需要我们完成的仅仅是在服务器上抛出事件了。所有控件的事件将在页面的Load事件之后,LoadComplete事件之前被触发。