11.用户控件2.自定义Web服务器控件第8章Web控件的自我构造21.用户控件提供了一种在应用程序中重用用户界面组件和代码的简易方法。2.扩展名为.ascx的文件3.只能在Web页面中运行,不能单独运行。4.与HTML服务器控件、Web服务器控件的不同3独立于Web窗体,用户控件的变量、方法和属性不会与Web窗体的变量、方法和属性冲突在同一Web窗体中多次使用用户控件不会产生冲突可被Web应用程序内所有Web窗体重用Page2.aspxControl1.ascxPage1.aspx应用程序A41、开发工具◦VS.NET:支持可视化开发◦可以使用任何文本编辑器开发◦支持代码隐藏页52、用户控件的构成(与Web窗体的区别)◦不包含HTML、BODY和FORM◦使用·@Control指令代替@Page指令◦用户控件的代码隐藏类从UserControl类继承(Web窗体的代码隐藏类从Page类继承)◦拥有自己的属性、事件处理代码%@ControlLanguage=“C#Codebehind=“control1.ascx.csInherits=test.control1%63、2种方法◦使用VisualStudio.NET新建用户控件◦将ASP.NETWeb窗体转换为用户控件7在项目中新建用户控件添加用户界面元素在代码隐藏页中添加事件处理过程、方法和属性publicintpNum{get{returnConvert.ToInt32(txtNum.Text);}set{txtNum.Text=Convert.ToString(value);}}8将代码隐藏基类从Page更改为UserControl在代码隐藏页中修改从.aspx文件中删除html、head、body和form标记将ASP.NET指令类型从@Page更改为@Control更改Codebehind属性来引用控件的代码隐藏类文件(ascx.vb或ascx.cs)将.aspx文件扩展名更改为.ascx9将用户控件放在Web窗体上宿主页◦包含用户控件的Web窗体◦通过用户控件的公共属性和方法与用户控件交互10使用@Register指令将用户控件添加到Web窗体中◦TagPrefix属性指定用户控件的标记前缀◦TagName属性指定用户控件标记的名称◦Src属性%@RegisterTagPrefix=demoTagName=validNumSrc=numberbox.ascx%11可视化添加用户控件自动生成@Regesiter指令一般来说,需要手动更改@Register指令中的TagName和TagPrefix属性%@RegisterTagPrefix=“uc1TagName=numberboxSrc=numberbox.ascx%...uc1:numberboxid=Numberbox1runat=server/uc1:numberbox12一般来说,需要手动更改窗体的@Register指令中的TagName和TagPrefix属性在窗体的代码隐藏页中,手工声明用户控件对象检查窗体HTML模式下用户控件的命名空间、id13每个应用程序中需要控件的一个单独副本不能在使用其他语言开发的Web应用程序中重用不能将用户控件添加到VisualStudio.NET工具箱中解决方案:自定义Web服务器控件141.自定义Web服务器控件的概念2.设计自定义Web服务器控件3.使用自定义Web服务器控件B.自定义Web服务器控件151.自定义web服务器控件是纵向的,对系统本身控件的继承和扩充。◦客户端呈现---继承WebControl类◦客户端不呈现---继承Control类2.在程序中以DLL文件形式存在。16更大的灵活性同时开发工作比较复杂17用户控件保存在.ascx文件中,而自定义服务器控件需要编译成.dll文件用户控件包含标记,更容易创建和设计布局,而自定义服务器控件要复杂得多。181:声明元数据属性◦设计时属性-----Web窗体的设计器◦分析时属性-----ASP.NET编译器◦运行时属性-----CLR提供信息2:定义控件的属性3:定义控件的呈现方式(1)为自定义控件定义客户端标记TagKey:HtmlTextWriterTag枚举类型(2)为客户端标记添加属性AddAttibutesToRender(3)为客户端标记生成显示内容RenderContents194.为控件指定图标•项目中新增“位图”,位图名必须与控件类名相同。•设置位图属性:“生成操作”=“嵌入资源”5.将控件加入到工具箱在工具箱中右键,“添加/移除项...”