I can 前端-07 ASP.NET 常用对象
来源:互联网 发布:清华直博生待遇 知乎 编辑:程序博客网 时间:2024/06/08 09:49
页面回发机制
回发的复杂说法
像button等服务器控件,点击下去后,解析的就是submit到后台
传递到后台交给服务器处理,处理时服务器会对当前网页重新加载(重新绘制)
这就是回发
回发的简单说法
说简单点,就是服务器控件的后台事件在执行前,都会先执行Page_Load事件,执行这个事件,就是回发
protected void Page_Load(object sender, EventArgs e){}
回发的测试
每一次点击登录,都会跳入Page_Load事件中,其次页面会重新加载
回发问题的处理
Page对象是一个内置对象,当创建了aspx文件后会产生
Page对象提供了IsPostBack,判断是否是首次回发
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { //这里处理首次加载需要处理的事情 } //这里每次刷新当前页面都会处理的事情 }
当有这个对象,才完成了前后端分离的设计。在前端的顶部会有这样一行
<%@ Page //后台语言Language="C#" //是否每次都要回发AutoEventWireup="true" //后台代码文件CodeBehind="WebForm.aspx.cs" //后台代码类Inherits="WebApplication1.WebForm" %>
Request && Response
Request和Response是Page对象的成员
Request是封装了用户的请求信息,那后台如何获取信息呢
QueryString
限制:只能从Url中获取传递的参数
演示:不用页面用Url传递参数
在WebForm3中
--参数与Url用?分割,参数间用&分割,参数以key-value的方式书写<a href="WebForm4.aspx?name=pp&age=20">跳转到WebForm4</a>
在WebForm4的后台中
protected void Page_Load(object sender, EventArgs e){//通过Page对象的Request对象的QueryString方法获取,通过参数的key var name = this.Request.QueryString["name"]; var age = this.Request.QueryString["age"];}
Params
QueryString使用限制于Url,Params没有限制,所以使用更加广泛
var name = this.Request.Params["name"];var age = this.Request.Params["age"];
ServerVariables
用于服务器的数据
//获取浏览器及版本Request.ServerVariables["HTTP_USER_AGENT"]//获取浏览器语言Request.ServerVariables["HTTP_USER_LANGUAGE"]
Reponse
Reponse.Write
在页面顶端输出信息,一般用于测试
Reponse.Redirect
通过后端程序跳转页面
ViewState
int counter = 0; protected void Button1_Click(object sender, EventArgs e) { counter++; }
在后台,我们想做到,没点击一次button,counter就计数加1。我们点了N次,发现counter一直是0
为什么会这样呢?与PC的桌面应用程序不同
因为Http的无状态性,Web不会保留HTTP所发的信息和当时的状态
网站只有一个,如果你这里计数了,其他人通过URL访问,也会获取了这个计数
事实上,服务器也可以区别访问自己的浏览器是哪个,ViewState用来充当成员变量,每个浏览器访问时,即使名字相同,但不会冲突
protected void Page_Load(object sender, EventArgs e){ if (ViewState["counter"] == null) { ViewState["counter"] = 0; }}protected void Button1_Click(object sender, EventArgs e){ var counter = (int)ViewState["counter"]; counter++; this.Literal1.Text = counter.ToString(); ViewState["counter"] = counter;}
生存周期:跳转页面后,信息丢失
使用方式:key-value方式,存储object,取数据时需要强转需要的类型
Session
Session是独立的
Session和ViewState一样,每个用户的互不影响
互不影响是因为每个Session都有自己的Id,有各自的空间
Id创建是浏览器访问服务器时候,服务器产生的一长串的字符串,并交由浏览器保存,当浏览器再一次访问时,会带着自己的SessionId
查看自己的SessionId
Session.SessionID
web服务器生成SessionId
web服务器只有认定浏览器是第一次请求,才会生成SessionId
那怎么认定浏览器是第一次请求呢
- 第一次打开这个网页
- 关闭这个浏览器的所有的网页,再一次打开
- 用不同的浏览器打开这个网页(不同浏览器是不同享Session)
有必要解释夏第二种情况
我用浏览器打开多个网页,有百度,有淘宝,有自己写的用session的网页,我关掉最后一个网页,再打开,session的值还存在,是关闭这个浏览器的所有网页
Session的属性和方法
Session翻译过来叫会话
Session两种添加方式都可以
Session.Add("name", "eden");Session["name"] = "eden";
Abandon的作用是相当于将Timeout设置到期,这样服务器会认为浏览器是一个新的请求
Clear是将值赋为null
生命周期:服务器重启,页面时效到了
Cookie
特征
有时候,当你浏览过的、登录的信息,再次打开网页,会弹出曾经浏览过的信息或者弹出……
有一种手段:Cookie
它存储在客户端中,每种浏览器存储的位置不一样,以字符串的形式存储
因为存储在客户端,所以安全性差
因为安全性差,所以存储不重要的信息
因为存储在本地,存储的是少量信息
必须设置有效期,否则不会存储,随着浏览相关的网站,会一并发送到服务器
使用
创建
//创建方法1Response.Cookies["name"].Value = "eden";//创建方法2HttpCookie nameCookie = new HttpCookie("name", "eden");Response.Cookies.Add(nameCookie);
设置有效期
Response.Cookies["name"].Expires = DateTime.Now.AddDays(1);nameCookie.Expires = DateTime.Now.AddDays(2);
取值
if (null != Response.Cookies["name"]){ var value = Response.Cookies["name"].Value;}
Application
从字面看,应用程序,级别更高
最常用的功能,我们统计一个网站访问的次数,使用的是Application
特征
位置:在服务器的内存,所以速度块
范围:整个应用程序
类型:任意类型
生命周期:应用程序从开始到销毁
使用
1. 创建Global.asax
该文件必须在根目录下
2. 方法
实现统计网站访问人数功能
protected void Application_Start(object sender, EventArgs e){ Application.Lock(); Application["UserVisit"] = 0; //网站访问人数 Application["CurrentUser"] = 0; //网站在线人数 Application.UnLock();} protected void Session_Start(object sender, EventArgs e) { Application.Lock(); Application["UserVisit"] =(int)Application["UserVisit"] + 1; Application["CurrentUser"] =(int)Application["CurrentUser"] + 1; Application.UnLock(); } protected void Session_End(object sender, EventArgs e) { //在某个用户会话结束时,触发 //在Web.config文件中,sessionstate设置为InPro才引发事件 Application.Lock(); Application["CurrentUser"] = (int)Application["CurrentUser"] - 1; Application.UnLock(); } protected void Application_End(object sender, EventArgs e) { //Application存储在内存中 //预防服务器出现问题,丢失Application对象中的数据,需要保存在介质中 }
总结
- I can 前端-07 ASP.NET 常用对象
- I can 前端-09 数据验证与ASP.NET验证控件
- ASP.NET常用对象
- ASP.NET常用对象
- ASP.NET常用对象
- I can 前端-05 DOM模型与Window对象
- ASP.NET~常用内置对象
- ASP.NET~常用内置对象
- ASP.NET~常用内置对象
- I can 前端-01 HTML
- I can 前端-02 CSS
- I can 前端-04 JavaScript
- [ASP.NET-VIII] ASP.NET 使用CSS[行内式(style) 嵌入式(class)] + table布局前端控件I
- asp,net几个常用内部对象
- ASP.NET 常用五大对象总结
- ASP.NET 常用五大对象总结
- Asp.net 开发中常用对象
- I can 前端-03 盒子模型
- ASCII、GB2312、GBK、Unicode、UTF-8、UTF-16 编码方式比较分析
- qsort( )使用和实现
- 杭电ACM OJ 1033 Edge 本题考查英文过了6级没有和谷歌翻译的使用
- 714. Best Time to Buy and Sell Stock with Transaction Fee
- 【Scikit-Learn 中文文档】模型评估: 量化预测的质量
- I can 前端-07 ASP.NET 常用对象
- 【Scikit-Learn 中文文档】模型持久化
- 客户端关闭,服务器端SocketException异常解决方案
- 【Scikit-Learn 中文文档】验证曲线: 绘制分数以评估模型
- 【Scikit-Learn 中文文档】模型评估: 量化预测的质量
- 线程的私有数据(TSD-Thread-Specific Data)
- 小结 | 初级贪心算法
- 【Scikit-Learn 中文文档】模型持久化
- 一个屌丝程序猿的人生(七十七)