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的属性和方法

属性 说明 SessionID 唯一的会话标识符 Timeout 设置超时时间,单位是分钟
方法 说明 Add(string name, object value) 添加 Remove(string name) 根据key删除 Clear() 移除所有的会话 Abandon() 结束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. 方法

常用事件 说明 Application_Start 接受第一个请求时出发 Application_End 应用程序退出时 Session_Start 某用户第一次访问时触发 Session_End 某用户退出应用程序时触发

实现统计网站访问人数功能

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对象中的数据,需要保存在介质中 }

总结

这里写图片描述

原创粉丝点击