I can 前端-07 ASP.NET 常用对象

页面回发机制

回发的复杂说法

像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

        它存储在客户端中,每种浏览器存储的位置不一样,以字符串的形式存储

        因为存储在客户端,所以安全性差

        因为安全性差,所以存储不重要的信息

        因为存储在本地,存储的是少量信息

        必须设置有效期,否则不会存储,随着浏览相关的网站,会一并发送到服务器

使用

创建

//创建方法1
Response.Cookies["name"].Value = "eden";

//创建方法2
HttpCookie 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对象中的数据,需要保存在介质中
 }

总结

这里写图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值