第11章用户控件和自定义控件

上传人:jin****ng 文档编号:132439526 上传时间:2022-08-08 格式:DOC 页数:31 大小:983.50KB
收藏 版权申诉 举报 下载
第11章用户控件和自定义控件_第1页
第1页 / 共31页
第11章用户控件和自定义控件_第2页
第2页 / 共31页
第11章用户控件和自定义控件_第3页
第3页 / 共31页
资源描述:

《第11章用户控件和自定义控件》由会员分享,可在线阅读,更多相关《第11章用户控件和自定义控件(31页珍藏版)》请在装配图网上搜索。

1、第 11 章 用户控件和自定义控件VS2008在 ASP.NET 中,系统自带的服务器控件为应用程序开发提供了诸多便利。在应用程序开发中,许 多功能都需要重复使用,而如果在应用程序开发中重复的编写类似的代码是非常没有必要的。ASP.NET 让开发人员可以自行开发用户控件和自定义控件以提升代码的复用性,本章即将讲解用户控件和自定义 控件的开发和使用。11.1 用户控件在 ASP 编程中,开发人员经常使用 Include 方式包含其他文件从而简化编程过程。而在 ASP.NET 中,控件能够提高应用程序中代码的复用性,不仅ASP.NET提供了服务器控件,ASP.NET还支持用户 自定义控件,从而提高

2、了代码的复用性。11.1.1 什么是用户控件用户控件使开发人员能够根据应用程序的需求,方便的定义和编写控件。开发所使用的编程技术将 与编写 Web 窗体的技术相同,只要开发人员对控件进行修改,就可以将使用该控件的页面的所有控件 都进行更改。为了确保用户控件不会被修改、下载,被当成一个独立的 Web 窗体来运行,用户控件的 后缀名为.ascx,当用户访问页面时,用户控件是不能被用户直接访问的。注意:虽然.ascx文件会阻止用户的直接访问,但是一些常用的下载工具还是能够下载.ascx文件。11.1.2 编写一个简单的控件用户控件是以.ascx为后缀名的,在Visual Studio 2008中,可

3、以通过【添加新项】选项创建一个用 户控件,如图 11-1 所示。Vi eu:el1 C#WebW i rLtlmw s F orm sVisual Studio已安装的模板F规码据Web用户控件Reporting WorkflowM据库单元测试 童| AJAX客户端行为 宜|AJ献客户端库 EHTML 页to SQL 类 输CF服务 諮壯b配置文件 區KML架构 XSLT文件 罰扌艮表母版页 lEWeb内容窗体 匡jAJAJ: Web窗体 世AJAI客户端控件1 母版页 即JScript文件SQL Server数据库 Web服劳 Windows脚本宿主 |1 XML文件 电安装程序类报表向导逵

4、加新项-11-1类别CC):模板:Web. configPropgr t i 已三 引用 App_Da t:mDefault, asp:-:筍 Default, aspi:. ce 雪 Defaiilt. aspi:. designer.CEmy con tr-ml.在三匚:mycoritrol. as cm. cemycoritrol. :isck. desigTLer. ceWeb. config订解决方案资源管理器穹服务器资源管理卸丘?解决方案资源管理器刍服务器资源管理卸图 11-2 创建一个用户控件图 11-3 用户控件的结构I使用可视化设计器创建的ASF.NET服务器控件 名称(X)

5、:Imycontrol. ascs1添加如|取消1图 11-1 创建用户控件用户控件创建元毕后,会生成一个.asex页面。.asex页面结构同.aspx页面基本没有什么区别。在解 决方案管理器中可以打开.aspx页面和.asex页面进行对比,其结构并没有太大的变化,如图11-2和图11-3 所示。解决方案贵源管理器-解决方案“11-. + +X首淄園丨国圍宀 矛解决方案“ 11-1 (1个项目)-鬪 11-1+冒Propertimzjl-同引用_ App_DataE-世Default, aspxusing System;using System.Collections;using System

6、.Configuration;using System.Data;using System.Linq;using System.Web;using System.Web.Security;using System.Web.UI;用户控件中并没有“vhtm卜vbody”等标记,因为.asex页面作为控件被引用到其他页面,引用的 页面(如.aspx页面)其中已经包含vbodyxhtm 1等标记。而如果控件中使用这样的标记,可能会造成 页面布局混乱。用户控件创建完成后,.asex页面代码如下所示。其中没有任何的“vbodyxhtml”等标记,而.ascx.cs页面代码基本同.aspx相同,示例代码如

7、下所 示。使用系统命名空间使用Web命名空间使用UI命名控件使用Html控件命名空间使用Web控件命名空间使用LINQ命名空间/从控件类派生页面加载方法using System.Web.Ul.WebControls;using System.Web.Ul.WebControls.WebParts;using System.XmLLinq;namespace _11_1public partial class mycontrol : protected void Page_Load(object sender, EventArgs e)用户控件能够提高复用性,前面介绍的服务器控件,从很多情况下来

8、说都可以看作是用户控件的一 种。当网站需要登录框时,不可能在每个需要登录的地方都重新编写一个登录框,最好的方法是每个页面都能够引用一个登录框。当需要对登录框进行修改时,可以一次性的将所有的页面都修改完毕,而不 需要对每个页面都修改登录框。要达到这种目的,使用用户控件是最好不错的了。.ascx页面允许开发人员拖动服务器控件,并编写 相应的样式来实现用户控件,同时用户控件也能够支持事件、方法、委托等高级编程。编写一个用户登 录窗口,可以通过几个TextBox控件和Button控件来实现,示例代码如下所示。 用户登录 用户名: 密码: 还没有注册?上述代码创建了一个登录框界面。当用户进行网站访问时,

9、网站希望用户能够注册和登录到网站从而提高网站的用户粘度、提升访问量。所以设置登录窗口是非常必要的,界面布局如图 11-4 所示。图 11-4 编写用户登录界面当界面布局完毕后,就需要为用户控件编写事件。当用户单击【登录】按钮时,就需要进行事件操 作。同Web窗体一样,双击按钮同样会自动生成事件,示例代码如下所示。protected void Button1_Click(object sender, EventArgs e) Label1.Text =登录成功;/显示登录信息当单击【登录】按钮时,系统提示登录成功,当然这里只是一个简单的用户控件。如果要实现复杂 的用户控件的登录窗口,还需要对用户

10、登录进行验证、查询和判断等功能。当用户控件制作完毕后,就 可以在其他页面引用用户控件,示例代码如下所示。/声明控件引用在这段代码中,有几个属性是必须编写的,这些属性的功能如下所示:口 TagPrefix :定义控件位置的命名控件。有了命名空间的制约,就可以在同一个页面中使用不同 功能的同名控件。口 TagName:指向所用的控件的名字。口 Src :用户控件的文件路径,可以为相对路径或绝对路径,但不能使用物理路径。了解了相关属性,就能够在其他页面中引用该控件了,示例代码如下所示。用户控件 上述代码声明了用户控件,并使用了用户控件,使用用户控件代码如下所示。/使用用户控件从上述代码可以看出,用户

11、控件的格式为TagPrefix:TagName,当声明了用户控件后,就可以使用 TagPrefix:TagName的方式使用用户控件。这样一个用户控件就使用完毕了,如图11-5所示。图 11-5 使用用户控件运行 Default.aspx 页面,虽然在 Default.aspx 页面中没有使用制作和编写任何控件,以及代码,但是 却已经运行了登录框,这说明用户控件已经被运行了,如图 11-6 所示。图 11-6 运行用户控件当需要对登录框进行修改,而无需对页面进行修改时,只需要修改相应的用户控件即可。当多个页 面进行同样的用户控件的使用时,若需要对多个页面的控件进行样式或逻辑的更改只需要修改相应

12、的控 件,而不需要进行繁冗的多个页面的修正。11.1.3 将 Web 窗体转换成用户控件在编写用户控件时,会发现 Web 窗体的结构和用户控件的结构基本相同。如果开发人员已经开发 了 Web 窗体,并在今后的需求中决定能够在应用程序全局中能够访问此 Web 窗体,那么就可以将 Web 窗体改成用户控件。如果需要将 Web 窗体更改为用户控件,首先需要对比 Web 窗体和用户控件的区别: 口 Web窗体中有vbodyvhtmlvhead等标记,而用户控件没有。口 Web窗体和用户控件所声明的方法不同。在了解以上区别后, 就可以很容易的将 Web 窗体转换成用 户 控件。 首先, 只需要删除 vb

13、odyxhtm卜vhead 等标记即可。在删除标记后,好需要对两种窗体的声明方式进行更改,对于 Web 窗体,其标记方式如下代码所示。而对于用户控件,声明代码如下所示。在将Web窗体更改为用户控件时,只需要将Page Language更改为Control Language即可。这样就 完成了 Web 窗体向用户控件的转换过程。注意:有的时候,标记中还包括 ClassName 属性,当包含 ClassName 属性时,还需要修改相应的 ClassName 属性。11.2 自定义控件用户控件能够执行很多操作。并实现一些功能,但是在复杂的环境下,用户控件并不能够达到开发 人员的要求,是因为用户控件大

14、部分都是使用现有的控件进行组装,编写事件来达到目的。于是, ASP.NET 允许开发人员编写自定义控件实现复杂的功能。11.2.1 实现自定义控件自定义控件与用户控件不同,自定义控件需要定义一个直接或间接从 Control 类派生的类,并重写Render 方法。在.NET 框架中,System.Web.UI.Control 与 System.Web.UI.WebControls.WebControl 两个类 是服务器控件的基类,并且定义了所有服务器控件共有的属性、方法和事件,其中最为重要的就是包括 了控制控件执行生命周期的方法和事件,以及 ID 等共有属性。实现自定义控件,必须创建一个自定义控

15、件,自定义控件将会编译成 DLL 文件。创建自定义控件 如图 11-7 所示。图 11-7 创建自定义控件自定义控件创建完成后,会自动生成一个类,并在类中生成相应的方法,示例代码如下所示。using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Text;using System.Web;using System.Web.UI;using System.Web.Ul.WebControls;namespace ServerControl1Def

16、aultProperty(Text)ToolboxData() public class ServerControl1 : WebControlBindable(true)Category(Appearance)DefaultValue() Localizable(true) public string Text使用UI命名空间以便继承声明属性/设置控件格式设置是否支持绑定设置类别设置默认值设置是否支持本地化操作定义Text属性get获取属性String s = (String)ViewStateText;获取属性的值return (s = null) ? + this.lD + : s);返

17、回默认的属性的值set设置属性ViewStateText = value;protected override void RenderContents(HtmlTextWriter output)页面呈现output.Write(Text); 开发人员可以在源代码中编写和添加属性。当需要呈现给 HTML 页面输出时,只需要重写 Render 方法即可,示例代码如下所示。protected override void RenderContents(HtmlTextWriter output)output.Write(定义的Text属性的值为:+ Text);输出为页面呈现在使用服务器控件时,会发

18、现控件有很多的属性,例如SqlConnection属性、Color属性等,如图11-8 所示。图 11-8 控件的属性为了实现服务器控件的智能属性配置,开发人员能够在源代码中编写属性,示例代码如下所示。public string GuoJingString编写属性get return (String)ViewStateGuoJingString; /获取属性set ViewStateGuoJingString = value; 设置属性当自定义控件编写完毕后,需要在需要使用该控件的项目中添加引用。右击现有项目,选择【添加 引用】选项,如果是同在一个解决方案下,则只要选择【项目】选项卡即可。而如

19、果不在同一解决方案, 则需要选择【浏览】选项卡浏览相应的DLL文件,如图11-9和图11-10所示。项目容称亠页目目录1S erverC on. t rol 1II: ASP. NET 3.計遁代码第ii章li-2Se. . . fNET j COM 项目|浏览|最近|麟添加引用| 确定 | 取消图 11-10 浏览 DLL图 11-9添加项目引用单击【确定】按钮完成引用的添加后,就可以在页面中使用此自定义控件。若需要在页面中需要使 用此自定义控件,同样同用户控件一样需要在头部声明自定义控件,示例代码如下所示。上述代码向页面注册了自定义控件,自定义注册完毕后,就能够在页面中使用该控件。同时,在

20、工 具栏中也会呈现自定义控件,如图 11-11 所示。自定义控件呈现在工具箱之后,就可以直接拖动自定义 控件到页面,并且配置相应的属性,如图 11-12 所示。工具箱+ 4XTzP ServerContr oil J*Lk指针|S erverC ontr ol 1-标准A LabelTextEoxt URLinkButtoiiEnabledTrueEnableThemingTrueEnableViewSt ateTrueSkirJIIToolTipVisibleTrueE行为图 11-11 呈现自定义控件 图 11-12 配置自定义属性正如图 11-12 所示,开发人员能够在自定义控件中编写属

21、性,这些属性可以是共有属性也可以是用户自定义的属性,用户可以拖动自定义控件使用于自己的应用程序中并通过属性进行自定义控件的配置。用户拖动自定义页面到控件后,页面会生成相应的自定义控件的HTML代码,示例代码如下所示。上述代码就在页面中使用了自定义控件。在 ASP.NET 服务器控件中,很多的控件都是通过自定义控件来实现的,开发人员能够开发相应的自定义控件并在不同的应用中使用而无需重复开发。11.2.2 复合自定义控件单单一个简单的控件并不能实现太多的效果,在实际开发中,可能需要更多的功能,这种复杂功能 控件最常见的就是SqlDataSource控件。SqlDataSource控件是数据源控件,

22、通过SqlDataSource控件能够 配置数据源,并且实现分页、插入、删除等功能。复合自定义控件就类似这样一个功能复杂的控件。编 写复合自定义控件有以下几种方式:口创建用户控件,并使用用户控件封装的用户界面实现复合控件。口开发一个编译控件,封装一个按钮控件和文本框控件,通过重写Render方法呈现。口从现有的控件中派生出新控件。口从基本控件类之一派生来创建自定义控件。 通过编写复合控件,能够让控件开发更加灵活,控件的使用人员也能够更加方便的配置控件,例如, 重写登录控件,前台页面制作人员使用该控件时,可以为控件配置验证等功能,方便前台人员配置和使 用。如图 11-13 所示。图 11-13

23、登录控件为了实现登录控件,就必须在自定义控件中添加相应的服务器控件,在登录控件中,需要两个 TextBox来让用户输入用户名和密码,填写完成后,必须单击登录按钮实现登录事件。在类中创建TextBox 和Button代码如下所示。public class ServerControll : WebControl 创建服务器控件public TextBox NameTextBox = new TextBox();创建 TextBox 控件public TextBox PasswordTextBox = new TextBox();/创建密码控件public Button LoginButton =

24、new Button();创建 Button 控件上述代码创建了两个 TextBox 控件和一个 Button 控件。其中, NameTextBox 让用户能够输入用户 名,而 PasswordTextBox 能够让用户输入密码。当用户单击 LoginButton 时,就需要实现登录操作,在 这里就需要声明一个事件,示例代码如下所示。public event EventHandler LoginClick;/声明事件完成对控件和事件的声明,就需要进行属性的编写。在登录控件中,希望在前台开发人员在开发过 程中,能够轻易的配置属性进行使用,从而提高代码的复用性。在图 11-13所表示控件中,开发人

25、员希 望控件的使用人员能够配置背景颜色、边框粗细、内置距离、登录说明和跳转连接等。在代码中,可以 分别为这些属性进行配置,示例代码如下所示。Bindable(true)Category(Appearance)DefaultValue()Localizable(true)public string LoignBackGroundColorget return (String)ViewStateLoignBackGroundColor; set ViewStateLoignBackGroundColor = value; 设置是否支持绑定设置类别设置默认值设置是否支持本地化操作/设置背景属性获取背

26、景设置背景上述代码定义了一个属性,在属性定义前,可以对属性进行描述,如代码中 Bindable、Category 等, 这些常用的描述意义如下所示:口 Bindable:是否用于绑定。口 Category :属性或事件显示在一个设置为“按分类顺序”的模式,如果不指定,贝哙显示在杂 项中。口 DefaultValue:指定属性的默认值。图 11-14 自定义属性口 Localizable:指定属性是否本地化。 编辑相应属性,在属性配置中就能够做相应的配置,如图 11-14 所示。在代码中,将Category属性设置为Appearance,这个属性就会在【外观】选项卡中出现。配置完成 LoginB

27、ackGroundColor后,就可以为其他的属性做相应的配置,示例代码如下所示。Bindable(true)Category(Appearance)DefaultValue()Localizable(true)public string LoignBackGroundColorget return (String)ViewStateLoignBackGroundColor; set ViewStateLoignBackGroundColor = value; /登录边框粗细Bindable(true)Category(Appearance)DefaultValue()Localizable(

28、true)public string LoginBorderWidth设置是否支持绑定设置类别设置默认值设置是否支持本地化操作/设置背景颜色获取属性的值设置属性默认值设置是否支持绑定设置类别设置默认值设置是否支持本地化操作/设置边框粗细get return (String)ViewStateLoginBorderWidth; set ViewStateLoginBorderWidth = value; 登录的内置距离获取边框属性的值 设置边框默认值Bindable(true)设置是否支持绑定Category(Appearance)设置类别DefaultValue()设置默认值Localizab

29、le(true)设置是否支持本地化操作public string LoginPaddingget return (String)ViewStateLoginPadding;/设置内置距离获取内置距离的值set ViewStateLoginPadding = value; 登录说明设置默认值Bindable(true)设置是否支持绑定Category(Appearance)设置类别DefaultValue()设置默认值Localizable(true)设置是否支持本地化操作public string Logininformationget return (String)ViewState Log

30、ininformation; /设置登录信息获取登录信息的值set ViewState Logininformation = value; 登录跳转URL/设置默认登录信息值Bindable(true)设置是否支持绑定Category(Appearance)设置类别DefaultValue()设置默认值Localizable(true)设置是否支持本地化操作public string ResignURLget return (String)ViewStateResignURL; /设置登录跳转URL获取URL的值set ViewStateResignURL = value; 编写完成属性后,就

31、可以通过重写Render方法呈现不冋的HTML,设置URL默认值示例代码如下所示。protected override void RenderContents(HtmlTextWriter output) output.RenderBeginTag(HtmlTextWriterTag.Div);/编写页面输出创建Div标签output.RenderBeginTag(HtmlTextWriterTag.Tr);创建Tr标签NameTextBox.RenderControl(output);添加控件output.RenderBeginTag(HtmlTextWriterTag.Td);创建Td标签

32、output.RenderBeginTag(HtmlTextWriterTag.Br);创建Br标签output.RenderBeginTag(HtmlTextWriterTag.Tr);创建Tr标签PasswordTextBox.RenderControl(output);添加控件output.RenderBeginTag(HtmlTextWriterTag.Td);输出Td标签上述代码使用了 HtmlTextWriter类,HtmlTextWriter类能够动态的创建HTML标签。上述代码中使 用了 HtmlTextWriter类的对象的RenderBeginTag方法创建相应的HTML标

33、记。重写Render方法以呈现 不同的 HTML 后,用户就能够看到登录界面,当用户单击【登录】按钮后,应该执行登录事件,这里应该是个事件冒泡,编写按钮提交事件代码如下所示。public void Submit_Click(object sender, EventArgs e)EventArgs arg = new EventArgs();编写按钮事件方法if (LoginClick != null)判断事件冒泡是否为空LoginClick(LoginButton, arg);触发事件 编写按钮事件后,整个自定义控件就制作完毕了。相比之下,自定义控件的制作并不是那么难,反 而自定义控件能够实现

34、更多的效果,并呈现不同的样式,并且允许界面开发人员能够通过相应的配置呈 现不同的样式。11.3 用户控件和自定义控件的异同对比用户控件和自定义控件,很多人或认为用户控件更加容易开发,而自定义控件的门槛较高,不 方便应用程序的开发。其实不然,用户控件更适合创建内部的应用程序特定的控件,例如用户登录控件 会在该项目中经常使用,所以创建用户控件能够极快的提高应用程序开发。而自定义控件通常应用到更 适合创建通用的可再分发的控件,例如常用的开源HTML编辑器Fckeditor就可以说是一个优秀的自定 义控件。通常用户控件在一个项目中经常使用,而自定义控件用来在通用的程序中使用,当网站应用程序开 发中,导

35、航控件如果用用户控件实现,是非常方便的。但是通过自定义控件实现,可能并不能适合所有 的应用场合,当需要适应其他场合时,可能需要重新开发和编译。具体的讲,用户控件和自定义控件可 以从以下几个方面来说明它们的区别:1使用率 在选择使用用户控件和自定义控件时,可以首先考虑使用率。如果开发的应用程序只是需要小范围 的使用,则可以考虑用户控件,而如果开发的自定义控件能够在大部分的应用程序中被应用,则可以考 虑自定义控件。2创建技术 用户控件和自定义控件的创建技术是不相同的,并且用户控件和自定义控件创建的难度也不相同, 用户控件是以.ascx形式声明并创建的,开发过程也比较简单,并且有设计器提供设计支持,

36、而自定义控 件是从 System.Web.UI.Control 派生而来的,开发过程稍微复杂,也没有设计器提供设计支持。3生成方式用户控件和自定义控件生成的方式不同,用户控件是以.ascx的形式呈现,而自定义控件是以DLL 的形式呈现,通过添加引用,自定义控件能够在【工具箱】中显式,能够像服务器控件一样拖动到页面, 并且能够通过编程开发增加自定义属性。而用户控件无法在工具箱显示,也不能够像自定义控件那样增 加自定义属性。4性能 虽然用户控件和自定义控件编写的过程不同,也遵循不同的创建模型,但是用户控件和自定义控件 都是从 System.Web.UI.Control 直接或间接的派生的,在性能上

37、没有很大的差别,主要是因为当用户控件 在页面中第一次使用时,将作为普通的服务器控件被解析并编译进配件,第二次使用时,就和其他编译 型控件一样。11.4 用户控件示例在用户控件一节中,介绍了如何创建和使用用户控件。创建用户控件能够为应用程序开发起到非常 好的作用,并且提高代码的复用性,ASP.NET允许开发人员创建用户控件和自定义控件,并在Visual Studio 2008 中为开发人员提供了原生的开发环境,本节将一步步的进行用户控件的开发。11.4.1 ASP.NET 登录控件在应用程序开发过程中,登录是必不可少的,例如当用户初次访问该页面时,可以选择登录,也可 以选择注册,但是需要有一个登

38、录框作为指导,否则用户无法登录到该网站。当用户再次回访时,登录 控件也能够让用户快速的进行登录访问。作为登录控件,不仅需要对用户的身份进行判断,还需要对用户输入的字符串进行判断,例如,“” 号是 SQL 数据库中的关键字,如果非法用户利用了 SQL 关键字中的“”号进行登录,则会出现错误, 系统会提示异常,暴露数据库,这样是非常不安全的,所以登录控件还需要对输入的字符串进行判断, 判断完成后,如果不是非法用户,则再继续对身份进行验证。11.4.2 ASP.NET 登录控件的开发ASP.NET 登录控件开发起来并不难,主要是需要理清几个基本概念:口用户是否已经注册过,注册过就可以直接登录。口用户

39、如果没注册过,则需要跳转到注册页面。口如果用户输入的是非法字符或是没有任何输入,则先不对身份进行验证,先对输入框进行验证。口用户的验证是通过用户名和密码一起验证的。当理清了以上思路之后,就能够进行 ASP.NET 登录控件的开发了。首先,在现有项目中添加一个 新项并在弹出窗口中选择【Web用户控件】项目,如图11-15所示。图 11-15 添加新项创建一个用户控件,并命名为 LoginForm.ascx ,方便在今后的开发中进行识别。注意:良好的页面命名习惯也是一种良好的开发习惯,当页面增多时,可以通过页面命名的含义快 速的寻找到相应的页面,当用户控件增多时,良好的命名也可以帮助快速寻找到相应

40、的控件。当创建完成一个 LoginForm 的用户控件后,就需要对用户控件进行页面布局,布局步骤如下所示。口拖动两个TextBox, 个作为用户名输入框,一个作为密码输入框。口 将密码输入框的TextMode属性设置为Password。口 拖动一个Button按钮,当用户单击Button按钮时,进行登录操作。口 拖动一个LinkButton按钮,当用户单击LinkButton按钮时,跳转到登录页面。当大概理清了控件的布局后,就可以针对控件的功能进行布局,如图 11-16 所示。图 11-16 登录框控件初步布局初步的对登录控件进行布局,发现这样的布局并不美观。对于访问者而言,看到一个并不美观的

41、登 录控件,很可能就没有想要登录或注册的想法。一个好的用户登录控件的布局,能够提升访问者的兴趣, 于是就需要对控件进行布局更改,这里就需要借助于表格等布局工具,单击菜单栏中的【表】选项,单 击下拉菜单中的【插入表】选项,系统会弹出默认的表格窗口。在这里,需要3 行2 列进行布局,可以 在对话框中选择行数 3、列数 2 进行配置,如图11-17和图 11-18所示。图 11-17 表格默认值图 11-18 配置表格属性技巧:配置表格属性后,可以勾选“设为新表格的默认值”,当下一次创建表格时,就无需再次配 置,当大量的需要同样格式的表格时,可优先考虑此方案。在编写好表格后,只需要拖动表格进行用户控

42、件的布局即可,布局后HTML代码如下所示。.stylelwidth: 100%; font-size:12px;用户名:密码  : 还没有注册?上述代码所呈现的样式如图11-19所示。图 11-19 更改样式后的登录控件 当登录控件的样式初步制作完毕后,就需要增加一些验证控件,并编写登录框的事件。增加验证控 件和增加单击事件后的HTML代码如下所示。.stylelwidth: 100%; font-size:12px;用户名:asp:RequiredFieldValidator ID=RequiredFieldValidato门runat=server ControlToValida

43、te=TextBox1ErrorMessage=用户名不能为空密码  : asp:RequiredFieldValidator ID=RequiredFieldValidator2 runat=server ControlToValidate=TextBox2ErrorMessage=密码不能为空 还没有注册? HTML代码确定后,可以编写登录事件,示例代码如下所示。protected void Button1_Click(object sender, EventArgs e)if (T extBox1.Text != test & TextBox2.Text != test)如果用

44、户名不匹配 Label1.Text =登录失败;/提示登录失败else Label1.Text =登录成功;/否则登录成功 上述代码判断如果用户名如果不等于test并且密码不等于test的话,则提示登录失败,否则登录成 功。技巧:在这里可以使用ADO.NET对数据库中的用户表进行操作,通过SELECT语句查询相应的用 户,如果查询出的值返回值大于 0,则说明有这个用户,否则没有这个用户,判断“登录失败”。11.4.3 ASP.NET 登录控件的使用编写完成 ASP.NET 登录控件后,就可以使用登录控件进行登录页面的制作,在使用登录控件前, 必须通过使用Register关键字向页面注册该用户控

45、件,示例代码如下所示。上述代码向页面注册了该控件。当页面被执行时,会通过TagPrefix以及TagName判断ASP.NET 标签,并解析成相应的 ASP.NET 控件以呈现给页面,然后页面呈现给用户。当需要使用该控件时,只 需要在页面中编写引用代码,示例代码如下所示。 上述代码就在相应的位置显示了用户控件,如图 11-20所示。图 11-20 使用用户控件对使用用户控件的页面进行页面布局,不会影响到用户控件的布局,对用户控件的布局,同样不会 影响到页面的布局。相反的是,使用用户控件的页面无需考虑事件,也无需在该页面编写任何C#代码, 这让页面变得非常的简洁,而事件的操作可以交付给用户控件,

46、示例代码如下所示。无标题页 从上述代码可以看出,使用用户控件,并没有任何冗余的代码,这让页面代码显得非常的整洁和整 齐。虽然从表面看上去只有HTML代码,但是并没有影响页面中程序的实现。运行后如图11-21所示。图 11-21 使用用户控件虽然在页面中并没有实现控件的布局和事件的处理,但是在页面依旧可以呈现相应的控件布局和事 件处理。自定义控件的好处就在于能够将复杂的样式或事件存储在一个控件中,以便在不同的页面中进 行使用。11.5 自定义控件实例虽然用户控件能够尽快的上手并运用在开发中,但是自定义控件的编写能够实现更多的效果。如分 页效果在大部分的数据索引中,都需要使用分页。如果存在这么一个

47、分页控件,只需要指定需要分页的 表,那么可以自动分页,就能够更加方便应用程序开发了。11.5.1 ASP.NET 分页控件ASP.NET 能够编写自定义控件,并将自定义控件编译为 DLL 文件以保证在任何其他的项目中能够 使用自定义控件。在 ASP.NET Web 应用程序开发中,对于数据的索引,通常情况下是不可能全部将数 据索引到一个页面的,所以在显示数据时,就需要进行分页操作。当用户打开一个页面时,如果将全部的数据一起显示在页面,不仅页面臃肿难看,并且用户很难找 到自己需要的信息。对于页面数据的整理和索引,能够让用户更加方便的找到自己需要的信息。不仅如 此,如果一次全部的将数据呈现到 HT

48、ML 页面,势必会造成 HTML 页面数据的冗长,在运行页面时, 也会增加服务器的压力,让 Web 应用程序变得非常的缓慢。1属性设置使用 ASP.NET 分页控件,能够让数据分开显示,让用户能够自行选择,并且能够自行选择页码, 查看相应的数据,创建一个 MyPager 自定义控件,用来执行分页操作,如图 11-22 所示。图 11-22 创建 MyPager 控件创建完成后,就需要确定一些基本的属性,这些属性能够方便控件的使用者进行相应的配置,能够 尽快的使用控件并完成编程目的。对于分页控件,通常需要确定的属性如下所示:口 PageSize:用户希望一个页面呈现多少数据。口 Server :

49、数据库服务器的地址。口 Database:数据库服务器的数据库。口 Pwd:数据库服务器有效的密码。口 Uid:数据库服务器有效的用户名。口 Table:需要执行分页的表,如果不指定SqlCommand,则自动生成语句。口 SqlCommand:如果不指定表,则执行SqlCommand。口 IndexPage : 一开始的索引页面。口 PageName:当前页面的名称,用于跳转。2数据属性配置在基本确定了以上属性后,就可以编写相应代码,首先需要为数据库连接和数据库的 SQL 语句的功能实现编写相应的属性,示例代码如下所示。DefaultProperty(Text)ToolboxData() p

50、ublic class MyPager : WebControlBindable(true)Category(Appearance)DefaultValue()Localizable(true)public string TextgetString s = (String)ViewStateText;return (s = null) ? + this.ID + : s);set默认属性/控件呈现代码设置是否支持绑定设置类别设置默认值设置是否支持本地化操作/Text文本属性获取属性获取文本属性/设置文本属性默认值设置属性ViewStateText = value;Bindable(true)Category(Data)DefaultValue(IO)Localizable(tr

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!