您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 交通运输 > 第一章WEB页面简介
第一章WEB页面简介2.1.1WEBFORM表单,英文单词是Form,学习过VB的朋友一定不会陌生。在MS.NET架构里,Form是一个经常使用到的词汇。比如:编写Windows应用时会提到WindowsForm,编写Web应用时会提到WebForm。WindowsForm可以看作一个Windows窗体,这和在VB里面一样。而WebForm则代表了一个一个的Web页面。总的看来,Form就像是一个容纳各种控件的容器,各种控件都必须直接或者间接的和它有依存关系。Form在这里译作WEB表单似乎有些不妥。表单这个词,在WEB程序员看来,总是和HTML里面的Form相混淆。WEB表单似乎翻译成WEB页面更加妥当一些。大家还记得VB里面的Form实际上就是一个对象吧,它可以有自己的属性、方法、事件等等。WEB表单,或者说WEB页面,实际上是一个对象(Object)。MS.NET架构里面一个比较重要的概念就是对象:所有的控件都是对象,甚至数据类型都成了对象;每种数据类型都有自己特有的属性和方法。我们在后面的编程中将可以体会到。WEBFORM的后缀名是ASPX。当一个浏览器第一次请求一个ASPX文件时,WEBFORM页面将被CLR(commonlanguageruntime)编译器编译。此后,当再有用户访问此页面的时候,由于ASPX页面已经被编译过,所以,CLR会直接执行编译过的代码。这和ASP的情况完全不同。ASP只支持VBScript和JavaScript这样的解释性的脚本语言。所以ASP页面是解释执行的。当用户发出请求后,无论是第一次,还是第一千次,ASP的页面都将被动态解释执行。而asp.net支持可编译的语言,包括VB.NET、C#、Jscript.NET等。所以,asp.net是一次编译多次执行。为了简化程序员的工作,ASPX页面不需要手工编译,而是在页面被调用的时候,由CLR自行决定是否编译。一般来说,下面两种情况下,ASPX会被重新编译:1.ASPX页面第一次被浏览器请求;2.ASPX被改写由于ASPX页面可以被编译,所以ASPX页面具有组件一样的性能。这就使得ASPX页面至少比同样功能的ASP页面快250%!下面我们来看一下简单的WEB页面。2.1.2我的第一个Page把下面的代码拷贝到myfirstpage.aspx文件中,然后从浏览器访问这个文件:!--源文件:form\web页面简介\myfirstpage.aspx--formaction=myfirstpage.aspxmethod=post姓名:inputid=nametype=text所在城市:selectid=citysize=1option北京/optionoption上海/optionoption重庆/option/selectinputtype=submitvalue=查询/form你可能觉得这个页面太简单了,用HTML就可以完成。是的!微软建议你将所有的文件哪怕是纯HTML文件都保存为ASPX文件后缀,这样可以加快页面的访问效率!不仅仅是在asp.net环境中,在IIS5.0以后的ASP3.0就已经支持这个特性了。由于我们没有对表单提交做任何响应,所以,当你按下查询按钮,页面的内容没有什么改变。下面我们将逐步使用asp.net的思考方式,来完成我们的页面。2.1.3WEB页面处理过程这一节我们将深入到asp.net内部,看看页面是怎样被处理的。和所有的服务器端进程一样,当ASPX页面被客户端请求时,页面的服务器端代码被执行,执行结果被送回到浏览器端。这一点和ASP并没有太大的不同。但是,asp.net的架构为我们做了许多别的事情。比如,它会自动处理浏览器的表单提交,把各个表单域的输入值变成对象的属性,使得我们可以像访问对象属性那样来访问客户的输入。它还把客户的点击映射到不同的服务器端事件。了解WEB页面的处理过程很重要。这样你可以仔细地优化你的代码,提高代码的效率。2.1.3.1页面的一次往返处理用户对ServerControl的一次操作,就可能引起页面的一次往返处理:页面被提交到服务器端,执行响应的事件处理代码,重建页面,然后返回到客户端。正因为每个Control都可能引发一次页面的服务器端事件,所以,asp.net尽量减少了控件的事件类型。很多组件都只有OnClick事件。特别的,asp.net不支持服务器端的OnMouseOver事件。因为OnMouseOver事件发生得非常频繁。所以,支持服务器端的OnMouseOver事件是非常不现实的。2.1.3.2页面重建每一次页面被请求,或者页面事件被提交到服务器,asp.net运行环境将执行必要的代码,重建整个页面,把结果页面送到浏览器,然后抛弃页面的变量、控件的状态和属性等等页面信息。当下一次页面被处理时,asp.net运行环境是不知道它的上一次执行情况的。在这个意义上,ASPX页面是没有状态的。这也是HTTP协议的特点(为了加速页面的访问,在asp.net页面里面可以使用缓存机制,也就是保存页面的执行结果,下一次页面被请求时,直接送回上一次的执行结果。)。在ASP中,当页面被提交到服务器端时,只有那些用户输入的值被传递到服务器。其他的比如组件的属性、变量的值,是不会传递的。所以服务器无法了解组件的进一步的信息。在asp.net中,页面对象的属性、页面控件的属性被称为viewstate(页面状态)。页面状态在asp.net中被受到特别关照。请看服务器端(page1.aspx)的代码:!--源文件:form\web页面简介\page1.aspx--HTMLBODYSCRIPTlanguage=VBrunat=serverSubShowValues(SenderAsObject,ArgsAsEventArgs)divResult.innerText=Youselected'_&selOpSys.value&'formachine'_&txtName.value&'.EndSub/SCRIPTDIVid=divResultrunat=server/DIVFORMrunat=server机器名:INPUTtype=textid=txtNamerunat=serverP/操作系统:selectid=selOpSyssize=1runat=serverOPTIONWindows95/OPTIONOPTIONWindows98/OPTIONOPTIONWindowsNT4/OPTIONOPTIONWindows2000/OPTION/SELECTP/INPUTtype=submitvalue=Submitrunat=serveronserverclick=ShowValues/FORM/BODY/HTML运行后将自动被解释成客户端代码,如下:HTMLBODYYouselected'Windows98'formachine'iceberg'.FORMname=ctrl0method=postaction=pageone.aspxid=ctrl0INPUTtype=hiddenname=__VIEWSTATEvalue=a0z1741688109__x机器名:INPUTtype=textid=txtNamename=txtNamevalue=tizzyP/操作系统:SELECTid=selOpSyssize=1name=selOpSysOPTIONvalue=Windows95Windows95/OPTIONOPTIONselectedvalue=Windows98Windows98/OPTIONOPTIONvalue=WindowsNT4WindowsNT4/OPTIONOPTIONvalue=Windows2000Windows2000/OPTION/SELECTP/INPUTtype=submitvalue=Submit/FORM/BODY/HTML对于上面的代码,服务器端控件能在服务器端脚本中被自由运用。如果我们用传统的ASP代码实现上述的功能的话:IfLen(Request.Form(selOpSys))0ThenStrOpSys=Request.Form(selOpSys)StrName=Request.Form(txtName)Response.Write(Youselected'&strOpSys_&'formachine'&strName&'.)EndIf如果我们用asp.net的话,程序代码如下:IfLen(selOpSys.value)0ThenResponse.Write(Youselected'&selOpSys.value_&'formachine'&txtName.value&'.)EndIf通过上面例子不难看出:asp.net页面具有组件方式的方便性和灵活性。请注意:asp.net通过把页面的状态封装到一个隐藏的输入域,从而可以在不同的页面之间实现传递页面的状态。另外,asp.net也支持应用程序一级的状态管理。这个特性在ASP中就已经实现。2.1.3.3页面处理内部过程我们来看看页面处理的内部过程。下面的过程是依次进行的:2.1.3.3.1Page_load首先,页面的状态被恢复,然后触发Page_OnLoad事件。在这个过程中,你可以读取或者重置页面的属性和控件的属性,根据IsPostBack属性判定页面是否为第一次被请求,执行数据绑定,等等。现在我们通过一个具体的例子,来详细讲述Page_load事件:我们所做的这个例子关于用户登录的。我们先来看page.aspx的代码:!--源文件:form\web页面简介\page.aspx--%@RegisterTagPrefix=AcmeTagName=LoginSrc=page.ascx%htmltitle登录演示/titlescriptlanguage=VBrunat=serverSubPage_Load(SenderAsObject,EAsEventArgs)If(Page.IsPostBack)MyLabel.Text&=用户名:&MyLogin.UserId&brMyLabel.Text&=密码:&MyLogin.Password&brEndIfEndSub/scriptbodystyle=font:10ptverdanacenterh3登录/h3/centerformrunat=serverAcme:Loginid=MyLoginUserId=Password=BackColor=beigerunat=server//formasp:Labelid=MyLabelrunat=server//body/html在这个文件中,我们使用了Page_OnLoad事件的IsPostBack属性,用来显示用户登录时的用户名和密码。在来看一下page.ascx文件:!--源文件:form\web页面简介\page.ascx--scriptlanguage=VBrunat=serverPublicBackColorAsString=whitePublicPropertyUserIdAsStringGetReturnUserName.TextEndGetSetUserName.Text=ValueEndSetEndPropertyPublicPropertyPasswordAsStringGetReturnPass.TextEndGetSetPass.Text=ValueEndSetEndProperty/sc
本文标题:第一章WEB页面简介
链接地址:https://www.777doc.com/doc-2201956 .html