ASP.net的总结(一:理论理解)

概述

       这篇博客和之前博客有些重复的部分,如果要详细了解相应部分内容,可以到相应连接博客中查看。本篇博客主要介绍了什么是ASP.net,ASP.net在浏览器和服务器端的交互过程,ASP.net服务器端控件和客户端控件的区别。可能解释的不太清楚,如果要是对其中内容有什么疑问的话,可以在评论中告知,咱们一起讨论讨论!


万维网和HTML

       在这里我们不讲为什么有了万维网,以及万维网给我们带来的好处,我们只讲它的实现,万维网万维网就是资源共享网,不是物理网络,是建立在物理网络之前的网络,是一个虚拟的网络,是一个通过软件之间通话(http)传递数据的网络,ok,这里说到数据,那么数据在传递的过程中应该用那种码制表示呢?之前用的是ASCII码表示,现在不太清楚(可能为unicode码),知道的希望能在评论中告知,其实,我们也不用具体知道他的具体编码,因为我们现在浏览器用的就是那种编码和解码机制,要不然,我们就不能够看到真正的数据了,好了具体数据的事我们可以告一段落了,接下了我们看看这个,具体数据是怎么显示在浏览器中的呢?是横着还是竖着,是蓝色还是红色,等等,计算机不知道,因为计算机传送的那些具体数据的编码只代表了具体值,对于其形,一点也没涉及,那么如何才能解决这个问题呢?我们可以事前规定一些特殊的字符,给其一定的意义,这样我们写具体数据,给其定形的时候,我们就用这些特殊的字符,浏览器那块,在显示数据的时候,有相应解释这些特殊字符的程序解释后再显示,这样就哦了。

       我们把上面的特殊字符称为HTML标签(含相应的属性),HTML文档就是这些标签和具体数据混合在一起的文件,当然,发展到现在,这种数据值和数据形混合在一起已经不适用了,数据的形已经被CSS给替换了,至于关于CSS的问题现在不多说,不是本篇博客的重点。具体关于HTML的学习,你可以参考这篇博客:HTML基础知识总结。关于万维网等知识,你可以参考这篇博客:WWW HTTP URL

       

客户端脚本

       了解了HTML之后,我们接下来说一下客户端脚本。客户端脚本可以减轻服务器端的负担(通过客户端脚本在客户端(浏览器)上验证输入数据的正确性),客户端脚本可以使界面更加的友好(可以在不和服务端通信的情况下出现动态的页面效果),等等,客户端脚本给我们带来了很多的好处,可是,它到底因为什么问题才产生的呢?要知道任何一个新事物的产生都不是无缘无故的,“不是锦上添花,就是雪中送炭”,那么,客户端脚本到底是因为什么而产生的呢?这个我不太清楚,我的推测就是为了减轻服务器端的负担,也就是说,有了服务器端脚本后,才有了客户端脚本。可能这个说法不对,还望知道的人能在评论中给予答案。其实,讨论上面这个是想说一点,我们不要把某些事就那么理所当然的下去,要学会追根溯源。

        客户端脚本到底是什么呢?客户端脚本就是一些特殊字符的集合,这些特殊字符组合在一起具有了一定的意义和格式,当然,浏览器也要有相应解释这些特殊字符的程序,要不然,那些特殊字符就不会具有特殊的意义了,这个其实和我们之前对HTML的解释差不多。我们为了使我们的HTML文档具有这些功能,就会在服务器端编写HTML文档时,在里面按照客户端脚本的规定添加相应的特殊字符的集合,这样浏览器得到该HTML文档,并触发该功能时,浏览器相应的解释程序就会解释执行这些特殊字符的集合。现在客户端脚本有很多,例:JavaScripte、VBScripted等。

        下面这幅图之前的博客(万维网的文档)有,读了上面的文字后,再看看是不是感觉这幅图很经典。

        


服务器端脚本

       上面提到客户端(浏览器)脚本,下面我们以提问题的方式一起看看这服务器端脚本。

       上来二话没得说,先问问为什么有了服务器端脚本?是为了解决某一个问题,还是为了锦上添花,这个我们慢慢说,我们上面介绍了一些关于HMTL的一些理解,但是具体的知识你可以查看这篇博客:HTML基础知识总结,如果你学习过HTML,并使用过的话,你一定有这么一个感觉:客户端(浏览器)和Web服务器端的交互太差了,你可能会说,对,跟没有交互差不多,其实我们的服务器端脚本技术的产生就是因为这个问题。

       服务器端脚本就是运行在服务器端的应用程序,现在你可能有疑问了,运行这个东西干什么啊?ok,我们慢慢讲,先说说静态网页时代,浏览器和服务器的交互过程:浏览器通过url访问相应的静态网页,web服务器接到请求后,进行处理,一看是访问这个静态网页,二话不说就把相应的静态网页发给了请求方,整个的交互完成了。好了,我们接下来看看使用了服务器端脚本后,浏览器和服务器之间的交互情况:浏览器通过url访问相应的动态网页,web服务器接收到请求后,进行处理,一看是访问动态网页,二话不说,把这些数据给了另一个控制程序,那个控制程序接收到以后,然后再进行处理,一看是访问这个动态网页,就马上运行这个网页和里面的代码,并且结合着浏览器端的数据生成一个静态的HTML文件,然后再传送给访问者(浏览器)。当然,服务器端要提供运行动态网页里代码的运行环境。在这里要说的是,因为运行了动态网页里的代码才使得服务器端更加的强大。上面关于浏览器和客户端的交互,读者最好自己画个图。服务器端的脚本有很多,像php,asp.net等等,这篇博客我们主要说的就是Asp.net

        服务器端脚本中浏览器和服务器端描述的那个图形大致如下:


       下面这幅图,包括上面那幅自己画的图,都是发表了这篇博客之后才相应的补上,尤其是下面这幅图(王志鹏那篇博客拷过来的),这幅图加上本篇博客的第一张图,就非常完美的解释了客户端和服务器端工作的详细流程。希望读者好好理解这两张图。


ASP.net

        上面我们大致说了些关于ASP.net的一些介绍,现在我们开始真正的介绍一下ASP.net。关于ASP.net产生的原因,只能说是锦上添花,算不上雪中送炭,具体情况说不好,也就不多说了。下面我们直接介绍的是ASP.net是什么?是什么?其实,ASP.net是一个解决方案,是一个从设计到具体细节的完成,这么一个整个过程的一个抽象概述,当然,我们站在不同的角度会对其侧重点不一样,例如,我们站在编程者的角度上说,更多的认为他就是一些特殊字符的集合,是一种脚本语言;站在实现ASP.net的角度上看,或者说是为编程者提供这种服务的角度上看,他更多的是一种技术,更多想阐述的是为了实现这个而做的一些幕后的事。

        从编程者的角度上看ASP.net,我更喜欢说他是在.net平台上开发B/S界面的标准,因为凡是基于.net平台开发B/S程序界面时,都用到了相同的符号集(包括控件等),也就是说都用到了同一样的一个东西:ASP.net。ASP.net在.net的整个体系结构中处在应用开发语言(C#,VB.net等)和.net framework类库之间,所有的开发语言在开发B/S中使用的“ASP.net”的东西都是一个ASP.net,其实Windows Form和ASP.net处在的位置是一样的,但因为它不像asp.net那样,还要顾忌着HTML,所以就没有那些重复性的东西了,也就是说,windows Form只需妥妥拽拽设计界面就行了,不用再通过编写些页面代码设计了,从这里我们可以知道,C#和VB.net等等基于.net平台的应用编程语言,在编写Form应用程序所用的一些控件都是一样的东西。对于.net,.net framework等知识的更深层的学习,大家可以看一看这篇博客:.net的学习总结

        ok,对于ASP.net的认识,相信你已经比较清楚了,现在我们就说一说它在浏览器和服务器端的一个交互过程,其实上面已经说了关于动态网页浏览器和服务器交互的过程,之所以在这里还要说,是为了让大家有一个更加直观的认识。浏览器和Web服务器端的交互:浏览器发送相应的某个asp.net页面的请求,服务器接收了后,一看是asp.net的请求,就马上给了相应的控制程序,控制程序接收到以后,就会去查找相应的文件,并且运行它,生成相应的静态HTML文档,然后转交给控制程序然后再发送给相应的请求者。这个过程是大概的过程,具体某个阶段对应什么事件,我也不太清楚,就目前阶段来说,我先这么理解:控制程序接收到客户端的请求后,会根据要求,先弄出来一个“模板”静态HTML(asp.net文档未初始化的文档),然后,看看请求中有没有相应初始化网页里对象的数据,有的话初始化,没有的话再调用asp.net的Load事件,进行初始化(可以通过IsPostBack进行条件选择)要生成的静态的HTML,然后,可以执行相应的控件触发事件。这里描述的可能不怎么清楚,在下面介绍具体控件的时候,再描述。


ASP.net控件

        ASP.net网页中涉及的到的控件可以分为两类:客户端控件;服务器端控件。

        客户端控件就是通过HTML标签制成的控件,它的实质就是HTML标签,我们在ASP.net界面设计的时候,可以通过工具箱内相应的HTML控件布局,也可以通过在界面代码书写HTML标签进行布局,之所以在ASP.net技术中还有HTML标签控件的存在,主要还是兼容之前的HTML,后面会详细讲解。

        服务器端控件可以分为两类:HTML服务器端控件;ASP.net服务器端控件。HTML服务器端控件,其实就是在HTML标签里面添加了该属性:runat="server",ID="唯一标示";ASP.net服务器端控件是ASP.net真正的自己的东西,在这里要说的是,凡是HTML标签控件可以实现的,ASP.net服务器控件都可以实现,ASP.net服务器控件又可以分为:Web界面设置的控件;验证控件。当然,从另一个角度,我们还可以将其分为:自定义控件(第三方控件);系统控件(第一、二方控件)。大概知道就可以了。

       上面说了那么多关于客户端控件和服务器端控件的东西,可能你现在心里该嘀咕了,客户端控件和服务器端控件到底有什么区别呢?可能你会认为客户端控件就是运行在客户端的控件,服务器端控件就是运行在服务器端的控件,在这里你可以想一想,验证控件是服务器端控件吗?先在这里说一下验证控件的特征,验证控件有很多,有些在客户端上执行,有些在服务器端执行,在可以说的就是验证控件是服务器端控件。对于上面的那句话,如果我们仅仅只是停留在这个层次上理解的话,只能说我们还没有真正的理解他们两者的区别,为什么这么说呢?因为刚才的那一句话,其实是一个抽象句子,什么意思呢?就是我们根据这么一句话,可以有多种不同实现的理解,很可怕的一件事,怎么解决这个或这类抽象句子的问题呢?一句话:实践见证。好了,废话不多说了,现在开始说一下我对他们之间区别的理解。服务器端控件,就是该控件可以被后台代码访问,对其可以进行任何的操作,客户端控件或HTML标签控件不能直接被后台脚本代码直接操作。

       在这里我们要清楚,浏览器和服务器端进行交互是通过表单(也就是“<form>”标签)进行的,但是,服务器端访问控件是看他是不是服务器端控件进行的,在上面我们也说过,服务端的控制程序,先将表单中的数据信息,赋给正在形成的静态HTML,然后,再触发asp.net的load事件,然后,控制程序根据表单中的数据信息看看触发那个控件事件,然后,再将整个静态HTML返回给浏览器,浏览器重新显示。

       细心的你一定遇到这么一种情况,ASP.net服务器端控件都在<form>表单中,如果不在表单中,那么一定会出错,因为服务器控制程序需要那些控件的状态信息,在进行生成新的静态HTML文档的时候使用,这个过程在asp.net网页的load事件前,当然如果我们对于现在界面的改变无所谓的可以设置一下相应的属性不传过去。可以针对单个控件、整个页面或整个应用程序禁用ViewState,具体如下:每个控件标签的属性中添加:EnableViewState="false";每个页面的页面设置(一般为每一页的第一行)中添加:EnableViewState="False"。需要注意的是,这个设置对服务器端控件Textbox,Checkbox,Checkbox List,RadioButtonList无效。

       上面说那么多,主要是想弄清楚这么几件事:load事件前有个数据初始化,初始化数据的种类有具体数据和消息,初始化的作用是为了维持现在浏览器上服务器端控件的状态;浏览器和服务器的交互必须通过表单;后台代码可以访问服务器端控件;生成静态HTML文档,浏览器要重新显示。讲的有点乱,希望读者读后能有更多疑惑的触发。


总结

       本来想把ASP.net的内置对象和相应反思的总结也写在这篇博客上,不过,一看这么多字,也就不写。对于ASP.net控件的具体内容不发表相应的博客了,后期会发一篇关于ASP.net内置对象和反思的总结

 

posted @ 2013-08-10 00:15  坚固66  阅读(598)  评论(0编辑  收藏  举报