ASP.NET开发大全第11章.用户控件和自定义控件

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

第11章用户控件和自定义控件在ASP.NET中,系统自带的服务器控件为应用程序开发提供了诸多便利。在应用程序开发中,许多功能都需要重复使用,而如果在应用程序开发中重复的编写类似的代码是非常没有必要的。ASP.NET让开发人员可以自行开发用户控件和自定义控件以提升代码的复用性,本章即将讲解用户控件和自定义控件的开发和使用。11.1用户控件在ASP编程中,开发人员经常使用Include方式包含其他文件从而简化编程过程。而在ASP.NET中,控件能够提高应用程序中代码的复用性,不仅ASP.NET提供了服务器控件,ASP.NET还支持用户自定义控件,从而提高了代码的复用性。11.1.1什么是用户控件用户控件使开发人员能够根据应用程序的需求,方便的定义和编写控件。开发所使用的编程技术将与编写Web窗体的技术相同,只要开发人员对控件进行修改,就可以将使用该控件的页面的所有控件都进行更改。为了确保用户控件不会被修改、下载,被当成一个独立的Web窗体来运行,用户控件的后缀名为.ascx,当用户访问页面时,用户控件是不能被用户直接访问的。注意:虽然.ascx文件会阻止用户的直接访问,但是一些常用的下载工具还是能够下载.ascx文件。11.1.2编写一个简单的控件用户控件是以.ascx为后缀名的,在VisualStudio2008中,可以通过【添加新项】选项创建一个用户控件,如图11-1所示。图11-1创建用户控件288用户控件创建完毕后,会生成一个.ascx页面。.ascx页面结构同.aspx页面基本没有什么区别。在解决方案管理器中可以打开.aspx页面和.ascx页面进行对比,其结构并没有太大的变化,如图11-2和图11-3所示。图11-2创建一个用户控件图11-3用户控件的结构用户控件中并没有“htmlbody”等标记,因为.ascx页面作为控件被引用到其他页面,引用的页面(如.aspx页面)其中已经包含bodyhtml等标记。而如果控件中使用这样的标记,可能会造成页面布局混乱。用户控件创建完成后,.ascx页面代码如下所示。%@ControlLanguage=C#AutoEventWireup=trueCodeBehind=mycontrol.ascx.csInherits=_11_1.mycontrol%其中没有任何的“bodyhtml”等标记,而.ascx.cs页面代码基本同.aspx相同,示例代码如下所示。usingSystem;//使用系统命名空间usingSystem.Collections;usingSystem.Configuration;usingSystem.Data;usingSystem.Linq;usingSystem.Web;//使用Web命名空间usingSystem.Web.Security;usingSystem.Web.UI;//使用UI命名控件usingSystem.Web.UI.HtmlControls;//使用Html控件命名空间usingSystem.Web.UI.WebControls;//使用Web控件命名空间usingSystem.Web.UI.WebControls.WebParts;usingSystem.Xml.Linq;//使用LINQ命名空间namespace_11_1{publicpartialclassmycontrol:System.Web.UI.UserControl//从控件类派生{protectedvoidPage_Load(objectsender,EventArgse)//页面加载方法{}}}用户控件能够提高复用性,前面介绍的服务器控件,从很多情况下来说都可以看作是用户控件的一种。当网站需要登录框时,不可能在每个需要登录的地方都重新编写一个登录框,最好的方法是每个页面都能够引用一个登录框。当需要对登录框进行修改时,可以一次性的将所有的页面都修改完毕,而不289需要对每个页面都修改登录框。要达到这种目的,使用用户控件是最好不错的了。.ascx页面允许开发人员拖动服务器控件,并编写相应的样式来实现用户控件,同时用户控件也能够支持事件、方法、委托等高级编程。编写一个用户登录窗口,可以通过几个TextBox控件和Button控件来实现,示例代码如下所示。%@ControlLanguage=C#AutoEventWireup=trueCodeBehind=mycontrol.ascx.csInherits=_11_1.mycontrol%divstyle=border:1pxsolid#ccc;width:300px;background:#f0f0f0;padding:5px5px5px5px;font-size:12px;用户登录br/br/用户名:asp:TextBoxID=TextBox1runat=server/asp:TextBoxbr/br/密码:asp:TextBoxID=TextBox2runat=server/asp:TextBoxbr/br/asp:ButtonID=Button1runat=serverText=登录/asp:HyperLinkID=HyperLink1runat=server还没有注册?/asp:HyperLink/div上述代码创建了一个登录框界面。当用户进行网站访问时,网站希望用户能够注册和登录到网站从而提高网站的用户粘度、提升访问量。所以设置登录窗口是非常必要的,界面布局如图11-4所示。图11-4编写用户登录界面当界面布局完毕后,就需要为用户控件编写事件。当用户单击【登录】按钮时,就需要进行事件操作。同Web窗体一样,双击按钮同样会自动生成事件,示例代码如下所示。protectedvoidButton1_Click(objectsender,EventArgse){Label1.Text=登录成功;//显示登录信息}当单击【登录】按钮时,系统提示登录成功,当然这里只是一个简单的用户控件。如果要实现复杂的用户控件的登录窗口,还需要对用户登录进行验证、查询和判断等功能。当用户控件制作完毕后,就可以在其他页面引用用户控件,示例代码如下所示。%@RegisterTagPrefix=SampleTagName=LoginSrc=~/mycontrol.ascx%//声明控件引用在这段代码中,有几个属性是必须编写的,这些属性的功能如下所示:TagPrefix:定义控件位置的命名控件。有了命名空间的制约,就可以在同一个页面中使用不同功能的同名控件。TagName:指向所用的控件的名字。Src:用户控件的文件路径,可以为相对路径或绝对路径,但不能使用物理路径。了解了相关属性,就能够在其他页面中引用该控件了,示例代码如下所示。%@PageLanguage=C#AutoEventWireup=trueCodeBehind=Default.aspx.csInherits=_11_1._Default%%@RegisterTagPrefix=SampleTagName=LoginSrc=~/mycontrol.ascx%290htmlxmlns==servertitle用户控件/title/headbodyformid=form1runat=serverdivSample:Loginrunat=serverid=Login1/Sample:Login/div/form/body/html上述代码声明了用户控件,并使用了用户控件,使用用户控件代码如下所示。Sample:Loginrunat=serverid=Login1/Sample:Login//使用用户控件从上述代码可以看出,用户控件的格式为TagPrefix:TagName,当声明了用户控件后,就可以使用TagPrefix:TagName的方式使用用户控件。这样一个用户控件就使用完毕了,如图11-5所示。图11-5使用用户控件运行Default.aspx页面,虽然在Default.aspx页面中没有使用制作和编写任何控件,以及代码,但是却已经运行了登录框,这说明用户控件已经被运行了,如图11-6所示。图11-6运行用户控件当需要对登录框进行修改,而无需对页面进行修改时,只需要修改相应的用户控件即可。当多个页面进行同样的用户控件的使用时,若需要对多个页面的控件进行样式或逻辑的更改只需要修改相应的控291件,而不需要进行繁冗的多个页面的修正。11.1.3将Web窗体转换成用户控件在编写用户控件时,会发现Web窗体的结构和用户控件的结构基本相同。如果开发人员已经开发了Web窗体,并在今后的需求中决定能够在应用程序全局中能够访问此Web窗体,那么就可以将Web窗体改成用户控件。如果需要将Web窗体更改为用户控件,首先需要对比Web窗体和用户控件的区别:Web窗体中有bodyhtmlhead等标记,而用户控件没有。Web窗体和用户控件所声明的方法不同。在了解以上区别后,就可以很容易的将Web窗体转换成用户控件。首先,只需要删除bodyhtmlhead等标记即可。在删除标记后,好需要对两种窗体的声明方式进行更改,对于Web窗体,其标记方式如下代码所示。%@PageLanguage=C#AutoEventWireup=trueCodeBehind=Default.aspx.csInherits=_11_1._Default%而对于用户控件,声明代码如下所示。%@ControlLanguage=C#AutoEventWireup=trueCodeBehind=mycontrol.ascx.csInherits=_11_1.mycontrol%在将Web窗体更改为用户控件时,只需要将PageLanguage更改为ControlLanguage即可。这样就完成了Web窗体向用户控件的转换过程。注意:有的时候,标记中还包括ClassName属性,当包含ClassName属性时,还需要修改相应的ClassName属性。11.2自定义控件用户控件能够执行很多操作。并实现一些功能,但是在复杂的环境下,用户控件并不能够达到开发人员的要求,是因为用户控件大部分都是使用现有的控件进行组装,编写事件来达到目的。于是,ASP.NET允许开发人员编写自定义控件实现复杂的功能。11.2.1实现自定义控件自定义控件与用户控件不同,自定义控件需要定义一个直接或间接从Control类派生的类,并重写Render方法。在.NET框架中,System.Web.UI.Control与System.Web.UI.WebControls.WebControl两个类是服务器控件的基类,并且定义了所有服务器控件共有的属性、方法和事件,其中最为重要的就是包括了控制控件执行生命周期的方法和事件,以及ID等共有属性。实现自定义控件,必须创建一个自定义控件,自定义控件将会编译成DLL文件。创建自定义控件如图11-7所示。292图11-7创建自定义控件自定义控件创建完成后,会自动生成一个类,并在类中生成相应的方法,示例代码如下所示。usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Linq;usingSystem.Text;usingSystem.Web;usingSystem.Web.UI;usingSystem.Web.UI.WebControls;//使用UI命名空间以便继承namespaceServerControl1{[DefaultProperty(Text)]//声明属性[ToolboxData({0}:ServerControl1runa

1 / 26
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功