【asp源码栏目提醒】:以下是网学会员为您推荐的asp源码-基于Asp.net的代码分离技术的研究 - 会议论文,希望本篇文章对您学习有所帮助。
基于Asp.net的代码分离技术的研究幸 叶小岭,王永恒 (南京信息工程大学信息与控制学院,南京210044) 訾燕 (南京大学继续教育学院江苏南京210093)摘要t通过代码分离技术三种方法的介绍和比较,解决了现存的代码混乱问题。
后台代码 (Code Behind)、用户控件(User Contr01)和自定义控件(Custom Contr01)就是能够实现代码分离的三种方法,能够真正使逻辑代码与页面内容相分离。
关键字:后台代码:用户控件:自定义控件:代码分离:逻辑代码0引言 ASENET技术是由微软公司的.NET技术细化而来的,是最新的Web Forms技术,是为了解决Asp的局限性,最大限度的提高程序运行速度和安全性,可移植性和可维护性.是微软公司流行的动态Web编程技术,它采用效率较高的、面向对象的方法来创建动态Web应用程序Ⅲ.而且ASENET具有很好的可扩展性与可定制性,在数据处理方面更是引入了许多新技术,正是这些具有革新意义的新特性,让ASP.NET远远超越了ASP,同时也提供给web开发人员更好的灵活性,有效缩短了web应用程序的开发周期珏1。
代码分离是Asp.net的一个超越,也是传统Asp所不具有的。
在ASEnet出现之前,ASP,PHP等也实现了代码分离,就是在任意一个位置插入一段代码来实现特定的功能,这种方法表面上看起来很简单.但实际上并没有真正做到程序代码和表现内容程序的分离,程序代码与HTML代码依然混杂在一起.尤其当程序功能变得异常复杂时,比如程序实现的功能是通过数据库进行数据的存取、显示等操作,此时把所有的代码放到同一个页面中,程序的可读性就会变得非常差。
本文就是针对此局限性,通过后台代码(Code Behind)、用户控件(User Contr01)和自定义控件(Custom Contr01)三种方法对基于ASENET的代码分离技术进行了研究,真正做到了程序代码和页面结构的分离,设计人员和开发人员在Web开发中承担的任务完全不同.应用程序可读性好。
便于升级和维护,具有良好的可跨展性.u11后台代码(Code Behind) 自从微软的ASRNET问世以来,后台代码(Code Behind)一直是一个热门问题。
用它可以使页面逻辑代码更加清晰地与其页面内容进行分离,基本的Code Behind允许一个表达文件和一个代码文件来创建一个Asp.net页面,表达文件通常为.aspx文件或是.asCX文件,而代码文件通常是.vb文件或是.CS文件。
用这种风格编写的页面允许把内容和代码完全分离,而且可以有效的保护代码H1。
下面的程序是一个包含了头部(Header)、中间部分(Login)和脚部(Footer)三部分的页面,两段程序分别以文件codebchind.aspx和codebchind.vb进行保存。
页面表现内容部分(codebchind.aspx):<%@page inherits=”mycontrols”src=”codebchind.vb”%>……<
asp:Panel id=”Header”runat=”server。
’>……</
asp:Panel><
asp:Panel id=“Login”runat=”server’’>……<
asp:Button id-”btnbutton”Text=”登陆”OnClick--”button_.elick”runat=“f汜l’VCl”“/> 。
……</
asp:Panel><
asp:Panel id=’’Footer”runat=。
’server’。
>......</
asp:Panel>...... Asp.net程序中,Page指令一般是设定本程序使用的是什么语言(使用Language属性),而在本程序中并没有出现language属性,而是出现了两个新的Page属性:Sre与Inhefiu。
Src属性设定事件处理代码的真正位置;Inherits属性则设定需要引入的类名。
10后台代码部分(codebehind.vb):imports systemimports system.webimports system.web.ui事件处理是定义在一个codebehind类中的,此类必须继承page类。
Public class mycontrols inherits page声明codebchind.aspx中出现的控件…… 程序执行codebchind.aspx包含的页面内容时,就去执行后台代码(eodebihind.vb)中子程序,后台代码程序的顶部,需要导入命名空间:system,system.web,system.web.ui。
通常在构建一个控件时至少要导入这三个命名空间,这些命名空间包含空间所使用的基本类,例如基本数据类型以及control和webcontrol的基类。
后台代码codebehind.vb是从page类继承而来的(inherits page),而用于表现内容的页面又是从后台代码文件继承而来的,因此存在着继承阶层的关系,page类的属性、方法和事件在后台代码文件中是可用的,同样后台代码文件中的所有属性、方法和事件也可以用于表现文件中。
后台代码可以不需要编译,当发生请求时,后台代码文件中包含的类文件就会被自动编译。
但在使用后台代码时,必须要声明表现文件内使用的每一个控件¨’。
2用户控件(User Contr01) Code Behind技术真正实现了代码与内容的分离,比以前的组件技术前进了好多,但它 的缺陷也是显而易见的,如果页面内容很多,则Html的显示代码仍然会占用很大的空间, 程序的可读性依然是很差的。
.NET框架为用户提供了一种新的技术——用户控件,只需通 过继承即可应用预先存在的用户控件,预先存在的W’mdows窗体控件等,甚至可以自己创 建控件以备以后使用嘲。
用户控件就是用作服务器控件的Web窗体页面,不仅可以实现代码分离,还可以轻松 地在多个页面上重用同样的内容和编程逻辑(重用性)。
在多个页面上使用用户控件显示同 样内容的优点是:可以在需要修改的时候轻松地更新页面的内容。
用户控件我们可以将其视为不用编译的Server控件。
将后台代码中的codebchind.aspx 程序中的每个Panel整体看成为一个控件,因此codebehind.aspx的主体部分通过使用用户 控件便可以减少为只有三行: <%@Register TagPrefix=”mycontrolS”TagName=”Header”Sre=”Header.ascx”%>. <%@Register TagPrefix=”mycontrols”TagName=”Login”Sre=”Login.aSCX”%> <%@Register TagPrefix=”mycontrols”TagNamc=”Footer”Sre=”Footer.asex”%> <mycontrols:Header id--”MyHeader”runat=”server”,> <mycontrols:Login id=”MyLogin”rtlnat=”server”,> <mycontrols:Footer id=”MyFooter”runat=”server”伶 执行这个程序,其运行结果与使用Code Behind技术的结果是一样的,但是现在的页 面内容代码和逻辑代码就更加容易区分了。
其中: <rnycontrols:Header id=”MyHeader“runat=”server”6 <mycontrols:Logon id=”MyLogin”l’tlnat=”server”,≥ <rnycontrols:Footer id=”MyFooter”runat=”server”房 这三行代码便是三个用户控件,很明显的把页面分成了三部分;Header.ascx(Header用户控件)、Login.ascx(Login用户控件)和Footer.ascx(Footer用户控件)的具体内容将完全被移到另一个文件编写。
可以将这些常用的功能制作成为固定的用户控件,当需要时,就可以把它包含在其它任何Asp.net页面中了。
如果要在一个.aspx页面当中使用这些新的用户控件,必须首先对Register指令进行初始化。
在使用用户控件之前,必须先在页面上注册它,控件注册之后,就可以像放置普通的服务器控件那样,将用户控件放置在Web窗体中。
当使用这个标签的时候,必须定义标签前缀、标签名字以及指定用户控件所在的源文件。
定义如下:<%@Register TagPrefix=”Acme”TagName=”Message”Src=”Contr01.aSCX“%> 用户控件通过Register指令包含在Web窗体页中,而网页调用用户控件的基本方式如下:<TagPrefix:TagName runat=”server”,> 用户控件不仅可以实现代码的分离,而且还可以用来实现代码的重用性,将逻辑代码放到一个以.aSCX的文件中,便成了一个用户控件.当需要时可以直接拿来使用,并且只需要较小的修改就可以使得代码正常的工作了。
3自定义控件(Custom Contr01) 用户控件虽然有很大的优势,但由于每个用户控件都是一个ascx文件,当这些控件很多时,就显得很乱,因此可以将一些比较相似的控件集合起来,在程序中只需要引用一次也可实现同样的效果,即:将多个类(class)导入同一个命名空间(narnespace)。
自定义控件(Cusmm Contr01)是对系统本身控件的组合,是用户创建的任何控件,它可以从UscrControl类,Control类,或现有的Windows窗体控件中派生的。
自定义控件(UserContr01)通过它的图形界面提供前端功能,通过它的方法,属性和事件提供后端功能∞】。
用户开发CustomControl时,需定义一个直接或间接从Control派生的类并重写它的Render方法,System.Web.UI.Control与System.Web.UI.Web.C∞缸Dls.WebCon仃ol两个类是服务器控件的基类。
Control类定义了所有服务器控件共有的属性、方法和事件。
其中包括控制控件执行生命周期的方法和事件,以及ID、UniqueID、Parent、ViewState和ControlS(子控件集合)等属性。
Control没有用户界面四特定的任何功能。
如果创作的控件没有提供UI,或者组合了其它呈现其自己的Ⅵ的控件,则从Control派生。
WebControl类是从Control派生的,并为Ⅵ功能提供附加的属性和方法。
这些属性包括ForeColor、BackColor、Font、BorderStyle、Height和Width。
WebControl是ASENET中Web服务器控件系列的基类。
如果控件呈现UI,则从WebControl派生。
现在就上面的程序创建一个自定义控件login.vb:import systemimport system.webimport system.web.uiimport system.web.ui.webcontrolsnamespace mycontrols首先是Header:public class Header inherits controlimplements INamingContainer......其次是Login:pubfie class Login inherits controlimplements INamingContainerpubfic property username as swing......end property 12public property password as string ......end property最后是Footer:pubic class Footer inhefim controlimplements INamingContainer......protected overrides sub createchildcontrols()……//add Usemameme.controls.add(new literalcontrol(”<b>username:</b>”))me.controls.add(new textbox)me.controls.add(new literalcontrol(”<p>”))//add passworddim txtpass as new textboxme.controls.add(new literalcontrol(”<b>password:</b>”)) txtpass.textmode=textboxmode.passwordme.controls。
add(new textbox)me.controls.add(new literalcontrol(”<p>”))//add submit buttonbmbuRon.text=”login!”me,controls.add(btnbutton)me.controls.add(new literralcontrol(”</div>”)) 这是一个基于现有的控件创建的新的控件,也就是创建组合控件,在此程序中可以看 到,在mycontrols命名空间中包含三个类(Header,Login和Footer),这三个类创建了三个 主体部分。
这个程序清单的大部分代码是包含在CrcatChildControl子程序,这个子程序在login控件的Controls集合中添加了用户名textbox,密码textbox和button控件。
(1)这个控件创建了一个名为mycontrols的命名空间,可以创建任意名称的命名空间, 在Asp.net中初始化该控件时,需要引用该命名空间。
(2)在这个程序中,该控件实现了玳amingContainer接口,这个接口在该页面的控件 阶层内创建了一个新的m命名空间,可以防止在多次初始化该login控件时发生冲突,在 构建该组合控件时总是要实现该接口。
(3)在使用自定义控件时,首先需要在默认的命令行编译它: Vbc/t:library/r:system.dU,system.web.dll:login.vb。
编译后生成新文件login.dll(后缀是.dU), 这就是编译后的控件。
在使用此控件前,需要先拷贝到Asp.net应用程序的/bin目录下, Asp.net页面才能找到该文件,如/bin不存在,则需要在Asp.net应用程序的根目录下创建。
主体codebchind.aspx的程序内容: <%@Register TagPrefix=”mycontrols”Namespace=”mycontrols”Assembly=”login”%> <mycontrols:Header id=”MyHeader”runat=”server”/> <myeontrols:Login id=”MyLogin”runat=”server”,> <mycontrols:Footer id=”MyFooter”runat=”server”侈…… 引用自定义的控件后, <%@Register TagPrefix=”mycontrols”TagName=”Header”St-e=”Header.ascx”%> <%@Register TagPrefix=”mycontrols”TagName=”Login”Sre=”Login.asCX”%> <%@Register TagPrefix=”mycontrols”TagName=”Footer”Src=”Footer.ascx”%>则只需用 <%@Register TagPrefix=”mycontrols”Namespace=”mycontrols”Assembly=”login”%>代替 13即可,其中现成的Header控件、Login控件和Footer控件完全包含在自己创建的控件中。
4总结 代码分离技术功能十分强大,制作又相对灵活,使得编写功能强大的Web程序成为了一件相对容易的事情,通过代码分离技术的研究和比较,后台代码和用户控件相对来说比较简单,它们是不需要编译的,可以结合使用;如果要保护代码,自定义控件才是最佳的选择,提高了程序的安全性。
参考文献;〔1〕夏阳、张强、陈小林.基于ASENET的电子商务网站的开发与设计〔J〕.计算机工程与设 计,2004.25(11):2028〔2〕吴晨,孙少波,叶莞.ASENET数据库项目案例导航〔M〕.北京:清华大学出版社, 2004.12:1.〔3〕王晓鹏.基于B/S结构和ASENET技术的Web应用研究及实现〔J〕.贵州工业大学学报 (自然科学版).2005.34(4):59-60.〔4〕王志伟,宋晓朋等著.突破ASP.NET编程实例五十讲〔M〕.北京:中国水利水电出版社。
2002.5:186—200.〔5〕寇伟.论ASENet中程序构架与程序代码的分离〔J〕.计算机与网络.2006.10:167.〔6〕(美)沃尔森(Walther,S.) ASRNET解密〔M〕.汤涛译.北京:中国电力出版 社。
2004,203”---204.论文作者简介- 叶小岭(1964一),南京信息工程大学信息与控制学院副教授,硕士生导师,主要研究方向:系统优化与控制、智能仪器仪表、计算机应用 王永恒(1977一),南京信息工程大学信息与控制学院,硕士研究生,主要研究方向:计算机应用。
訾燕(1968-),南京大学成人继续教育学院,讲师 Research of code separation technique based on Asp.Net Ye Xiao-ling,Wang Yong·heng (Dept.of Information and Control of NanJing University of Information Science&Technology, Nanjing 2 10044,China) ZiYan (Nanjing University Continuing Edueatin Sch001.Nanjing 210093,China)Abstract:This paper solves the question of code mixed through introducing and analyzing threemethods about code separation technique.Code Behind.User Control and Custom Control arethe three methods to early on the code separation,and which Can separate the logical code fromthe page code.Key words:code behind;Usel”control;custom control;oxle separation;login code 14
上一篇:
ASP制作流程图
下一篇:
经典英语句子摘录