资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,控件原理,-,自定义控件,硬座火车,1,内容介绍,概述,状态,数据回发,Change事件,单击事件,2,概述,自定义控件和普通的服务器控件一样,间接或直接继承自System.Web.UI.Control类.不同的是普通的服务器控件是.net framework提供的,自定义控件是你编写的,public class MyTextBox :,TextBox,3,状态,视图状态是 页框架用于在往返过程之间保留页和控件值,再次处理请求时获取上次值的方法,主要有两种用途:1.用于比对数据是否发生了变化;2.使用上次的处理结果,减少处理次数,控件状态和视图状态类似,只是它不能被关闭.当页面或者某个控件禁用了视图状态功能时,控件状态仍可照常使用,可以存储于客户端页面的隐藏域中,也可以存储在服务端,4,示例,5,数据回发,实现接口:,IPostBackDataHandler,postDataKey是页面标签的name,根据它来给对应的控件赋值。,为什么控件的ID需要与页面标签的name一致?,6,数据回发,Page类中处理回发数据方法,private void ProcessPostData(NameValueCollection postData, bool fBeforeLoad),.,Control control2 =,this.FindControl(str2);,if (control2 != null),IPostBackDataHandler handler2 =,.,;,if (handler2 = null),handler2 = control2 as IPostBackDataHandler;,if (handler2.LoadPostData(str2, this._requestValueCollection),this._changedPostDataConsumers.Add(control2);,7,Change事件,实现接口:,IPostBackDataHandler,8,Change事件,Page类中处理回发数据方法,private void ProcessPostData(NameValueCollection postData, bool fBeforeLoad),.,Control control2 =,this.FindControl(str2);,if (control2 != null),IPostBackDataHandler handler2 =,.,;,if (handler2 = null),handler2 = control2 as IPostBackDataHandler;,if (handler2.LoadPostData(str2, this._requestValueCollection),this._changedPostDataConsumers.Add(control2);,9,控件状态,使用控件状态需要重写下面三个方法,10,单击事件,实现接口:IPostBackEventHandler,11,事件映射,private void RaisePostBackEvent(NameValueCollection postData),if (this._registeredControlThatRequireRaiseEvent != null),this.RaisePostBackEvent(this._registeredControlThatRequireRaiseEvent, null);,else,string str = postData_EVENTTARGET;,Control control = null;,if (!string.IsNullOrEmpty(str),control = this.FindControl(str);,if (control != null) & (control.PostBackEventHandler != null),string eventArgument = postData_EVENTARGUMENT;,this.RaisePostBackEvent(control.PostBackEventHandler, eventArgument);,。,Page类中触发回发事件的方法,12,问题,事件不能触发,标签name与控件id不一致,IPostBackDataHandler和IPostBackEventHandler冲突,事件触发错误,有多个提交按钮,不管点击的是哪一个,触发的总是最后一个控件的事件,13,谢谢大家,14,
展开阅读全文