ASPNET快速入门.ppt_第1页
ASPNET快速入门.ppt_第2页
ASPNET快速入门.ppt_第3页
ASPNET快速入门.ppt_第4页
ASPNET快速入门.ppt_第5页
已阅读5页,还剩55页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

温馨提示

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

评论

0/150

提交评论