1、,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,北京传智播客教育,*,内容:,掌握基于,ASP.Net,的,Web,开发,,,B/S,结构原理、,ASP.Net,内部原理,、,状态管理(,Cookie,、,Session,、,ViewState,等),、,数据验证,、普通,ASP.Net,控件、,母版,、,ListView/Repeater,等数据绑定控件、,AJAX,、缓存,、,Membership,、导航、自定义控件等。,目标:,以应用为目标,能够使用,ASP.Net,开发常见的动态网站功能
2、,并且和,Dom,、,JQuery,等客户端技术结合进行网站的开发。,参考书:,ASP.NET 3.5 揭秘,注意:,原理先行,对于,ASP.Net,来说弄明白了原理才能学得更快。会讲一些原理性的非常规用法代码,,用,标识,不要学这种写法。,Java,班先讲,Servlet,再讲,JSP,,,.Net,也是先讲,HttpHandler,再讲,WebForm,。,1,北京传智播客教育,课程安排,第一阶段:原生控件和,.NET,内部对象,1,、目标:从网络的角度介绍,ASP.NET,的工作原理,并对,ASP.NET,中的几个核心对象与,HTTP,之间的关系进行分析。掌握,WEB,运行请求响应原理,
3、核心对象及服务器页面生命周期。,2,、项目:,GSSMS【,绿色简单学生管理,-,原生版,】,第二阶段:服务器控件提高开发效率,1,、目标:掌握服务器端控件的使用及控件生命周期。,2,、项目:,GSSMS【,绿色简单学生管理,-,服务器控件版,】,第三阶段:,ASP.NET,高级进阶,1,、目标:掌握缓存,/Ajax/Json/,母板页,/,错误页,/,网站部署,/CKFinder,2,北京传智播客教育,我们怎么看到网站的?,1,、在地址栏输入地址敲回车后浏览器到底做了什么事情?,3,北京传智播客教育,服务器与浏览器语言,1.,浏览器与服务器语言,浏览器,只负责解释执行,html+css+ja
4、vascript,代码,服务器,可执行服务器端语言:,.NET,JAVA,.,分别由不同的,运行,环境,执行代码,(Framework,JVM),2.,静态页面,(html),和动态页面,(aspx),的区别,?,比如说新闻列表页面,(,邮箱列表,),。,浏览器,:htmljavascriptcss,服务器,:,?HTML(.html),.Net(.aspx.ashx)JAVA(.jsp)PHP(.php),编写代码演示静态页面和动态页面,4,北京传智播客教育,文件扩展名,说明,.ashx,一般处理程序,,,ASP.NET,核心程序,但一般使用,.aspx,.aspx,常用程序,用于创建网页和
5、对网页进行编程的核心文件类型,(,前台文件,),,和,.aspx.cs,文件配套使用,.aspx.cs,常用程序,用于编写大量的,c#,业务代码,和,.aspx,配套使用。,.ascx,指明一个,ASP.NET,用户定义控件,.asax,包含,ASP.NET,应用程序级事件的事件语法,.config,配置文件,用于设置应用程序的各种属性,.asmx,供宿主,Web,服务在本地或远程使用,ASP.NET,里的常用文件,(,重点,),下面来编写一个登录的动态页面让各位加深体会,5,北京传智播客教育,登录流程,用户打开登录页面,填入用户名密码,点击,【,登录,】,按钮,,浏览器,将用户输入的,用户名
6、,、,密码,发送,给网站服务器,网站服务器让负责处理登录,请求,的,ASP.Net,程序来处理这个登录请求,处理程序判断用户名、密码是否正确,然后将判断结果,返回,给浏览器。,开发一个登录页面需要做两个工作:,1.,显示在浏览器中的页面、,Dom,特效,和,C#,代码没关系,也就是,前端,(,前台,),页面,相当于这个页面要生成的,HTML,代码模板,;,2.,处理浏览器请求的服务器端代码,,C#,代码,也就是,后台代码,。,画图区分第一次请求和之后的提交,6,北京传智播客教育,什么是,ASP.Net,ASP.Net,是一种动态网页技术,,在服务器端运行,.Net,代码,动态生成,HTML,。
7、,可以使用,JavaScript,、,Dom,在浏览器端完成很多工作,但是有很多工作无法在浏览器端完成,比如存储数据、访问数据库、复杂的业务逻辑运算、安全性要求高的逻辑运算等。,服务端控件和,HTML,控件的生成关系:在,aspx,页面中可以使用服务端控件,简化开发。但,浏览器只认,html,,因此在包含,服务端控件的页面被请求时,页面中的服务器端控件会组装成对应的,HTML,控件代码字符串,,如:,TextBox,。,ASP.Net,:,WebForm,、,MVC,。,服务器控件不是新的控件,在浏览器端仍然是生成,html,标签。服务端控件虽然好用,但是也有缺点,并不是什么地方用服务器端控件
8、都好,具体后面讲。,7,北京传智播客教育,Web,应用程序和网站,WebApplication,(,Web,应用程序)和,WebSite,(网站)的区别,,WebSite,是为了兼容从,ASP,转过来的开发人员的习惯而存在的,用起来简单,比如不需要创建命名空间、,CS,代码修改以后不需要重启就能看到变化(无论是,WebSite,还是,WebApplication,,修改,aspx,都不需要重启。,WebApplication,每次修改以后点击,【,生成解决方案,】,也能立即看到修改效果,),但是不利于工程化开发,比如代码出错不容易发现,代码不分命名空间。开发技术上没有任何区别,只是开发、调试习
9、惯不同而已。,方便开发不用每次调试都设定起始页,在项目的选项中设定,【Web】,启动操作当前页面,这样当前激活的页就是起始页。,此次课程知识使用,WebSite,;,8,北京传智播客教育,ASP.Net,工作概要流程图,9,北京传智播客教育,练习,练习:做一个加法计算器,步骤:,1.,新建网站,2.,添加新建项,-Web,窗体,(Cul.aspx)3.,打开,Cul.aspx,,进入设计视图,从工具栏选择控件拖入到页面适当的位置,(,可以使用适当的,HTML,代码布局,-Table)4.,双击按钮,生成点击事件,(,和,WinForm,程序生成点击事件一样,)5.,在按钮点击事件中编写代码,接
10、下来进入核心程序:一般处理程序,10,北京传智播客教育,第一个网站,-,新建网站,11,北京传智播客教育,第一个网站,注意:,1.,选择,C#,2.,空网站,3.,文件夹,12,北京传智播客教育,第一个网站,-,添加新项,在网站上点击右键,选择,【,添加新项,】,:,13,北京传智播客教育,第一个网站,-,选择一般处理程序,14,北京传智播客教育,第一个网站,-,编写代码,FirstShow.ashx(,一般处理程序,),15,北京传智播客教育,第一个网站,-,在浏览器查看,1.,在要查看的文件上单击右键,选择 在浏览器中查看。,2.,注意到屏幕右下角状态栏中出现了一个小图标:,Cassini
11、,服务器是,vs,内置的开发用的小型服务器程序,我们待会在浏览器看到的页面就是由它处理并返回的。,16,北京传智播客教育,第一个网站,-,访问结果,显示:,终于降临到这个神奇的国度了!,17,北京传智播客教育,刚才俩家伙做了什么?,(,请求响应的过程,),1.,用户在浏览器地址栏输入:,localhost:80777/FirstShower.ashx,2.,服务器接收到用户的请求,发现是请求,.ashx,文件,便将请求交给,framework,执行,,fw,找到对应的文件,login.ashx,,执行后将生成的字符串,(,通常是,html+css+javascript,格式,),返回给浏览器。
12、,3.,浏览器接收到服务器返回的数据,并按照语法解释执行,以界面的方式展示给用户看到。,(3.1,此时如果,html,等代码中包含外部文件,则再次发送单独请求服务器相应文件数据,),First.ashx,那如何理解,B/S,结构的原理呢?最好的办法就是我们自己做一个服务器程序,18,北京传智播客教育,浏览器和服务器到底是什么东东?,如果我们自己来编写一个浏览器和服务器程序,该怎么做?,就好像打电话一般,咱们用中文还是用英文?,(,约定通信的语法,),准备好要说的话,(,按照语法准备要传输给对方的数据,),拨通电话,(,建立连接,),通过电话机,/,电话线说话,(,通过互联网传输数据,),注意:
13、两个人都得拿对话筒,(,通信双方关注接收对方的数据,),总结:,浏览器:一个可以通过,HTTP,协议向服务器发送各种请求,并对从服务器发来的超文本信息和各种多媒体数据格式进行解释、显示和播放。,服务器:一个管理资源并为用户提供服务的计算机软件。,交互时使用,HTTP,协议。,只能被浏览器请求吗?,19,北京传智播客教育,HTTP,请求详解图,先来结合刚才的网页程序了解一下,HTTP,请求过程,20,北京传智播客教育,OurHttpServer-,咱自己的服务器程序,浏览器和服务器,本质上,就是两个使用,Socket,进行基于,HTTP,协议,的通,信的两个,应用程序,(,我们使用,WinFor
14、m),。,咱自己做个服务器程序要解决的问题,:,-1.,怎么接收浏览器的请求?接收以后怎么理解?,0.,怎么向浏览器发送响应?发送后浏览器怎么理解?,1.,如何对静态页面,(html/css/javascript),的请求做出响应?,2.,如何对动态页面,(ashx/aspx),的请求作出响应?动态文件可是有很多的,使用什么方式来调用呢?,3.,如何对图片文件,(jpg/gif),的请求作出响应?,4.,如何保存状态?,21,北京传智播客教育,OurHttpServer-,咱自己的服务器程序,解决思路:,1.,使用套接字进行数据交换。,2.,使用,HTTP,协议,(,到底什么是,HTTP,协议
15、?,),的数据,双方按照此协议解释理解接收到的数据。,3.,直接读取静态文件的数据并通过套接字发送。,4.,对于动态文件的请求,可以通过分析请求页面,并反射所对应的类,并通过接口调用类的方法。,那么,在,ASP.NET,中,是怎么解决这些问题的?,咱来依次举个例子。,大家自己看,10,分钟。,22,北京传智播客教育,HTTP,协议消息结构图,浏览器,服务器,请求报文,响应报文,23,北京传智播客教育,FirstShow.ashx,ashx,?,HttpHandler(,一般处理程序,),请求上下文对象,(,此次请求处理要使用到的信息和对象都在里面,),被访问时被调用的处理方法。,是不是想起,:
16、,窗体加载事件了,:,void,Form1_Load,(object sender,EventArgs e),服务器响应属性,(,调用,HttpResponse,对象,),是否重用,(,暂时用不着,不用理,),重要接口,24,北京传智播客教育,HttpHandlers,在,A,处理的位置,(,终点,),请求管道,(,由,N,个过滤器组成,),把处理过程看成一个黑盒子,25,北京传智播客教育,我就知道你们想听,.,26,北京传智播客教育,一般处理程序,(HttpHandler),一般处理程序,(HttpHandler),:是一个实现类,System.Web.IHttpHandler,接口的类。任
17、何一个实现了,IHttpHandler,接口的类都能作为一个外部请求的目标程序。,先演示一下,ASPX,页面。我们可以把一个,HttpHandler,看作是一个请求的终点。最常见的是,ASP.NET,页面。当用户请求一个,.aspx,页面时,请求将被页面交给页面,Handler,处理。,咱可以通过创建一个我们自己的,HttpHandler,程序来生成浏览器代码发送回客户端浏览器。,如何接收和向发送客户端数据?,27,北京传智播客教育,服务器怎么接收和发送数据?,服务器怎么接收?,服务器怎么发送?,28,北京传智播客教育,ASP.NET,系统对象,系统对象,ASP.NET,Page,指向页面自身
18、的方式。作用域为页面执行期。,Request,读取客户端在,Web,请求期间发送的值,Response,封装了页面执行期返回到,HTTP,客户端的输出,Applicatio,n,作用于整个程序运行期的状态对象,Session,会话期状态保持对象,用于跟踪单一用户的会话。,Cookie,客户端保持会话信息的一种方式,Server,提供对服务器上的方法和属性的访问,在一般处理程序里,通过,ProcessRequest,方法的参数,HttpContext,context,调用,29,北京传智播客教育,一、浏览器提交数据方式?,(,例,),1.,表单:,(,数据藏在请求报文体中,格式,:txtname
19、=james&txtpwd=123),2.,地址栏的,URL,参数,:,键,值,对,127.0.0.1/,login.ashx?,txtname1,=,jordan,&,txtpwd1,=,123,二、服务器如何获取浏览器提交的数据?,1.,获取表单数据:,context.Request.,Form,“,txtname,”,2.,获取,URL,参数:,context.Request.,QueryString,“,txtname1,”,三、服务器如何向浏览器输出数据?,context.,Response.Write(“,我是从服务器输出到浏览器的数据!:)”,);,Request,(HttpRe
20、quest)&,Response,(HttpResponse),注意:,使用表单提交时必须为控件设置,name,画图,浏览器请求属性,30,北京传智播客教育,增删查,1.,列表,2.,删除,3.,新增,31,北京传智播客教育,32,北京传智播客教育,Request(HttpRequest),常用成员,页面间传递数据的几种方式?,如何获取传递过来的数据呢?,Request,Form,属性,Params,属性,QueryString,属性,获取通过,URL,路径传来的数据,获取通过表单提交传输的数据,客户端提交的数据集合,代码演示各种传值方式,33,北京传智播客教育,Response(HttpRe
21、sponse),常用成员,Response,允许开发人员对当前页面的输出流进行操作,Response,Redirect,方法,Write,方法,直接在页面上输出内容,重定向到另外一个页面,Response.Redirect(www.,itcast,.c,n,);,Response.,Write,(,Hello,China!,);,End,方法,结束输出,34,北京传智播客教育,自己动手写动态网站,入门,1.html,新建一个,【,一般处理程序,】,入门,1.ashx,,,ProcessRequest,中写,context.Response.ContentType=text/html;,stri
22、ng username=context.Requestusername;,context.Response.Write(username+,你好,+Guid.NewGuid();,每当用户请求访问,ashx,页面的时候,,ProcessRequest,方法就会被调用,在这里通过访问,context.Request,获得访问者的请求参数等。然后在,ProcessRequest,中通过,context.Response,向浏览器发回数据给浏览器。,ProcessRequest,结束之时就是服务器为这个浏览者本次访问服务完成之时,浏览器向服务器端提交数据,被提交数据的表单(,input,、,sele
23、ct,、,textarea,等)放到,form,中,,form,中通过,action,属性设定表单被提交给哪个页面,为了在服务端取出表单项的值,需要在,HTML,中为表单元素设定,name,属性,注意,id,是给,JS,操作,Dom,用的,,name,才是提交给服务器用的。在服务器端用,context.Requestusername,来根据表单项的,name,来获得提交的属性值。通过,context.Response.Write,向浏览器输出处理后的显示,HTML,内容。,35,北京传智播客教育,注意,当我们点击,【,提交,】,按钮以后是浏览器将用户填写的文本框等控件中的值“提取”出来发送给服
24、务器,而不是服务器来读取用户填写的这个页面。哪些标签的哪些值会被提交给服务器呢?将用户填写的内容提交到服务器有如下几个条件:,只能为,input,、,textarea,、,select,三种类型的标签,。只有,input(,文本框、,CheckBox,等,),用户才可能填写值,,、,、,等标签仅供显示用,没有提交到服务器的必要。,只有,value,属性的值才会提交给服务器,。以,input,标签为例,,input,标签有,title,、,type,、,disabled,等属性,但是这些属性都是供显示用的,用户并不能修改,只有,value,属性才是用户输入的属性,因此只有,value,属性的值才
25、会被提交到服务器。,标签必须设定,name,属性,。学习,Dom,的时候我们知道如果要通过,JavaScript,操作标签,必须为标签设定,Id,。如果要将标签的,value,属性值提交到服务器,则必须为标签设定,name,属性,提交到服务器的时候将会以,“,name=value”,的键值对的方式提交给服务器,多个键值对之间用,&,分割,。除了单选按钮等少数标签之外,大部分标签的,name,的值不能重复。,name,是给服务器用的,,id,是给,Dom,用的。对于,RadioButton,,同,name,的为一组,选中的,RadioButton,的,value,被提交到服务器。,放到,form
26、,标签内。只有放到,form,标签内的标签才可能会被提交到服务器,,form,之外的,input,等标签被忽略。,36,北京传智播客教育,“返回”提交页面,如果还想返回提交页面,那么需要自己绘制。,context.Response.Write(,);,并没有真的返回提交页面,只是看起来像罢了。,37,北京传智播客教育,“返回”提交页面改进版,为了请求、返回的内容一样,将页面源码放到字符串常量中,模板中有一些待填值的占位符,第一次进入页面的时候就直接访问,ashx,,读取,htm,模板,将待填值占位符设置为空,然后输出到浏览器。,为了区分是第一次直接进入页面还是点击提交以后重新进入,ashx,,
27、在,form,中增加一个隐藏字段:,,如果能够从,Request,中读取到,ispostback=true,就说明是点击提交以后重新进入,ashx,,否则就是第一次进入,ashx,。,ispostback,就是一个标志位。,实现思路:在,ProcessRequest,中首先从,Request,中读取,ispostback,,如果读取到,true,,说明是提交进入的,就加载模板,并且进行占位符用计算后的值替换,否则就将模板中的占位符清空直接输出给浏览者。,占位符找一个特殊的不会和其他字符串冲突的就行。,代码见备注,刚进入,hello2.ashx,的时候是直接向浏览器输出内容,用户在输出的内容中填
28、入数值,再点击提交,服务器就知道,“提交回来了”(,PostBack,),Http,是请求、响应的模型,服务器不会来读取浏览器的网页,能够得到的就是客户端网页提交过来的数据。,如果访问,Hello2.ashx,,多次点击刷新,都是“直接进入”,如果提交表单,再多次点击刷新,都是“提交进入”,疑?讨论:文本框上次输入的值在提交表单后又显示出来并不是理所当然的,是开发人员帮着读取提交上来的值然后渲染上去的。这就是,ASP.Net,中,ASPX,和,CS,的关系。,IsPostBack,是依赖于,ViewState,的,所以禁用了页面的,ViewState,,,IsPostBack,永远为,Fals
29、e,。演示,aspx,中的,IsPostBack,在刷新、重新输入地址等情况下的值。,不是服务器去读取模板,htm,中的内容,而是读取用户的提交,比如可以直接敲入网址。可能的错误:先,convert,成,int,,再判断,tostring,是否为空。,IHttpHandler,就是一个很单一的“读取请求参数、发回响应给浏览器”的处理程序,没有其他“超能力”,38,北京传智播客教育,表单提交方式:,Get,与,Post,还可以设定,的,method,属性指定表单提交方式,,get,(默认值)是通过,URL,传递表单值,,post,传递的表单值是隐藏到,http,报文中,,url,中看到不。,ge
30、t,和,post,的区别,(,常考,),:,get,是通过,url,传递表单值,,post,通过,url,看不到表单域的值;,get,传递的数据量是有限的,如果要传递大数据量不能用,get,,比如,type=“file”,上传文章、,type=“password”,传递密码或者,发表大段文章,,post,则没有这个限制;,post,会有浏览器提示重新提交表单的问题,,get,则没有,(,加分的回答,),。对于,Post,的表单重新敲地址栏再刷新就不会提示重新提交了,因为重新敲地址就没有偷偷提交的数据了。,Post,方式的正确的地址很难直接发给别人。,Get,方式,URL,数据格式。服务端文件名
31、后跟着“,?”,,由于客户端可能向服务器端提交多个键值对,键值对之间用“,&”,进行分割,如果,URL,中有汉字、特殊符号等,则需要对,URL,进行编码。,表单域只有设定了,name,的才会被提交给服务器(用,get,方式看的清楚)。如果给,submit,按钮设定,name,,那么按钮的,value,也会被提交给服务器,【,刷新,】,。,对比查看,post/get,报文数据,39,北京传智播客教育,数值自增,实现,input,的自增:点击按钮,input,中的值自动增加,代码见备注。点击刷新就一直是值不变,只有点击提交才会变,,分析原理,。用开发人员工具篡改文本框的值自增就从新的值开始了。,使
32、用,aspx,重写,input,的自增。,练习:加法计算器。常见错误:把,htm,设置成了起始页。,type=submit,才会自动提交表单,,type=button,不会自动提交。从,ashx,启动和从,htm,启动的区别,为什么单使用,div,在服务器取不出来值呢?因为不是服务器来读取客户的网页,而是浏览器收集客户,在,表单中输入的字段,然后形成请求参数发给服务器处理程序,由于没有把,div,当前的,innerText,发给服务器,所以服务器无法得知当前的值。也不要幻想有办法能将,div,的,innerText,提交给服务器,,因为只有设定了,name,的,input,、,textarea
33、,、,select,的,value,属性值才会被提交给服务器。,实现,div,内文本的自增。因为服务器不记得上次给浏览器的值是什么,而且不像,input,那样会将上次的值重新提交回来,因此浏览器需要用一个隐藏字段将上一次的值保存下来。代码见备注,http,无状态,每次请求都是由一个新的页面对象来处理请求。如果把,value,搞成,static,可以实现,但是两个用户访问的话就会串了。而用,Input,方式的话两个人各自点各自的,不会互相影响。,非表单元素无法将客户端的元素值传递给服务器端,即使是表单元素也只能传递,value,值,对于其他属性值比如背景颜色、大小等也是无法传递的,因此对于这些值
34、都要存在隐藏字段中。这就是,ASP.Net,中,ViewState,的实现原理。,其实,div,中的只是起到显示作用而已,使用,IE,的“开发人员工具”修改,div,的,innerText,,然后点击按钮发现值并没有按照我们修改以后的递增。而修改,input,版本的则有效果。,每次都重新构建页面代码是不是很麻烦?,40,北京传智播客教育,HttpHandler,实现图片上传,一、浏览器端,1.,表单元素使用 文件选择框,控件。,2.,表单设置,enctype,二、服务器端,1.,服务器接收客户端上传的文件使用,Request.Files,属性。,2.,使用,HttpPostedFile,的,S
35、aveAs,方法将图片保存在服务器。,41,北京传智播客教育,HttpHandler,实现动态图片输出,HttpHandler,是对请求的响应,可以输出普通的,html,内容,也可以输出图片、也可以输出一个文件(下载),输出一幅动态创建的图片(能看懂就可以),案例,1,:图片中显示访问者信息,案例,2,:填入朋友的姓名就能生成恶搞的图片链接,案例,3,:绘制图片水印,练习:制作简单验证码图片,网上看到的注册、登录时候的验证码也是动态生成的图片、,55.la,也是这样实现的原理。,42,北京传智播客教育,HttpHandler,实现文件下载,如果,HttpHandler,输出的是,html/tx
36、t/jpeg,等类型的信息,那么浏览器会直接显示,如果希望弹出保存对话框,则需要添加,Header,string encodeFileName=HttpUtility.UrlEncode(,“,生活大爆炸,117.avi,”,);Response.AddHeader(,“,Content-Disposition,”,string.Format(,“,attachment;filename=,”,0,“”,encodeFileName);,其中,filename,后为编码后的文件名。,filename,段为建议的保存文件名。,练习:使用,Handler,为学员列表添加,“,下载学员附件,”,功能
37、,43,北京传智播客教育,ASP.NET,第一阶段的第一部分结束,ASP.NET,第一部分主要内容:,主要内容:,1.,浏览器,/,服务器交互原理,(,请求,/,响应的过程,),。,2.,浏览器,-,服务器,-IIS-FrameWork(aspnet_isapi.dll)-IHttpHandler,的处理流程。,3.Web,网站和,Web,应用程序的区别,(,开始时和发布后,),4.【,一般处理程序,】,的使用,(,增删改查,),和上传文件,/,动态输出文件数据,5.,上下文对象,(HttpContext),的 重要属性:,Response(,负责向客户端输出,),Request(,包含所有客
38、户端提交的数据,),注意:不要老想着晚上熬夜学习,因为大部分人会有产生一种消极的时间心里暗示“玩一会儿吧,反正晚上有时间。”养成健康的生活习惯,逼自己在,20:30,前把代码方面的工作做完,提高效率。,44,北京传智播客教育,HttpHandler,实现文件下载,如果,HttpHandler,输出的是,html,、,txt,、,jpeg,等类型的信息,那么浏览器会直接显示,如果希望弹出保存对话框,则需要添加,Header,:,string encodeFileName=HttpUtility.UrlEncode(,“,过滤词,.txt,”,);Response.AddHeader(,“,Con
39、tent-Disposition,”,string.Format(,“,attachment;filename=,”,0,“”,encodeFileName);,其中,filename,后为编码后的文件名。,filename,段为建议的保存文件名。,http,报文中普通方法看不到的那些东西就是,“,报文头(,Header,),”,练习:从数据库用户表导出数据到,txt,文件,让用户下载。,练习:用户表增加一个级别字段。只有登录用户才能下载,images,下的图片文件(,Session,中标识是否登录),如果用户没有登录则首先重定向到登录界面让用户登录,用户登录成功则跳转到下载列表页面,下载链接
40、固定写好即可。如果登录用户是普通用户则在图片左上角加上,“,免费用户试用,”,的字样。,“,安全退出,”,。画页面流程。,常见问题:,e.preventDefault;,或者没写造成,span,闪的原因?不会保留上次设置的静态值。讲用静态页面只是讲原理,实际用大部分还是,aspx,。,Single,是怎么回事?,练习:给上面的程序加上登录验证码。,todo,:,ShowMsg,页面,3,秒自动跳转;用户不能直接访问,privateimages,下的图片;如果程序源代码开放以后造成的程序的漏洞。,45,北京传智播客教育,HttpHandler,实现文件下载,2,1,、新增需求:,增加一个,Sho
41、wMsg.aspx,页面,接受,Msg,、,Url,两个参数,分别是显示的消息和,“,点击继续,”,的链接地址。,2,、登录以后将登录的用户,Id,存入,Session,。,3,、在看图片页面的,PageLoad,总判断,Session,是否有登录用户,Id,,如果没有的话则重定向到,ShowMsg.aspx,页面,要求用户登录。,Session,只有和服务器长期不交互才会销毁。,todo,:,ShowMsg,页面,3,秒自动跳转;给上面的程序加上登录验证码。,用户不能直接访问,privateimages,下的图片;如果程序源代码开放以后造成的程序的漏洞。,怎么不能在,alert,后,Redi
42、rect,?怎么样才能在,alert,以后重定向?,服务端控件也可以用,Request,“,TextBox1,”,方式取值,虽然没必要,46,北京传智播客教育,WebForm1,如果每次输出网页都直接用,HttpHandler,的话太痛苦了,所以一般生成,html,的时候都直接创建,aspx,(,Web,窗体,,WebForm,)。,WebForm,分为两个文件,aspx,和,aspx.cs,,,aspx,是页面模板,是页面描述文件,就是,html,的内容,和,aspx,结合的更好,不用像一开始那样程序员自己去填充模板,控件都是定义在,aspx,中,内联的,JavaScript,、,CSS,也
43、是写在,aspx,中的,服务端的,C#,代码是定义在,aspx.cs,中。,aspx,控件页面长相,,cs,控制程序逻辑,这种“前,aspx,后,cs”,的方式就被称为,CodeBehind,。,aspx,就是模板引擎,不需要再去寻找第三方的模板引擎。,浏览器如果报错“*行错误”,不要看,aspx,,要看生成的源代码,记事本如何定位行号,,【,转到,】,47,北京传智播客教育,WebForm2,cs,可以调用,aspx,中的控件,,aspx,中也可以访问,cs,中定义的字段、函数,还可以编写复杂的,C#,代码,,for,等所有,C#,代码都可以写在,aspx,中(不推荐),前面,后面,在,当前
44、位置输出表达式的值的时候使用,,不要丢了,=,,相当于在当前位置调用,Response.Write(UserName),使用的函数、代码相当于在这个位置调用函数、执行代码。注意,aspx,中调用,cs,的成员级别必须是,protected,或者,public,,不能是,private,的。,中的代码是运行在服务器端的,是,C#,语法,在服务端运行完成才输出到浏览器,其他部分是运行在浏览器端的,是,html,、,JavaScript,语法。,48,北京传智播客教育,HttpHandler,的无状态,一个浏览者发出的请求都是由实现了,IHttpHandler,接口的对象进行响应,由于下次访问不一定
45、还是上次那个对象进行响应,上次响应完毕对象可能已经被销毁了,写的类变量值早就不存在了,因此,不要将状态信息保存到类变量中,。,编写一个,ashx,private int i;,public void ProcessRequest(HttpContext context),context.Response.ContentType=text/plain;,context.Response.Write(i+);,多次刷新我们发现,变量根本不会记忆上次的值。,如果每次响应都创建一个对象的话会非常消耗资源,因此服务器可能会对于多个请求重用一个对象,这样如果实现,IHttpHandler,的,IsReus
46、able,方法返回,true,,那么就表示这个,HttpHandler,允许对象重用。一般返回,true,就可以。,49,北京传智播客教育,投票页面,实现一个投票页面,页面中有“赞成”、“反对”两个按钮,点击“赞成”按钮则增加赞成数,并且在“赞成”按钮上显示最新的赞成个数,“反对”按钮同样如此。(*)同一个,IP,在,24,小时之内只能投票一次。讨论方案。,50,北京传智播客教育,aspx,、,cs,、,dll,之间的关系(*),聊、考,CodeBehind,的时候可以顺带吹的点。,在,WebForm,的页面中执行下面的代码,Response.Write(this.GetType()+);,R
47、esponse.Write(this.GetType().Assembly.Location+);,Response.Write(this.GetType().BaseType+);,Response.Write(this.GetType().BaseType.Assembly.Location+);,发现当前执行页面的类名是,ASP.webform1_aspx,这样的类名,父类才是,ASPNETTest1.WebForm1,使用,Reflector,打开这个临时,dll,,反编译这两个类,发现,ASPNETTest1.WebForm1,是在,VS,中编写的,aspx.cs,类,而,ASP.w
48、ebform1_aspx,则是一个继承自,ASPNETTest1.WebForm1,的子类,,ASP.webform1_aspx,代码是根据,aspx,内容动态生成的构建网页内容的类。综上,,aspx,最终也会生成一个类,这个类是继承自,aspx.cs,中的类。,查看反编译以后的代码,可以看到就是编译生成了普通的,.Net,代码。因为,aspx,生成的代码是,cs,类的子类,所以就明白了为什么,“,aspx,中调用,cs,的成员级别必须是,protected,或者,public,,不能是,private,的。,”,51,北京传智播客教育,Page,类成员,1,、,Request,、,Respo
49、nse,、,Server,、,Session,属性:对,context.Request,、,context.Response,、,context.Server,的简化调用。,2,、,AppRelativeVirtualPath,属性:获得页面相对于应用根路径的路径,比如,/Default2.aspx,3,、,FindControl(ctrlId),,,根据控件的,id,找到(服务器端)控件,类似于,getElementById,。一般情况下直接在代码中写控件,id,引用控件就可以了,但是对于有些场合:使用,ListView,等控件的模板、编写自定义控件等则需要使用,FindControl,来引
50、用控件,,FindControl,返回值是,Control,(大部分控件的父类),一般需要显式转换为相应的控件:,TextBox txtBox=(TextBox)FindControl(TextBox1);txtBox.Text=aaa;,4,、,IsPostBack,:看是,True,还是,False,就看浏览器是否提交了表单数据。,5,、,ResolveClientUrl(url),将虚拟路径转换为客户端访问时的路径,比如,ResolveClientUrl(/a/b.aspx),结果是,a/b.aspx,,这通常在,ListView,等控件的模板中输出,HTML,使用。基本就是对,Virt
©2010-2024 宁波自信网络信息技术有限公司 版权所有
客服电话:4008-655-100 投诉/维权电话:4009-655-100