ASP.NET知识点

1. aspx页面开始的<%@Page  %> 称为指令集, 在编译的时候使用. 2. 前台页面与后台页面的继承关系     前台页面aspx --- 后台类aspx.cs ---Page类 -----实现了IHttpHandler接口,     IHttpHandler包含ProcessRequest()方法.     Control属性:控件的集合,页面上所有的代码(包括html)都以控件对象的方式存放在此集合中

2.<<<aspx页面执行过程:>>>----------------------------------------------------------------------------------  1.--首先通过反射创建aspx前台页面(第八个事件),  第九个事件尝试将页面类对象转换成IRequeiresSessionState接口对象,  如果转换不成功,则不加载Session对象, 转换成功则从请求报文头中获得  cookie里的SessionId,然后到服务器的Session池中根据Session找到Session对象  并将其引用赋值给页面对象的Session属性    2.--然后调用反射创建的请求页面的ProcessRequest()方法(第十一与第十二个事件之间)

 3.--调用父类的ProcessRequest方法,在此方法中父类调用了父类的FrameworkInitialize()  但因为被页面类重写了,所以执行的是当前页面类的FrameworkInitialize(),在中间就调用了  buildControlTree()方法,然后调用ProcessRequestMain()方法,在此方法中,执行了整个页面的生命周期  (页面生命周期,其实就是调用一系列事件的方法)

 在PR方法中 执行页面类的buildControlTree()方法来构造控件树  buildControlTree()方法中传入当前前台页面类对象,作为根节点,  生成页面控件树,将页面的每个HTML代码及相应的服务端运行的控件标签(runat=server)  都以服务器端控件类对象方式封装起来.  最后当页面执行完毕,生成整个页面对象所对应的HTML页面代码时,只需要循环遍历整个控件树的每个节点  并调用每个节点的Render方法,就可以生成每个控件里所封装的Html代码了,最后组成整个页面的html  返回浏览器.      4.--执行页面生命周期的一系列方法(PageLoad(),SaveState(),LoadState())  生命周期中有许多事件,程序员可以注册方法,并在方法中修改控件树里某个控件对象的属性    5.--通过生命周期中的方法来改变控件树中对应控件的属性,然后在调用页面的renderControl()方法生成Html代码  遍历整个控件树,调用每个控件的render方法,根据控件属性生成 并 拼成整个页面的html代码,  renderControl方法()需要传入Response对象参数,实际上是一个写出器HtmlTextWriter对象.  遍历控件树时,调用每个控件的renderControl()方法,都会传入同一个HtmlTextWriter对象,  所以每个控件生成的html代码,都按照次序存在同一个HtmlTextWriter对象中,  最后只要将这个HtmlTextWriter对象中的字符串输出 就可以形成整个页面    3.为什么在Page_Load()中Response.Write()的内容 显示在HTML代码之前,打乱页面布局???  因为页面请求时先执行Page_Load()事件,然后执行Rander()方法生成html页面

---------------------------------------------------------------------------------------------------------------    3.WebForm 前后台页面(aspx/aspx.cs),文件在被访问时会编译成前台类和后台类    请求管道的第八个事件触发会通过反射创建的是前台类aspx,然后强转为IHttpHandler接口对象

4. 创建前台页面的后,在前台页面里可以访问其父类(后台类,Page类..)中所有的非私有成员

5.生成页面控件树的目的:  为了在服务端运行页面类对象时,可以根据用户的某些操作及环境的某些变化来修改要生成的html代码  正因为最终页面对象是要生成html代码,所以在创建封装了html代码的控件树时,就要依次添加控件.

6.在前台类中可以在<%%>里写服务器C#代码,此时可访问到后台类(父类)的非私有成员.    在前台输出 还可以使用 <%= %>

7. Request.UrlReferrer : 记录跳转页面的域名地址     Request.UserHostAddress : 服务器端是通过与客服端浏览器的套接字获取彼此的IP及端口号

8.CLR编译器会在 第一次访问aspx页面 或者 修改aspx 页面后,会重新编译生成程序集,    并将之前的的程序集标识为不可用状态,CLR内部会自己对不可用的程序集进行清理

1. runat="server" 标记该控件在服务端运行  <input type="text" id="txtName" runat="server"/>  此控件在服务器端会被运行,会变成一个对象,在服务器端可以访问到,  通过 . 可以设置一系列属性

2. Response的其他成员:      2.1 Response.Buffer=false;     //关闭输出对象的内容缓存(只要调用Write就立即输出到浏览器)      2.2 Response.BufferOutput      2.3 Response.Flush()      立即一次性输出Response对象中的内容缓存(就是之前Write的内容)      2.4 Response.Clear()      清空Response对象中的内容缓存.(就是之前Write的内容)      2.5 Response.ContentEncoding 输出流的编码,指定报文体的编码方式            Response.Charset 告诉浏览器 用什么字符集解码      2.6 Response.ContentType:报文体的格式      2.7Response.End() 终止响应

3.Server 对象:  Mappath();

4无状态 HTTP:   ASP.NET状态保持方案: 5.Session  Session存在于上下文对象Context中  在服务端存一个Session键值对 Session原理:  5.1 Session["id"]=strName;  向服务器Session池添加Session对象,将键值对存入Session对象中  同时以cookie方式向浏览器发送SessionId.  5.2在浏览器未关闭的前提下,当再次访问该网站页面时,  浏览器会自动将保存了SessionId的cookie发送到服务器来  5.3在调用页面对象的ProcessRequest方法之前,  服务器端会根据Cookie里的SessionId到Session池中去找  看是否有对应的Session对象,并且将该对象的引用设置给  HttpContext里的Session属性  5.4页面对象执行PR方法时,就直接通过Page类的Session属性  可以访问到HttpContext里的Session引用. Session操作:  销毁(取消/退出) :   Session.Abandon();销毁服务端的Session   一般处理程序中访问Session对象时,必须实现IRequiresSessionState接口   标志要求使用Session状态

Session常用属性:  SessionID:唯一用户会话标识符  TimeOut:用户超时,默认为20分钟  Count: Session池中 Session对象中 键值对的对数.

设置全部网页的Session或者禁用Cookie后通过url保存sessionId  需要再配置文件中设置 <SessionState ></SessionState>

6.Cookie(小甜饼):  创建Cookie对象(保存键值)  1.HttpCookie cookie=new HttpCookie("id","110");  cookie.Expires=DateTime.Now.AddDay(2);//设置失效时间 当前时间+2天  Response.Cookies.Add(cookie);    服务器获取Cookie  Request,Cookies["id"].Value    删除浏览器Cookie  创建一个cookie  与登录时的cookie名相同  HttpCookie cookie=new HttpCookie("id"," ");  cookie.Expires.AddDay(-2);//设置失效时间 当前时间-2天  Context.Response.Cookies.Add(cookie); Cookie的实现原理,  就是通过请求报文头和响应报文头实现的

Request.Cookies 服务器端获取Cookie Response.Cookies 向浏览器输出cookie

--------------------04-03--------------------- 1.当用户禁用浏览器所有Cookie的时候,当用户登陆的时候  浏览器接收响应报文中设置的Cookie,导致登陆失败. 解决办法:  在配置文件中设置<SessionState cookieless="AotuDetect"></SessionState>  禁用cookie后浏览器会通过url的形式传递cookie值 2.Application  (服务器端一个共享的字典集合对象,每个浏览器都可以访问这个对象,操作的是同一个Application)  网站应用程序发布后,当第一个用户访问某一个页面的同时  就创建了一个Application对象(public  static Dictionary <string,object>)  加锁:Application.Lock();  解锁:Application.Unlock();   3.页面生命周期事件执行的作用:  LoadState : 获得表单提交过来的隐藏域_VIEWSTATE里的值,从中找出   1.属于服务器控件的值,然后赋给控件树里对应的控件属性   2.属于用户通过VIEWSTATE["key"]=value方式添加的值,   并赋给页面对象的VIEWSTATE属性

  将VIEWSTATE中的值已经还原到 VIEWSTATE属性中  Page_Load :   用户可能要从页面VIEWSTATE属性中获取之前保存的键值对,   所以在Page_Load之前,必须将表单隐藏域里的值还原到页面VIEWSTATE   属性中  SaveState :   遍历控件树所有的控件,然后将需要保存的属性和数据以及控件名称,   保存到VIEWSTATE中

 RenderControl() :   Render时,要遍历控件树,调用每个控件的Render方法,从而生成整个页面的html代码   但当它执行到HtmlForm表单控件的时候,此控件的Render方法里会读取VIEWSTATE   里的每个键值对,并将他们序列化成字符串,然后进行base64编码得到一个新的字符串   最终生成一个<input type="hidden" name="__VIEWSTATE" />的隐藏域的value中.

 

------------------------------------- 04-05 ----------------------------------- 1.App_Code文件夹中的类文件,不允许下载访问,提示Forbidden错误消息

2.aspx文件生成程序集的时候,后台页面被动态的实现了IRequiresSessionState接口,    只有实现了该接口,才能对Session进行访问操作

-----记住用法---- 3.javascript中 获得 iframe标签中父窗体对象的引用路径  window.top.location ="Login.aspx" 控制ifram页面 跳转到 登陆页面  window.parent.location

 

 

转载于:https://www.cnblogs.com/zxp19880910/archive/2012/08/19/2646306.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值