码迷,mamicode.com
首页 > Web开发 > 详细

aspNet_2_常见的几大对象

时间:2018-09-11 21:23:35      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:ali   views   input   mes   NPU   nstat   decode   setcookie   32位   

常见的几大对象

Response

响应、回答(也就是回复和表达的意思)。

 

由于网站是一种响应式的软件,也就是只有当客户端向服务端发送请求之后,然后服务端才能够响应这个请求回复一个结果。一个请求一结果,服务器不会主动向客户端发送信息,这就是被动响应式的软件。

 

由于我们编写的是服务端的代码,因此Response(表达)Request(倾听)都是站在服务器端的角度与客户端浏览器进行通信的。

Response对象

查看页面的父类page可以看到Response对象是该类的一个只读属性。

public HttpResponse Response { get; }

它是HttpResponse类的一个实例对象

Response.write()方法

类似于php中的echo,向浏览器输出信息。

 

网页服务器所做的唯一的工作就是生成客户端浏览器要执行的代码。

Response.write()的作用就是向生成的浏览器代码之中添加一段字符串。

 

缓冲区asp.net服务器在生成的浏览器代码的时候,它有一个一行一行生成的处理过程,当生成的浏览器代码还没有处理完毕时其所存在位置,我们就叫做缓冲区。

 

Response.Redirect(网页地址)

它可叫做页面重定向,它的作用是自动让当前网页跳转到指定的网址,这种跳转自动完成,不需要像链接一个去点击。

示例:

protected void Button1_Click(object sender, EventArgs e)

{

Response.Redirect("WebForm1.aspx");

}

提示

当我们对aspx.cs类文件进行修改之后,需要按F5或点运行进行编译,才能看到修改之后的结果,因为.net是编译型语言(php是解释型语言)。但是,apsx中的html代码,通过修改后马上就可以看到结果,而不需要按F5执行。

 

Response.End()

停止向浏览器输出信息,示例:

Response.Write("111<br />");

Response.Write("222<br />");

Response.Write("333<br />");

Response.End();

Response.Write("444<br />");

Response.Write("555<br />");

 

服务所做的工作就是生成浏览器要执行的代码,未生成完的代码放在缓冲区中的,当执行了Response.End()之后,程序就停止向缓冲区中写入代码,而是将缓冲区中现有的内容发送到客户端浏览器中。之后的程序也不会再被执行了。

 

Response.WriteFile(文件地址)

它是指向浏览器,发送一个文件中的内容信息。

示例:

Response.WriteFile("t1.txt");

 

其他属性与方法

Response.Clear() 清除缓冲区已生成的所有字符串

Response.SetCookie() 创建cookie

Response.Expires() 生成缓冲区的内容时的最大分钟数,如果到指定时间还没有完成缓冲区的内容的生成,则终止缓冲,并将已生成的内容发送到客户端浏览器。

Request

请求、要求(获取对方传递过来的信息,倾听的意思)。

 

当用户在浏览的地址栏中输入网站网址时,实际上就是传递了一个“查看网页内容”的请求。或者点击超链接、提交表单时也是在向网站发送请求。

 

发送给网站请求之中是包含了很多信息的,比如:以getpost方式发送的url变量、cookie、当前计算机与浏览器等这些信息,都一起提交给了服务器。

 

Request对象的作用,就是获取这些信息。

 

Request对象

查看页面page类可以看到Request对象是该类的一个只读属性。

public HttpRequest Request { get; }

也就是说Request对象是HttpRequest类的实例对象。

Request对象也可以看做是一个集合,是浏览器请求中所包含的这些信息的集合。

Request.Form集合

获取当前用户请求中包含的表单变量的集合。也就是用户通过表单post方式传递过来的所有变量的集合

 

它相当与php中的$_POST

示例:

webForm1.aspx

<form id="form1" runat="server" action="WebForm2.aspx">

<input type="text" value="" id="sname" name="sname" />

<input type="text" value="" id="spassword" name="spassword" />

<input type="submit" value="提交" />

</form>

 

webForm2.aspx.cs

string sname = Request.Form["sname"];

string spassword = Request.Form["spassword"];

Response.Write("您的用户名是" + sname + "密码:" + spassword);

 

Request.Form只能接收post表单传递过来的数据。

Get方式的传递的变量是接收不到的。

 

Request.QueryString集合

这个集合中存放的是GET方式传递过来的url变量。

相当于php中的$_GET

示例:

 

在地址栏中输入:WebForm2.aspx?sname=jerry&spassword=123456

 

if (Request.QueryString["sname"] != null)

{

string sname = Request.QueryString["sname"];

string spassword = Request.QueryString["spassword"];

Response.Write("您的用户名是" + sname + "密码:" + spassword);

}

else

Response.Write("您没有输入用户名和密码!");

 

RequestRequest.Params集合

该集合包含了所有post方式传递的表单变量,和get方式传递的url地址中的变量。

 

而且该集合还包含了Cookie及浏览与客户端系统的信息。

 

Request.Browser集合

这个集合包含了由浏览传递过来的一些客户端的参数

string c1 = Request.Browser.Browser;

Response.Write("<br />浏览器的类型" + c1);

string c2 = Request.Browser.Version;

Response.Write("<br />浏览器的版本" + c2);

string c3 = Request.Browser.Cookies.ToString();

Response.Write("<br />浏览器是否支持Cookie" + c3);

string c4 = Request.Browser.JavaScript.ToString();

Response.Write("<br />浏览器是否支持JavaScript" + c4);

//该类包含了一个描述浏览器的功能的参数对象

HttpBrowserCapabilities bc = Request.Browser;

Response.Write("<br />浏览器的名称及版本号" + bc.Type);

Response.Write("<br />浏览器是否为32位计算机" + bc.Win32);

 

小练习:

创建两个aspx网页,在网页a中,创建一个表单中包含两个文本框用于填写两个数字,和一提交按钮。在网页b中,接收这两个数字,并显示相加的结果。

 

Application对象

它也可以称为全局变量,是指只在这个的之中,任何人、任何页面之中,都可以获得或修改变量。

 

语法定义

Application在本质是一个集合,不需要专门的定义过程,只需要用一个新的键名来赋于其键值即可。

Application["num"] = 3.14;

因此,需要注意,键名不重复,重复也不会报错,而是会直接覆盖原来那个键名的键值。

 

Application是一个非泛型集合,所有存入其中的内容都会被自动装箱为object类型。

 

取值时也只需要用键名直接读取即可,示例:

Response.Write(Application["num"].ToString());

 

Application对象在本质上是HttpApplicationState类的实例对象,它以只读属性的形式存在于HttpApplication类中。

其他读取到另一个页面的变量的方法

//通过实例化另一个页面的类,来获取到另一个页面中的成员变量

WebForm3 wf3 = new WebForm3();

Response.Write(wf3.str);

//也可以直接调用另一个页面中的静态成员,这样就实现了类似Application全局变量的效果。

Response.Write(WebForm3.staticStr);

 

示例:网站访客计数

Global.asax文件中:

protected void Application_Start(object sender, EventArgs e)

{//当网站程序启动的时候,建立全局变量

Application["visitedTimes"] = 0;

Application["userCount"] = 0;

}

  protected void Session_Start(object sender, EventArgs e)

{//每次有新的用户浏览器连接到本网站时,用户数加一

Application["userCount"] = (int)Application["userCount"] + 1;

}

  protected void Application_BeginRequest(object sender, EventArgs e){

//打开任何一个页面,访问次数加一

Application["visitedTimes"] = (int)Application["visitedTimes"] + 1;

}

 

然后任一aspx.cs文件中:

Response.Write("<br />您是本站的第" + Application["userCount"] + "个访客<br />");

Response.Write("<br />本站共被访问" + Application["visitedTimes"] + "次<br />");

 

生命周期

Application的生命周期是从网站(应用程序)运行,一直到网站结束。

因此,appliction中不宜存入过多的数据,它会长期占用服务器端内存。

 

删除application

Application.Remove(“键名”);

Application.RemoveAll(); //删除全部全局变量

创建、修改application

Application[“键名”]=键值

遍历

Application遍历

类似于HashTable

for (int i = 0; i < Application.Count; i++)

{

Response.Write("键名"+Application.GetKey(i)+"键值"+Application[i]+"<br />");

}

 

Application的锁定

Application.Lock() //锁定

Application.UnLock() //解锁

 

当多人同时操作一个application时,有可能过程会被其他用户干扰,所以我们需要临时锁定了,仅允许一个用户来操作,其他用不允许操作,直到执行了UnLock()解锁之后,才允许其他用户使用。

 

小练习:

global.asax文件中定义一个application的字符串,作为全站公告。要求在每个网页加载完成之后,运行一段javascript,就是弹出alert提示框,显示这段公告。(提示:通过Application_EndRequest事件实现)。

 

Session

Session是一种在服务器端记录不同用户访问网站的不同状态的一种机制。最典型的示例就是购物车。也就是说服务器端专门创建了若干个变量用来专门存储属于你个人的信息。用户只能访问自己的session,而无法访问别人的session 。

 

session的存储方式与application类似,它们在本质上都是一个非泛型集体,存入的内容都会被自动装箱为object类型。创建之后在任何页面都可以使用。

 

语法定义

session不需要专门的声明过程,直接用一个键名赋值即可。比如:

Session["newName"] = "小强";

键名不要重复,因为重复了也不会报错。

 

取值时也是用键名读取即可:

Response.Write(Session["newName"]);

 

网页上的session在本质上HttpSessionState类的实例对象,它以只读属性的形式存在于page类中。

 

通常定义application和session的时候,最好将代码写在global.asax文件的application_start、session_start中。

 

示例,用户登录:

首先在WebForm1上添加两个文件框uName和uPwd(指定表单提交到webForm2.aspx),然后在webForm2.aspx.cs中写入:

        protected void Page_Load(object sender, EventArgs e)

        {

            //判断用户是否提交了用户和密码

            if (Request.Form["uName"] == null || Request.Form["uPwd"] == null)

            {

                if (checkSession())  //没有提交用户密码,但是session已存在

                    Response.Write("您已登陆");

                else    //没有提交用户名密码,并且session也不正确

                    Response.Write("您没有输入用户名和密码");

            }

            else {

                if (checkSession()) {   //之前已登陆过的话

                    Response.Write("您之前已登陆");

                    return; //session正确的话后面的代码不会被执行。

                }

                if (Request["uName"].ToString() == "admin" && Request["uPwd"] == "123456")

                {   //输入的用户和密码正确的情况下。

                    Session["uName"] = "admin";

                    Session["uPwd"] = "123456";

                    Response.Write("欢迎,您已成功登陆");

                }

                else {  //输入的用户密码不正确。

                    Response.Write("您输入的用户名或密码不正确");

                }

            }

        }

        //判断当前session中是否存在正确的用户名和密码

        private bool checkSession(){

            if(Session["uName"]==null || Session["uPwd"]==null)

                return false;

            if (Session["uName"].ToString() == "admin" && Session["uPwd"] == "123456")

                return true;

            else

                return false;

        }

Session的删除

session.Remove(“键名”)

删除单个session变量,通常用于退出登陆。

session.RemoveAll();

删除session中的全部数据

Abandon()

立即取消当然用户的所有session状态,这种方式对session的删除是最彻底的,包括sessionID 。

Clear()

在不改变SessionID的情况下清空所有session中的数据。

 

遍历session

   foreach (string kn in Session.Keys)

   {

       Response.Write("<br />键名:"+kn+"键值:"+Session[kn].ToString());

   }

 

Session.Count

当前session集合中有多少条session数据

session.TimeOut

表示当前session能够在服务器的内存中保留多长时间,单位是分钟,超时之后session会自动被清理。

session.SessionID

网页服务器在被每一个浏览器访问的时候,会为每个浏览器分配一个序列器SessionID, 服务器向浏览器传回消息的时候, 会将这个SessionID同时发送给浏览器,当浏览器再次访问这个网站时又会把sessionID发回给服务器,以便服务器识别到这个浏览器的“身份”,让服务器可以区分不同的用户。

 

通常这个sessionID是存放在cookie中的。

 

小练习:

创建两个aspx页面,在页面一中定义session,实现一个存储在session中的购物车,假设有两个产品,在session中创建两个元素product1和product2,这两个元素中分别存储了一个hashTable,hashTable中分配有键名如下:产品名、产品价格、产品型号、产地。

 

在页面二中显示session中所存储的购物车的内容。

 

 

Cookie

浏览器端的缓存,通常用于记录登陆信息,以及其他一些用户数据。

cookie的创建

方法一:通过Response.Cookies集合

//新建一个Cookie数据

Response.Cookies["username"].Value = "小明";

//设置cookie的过期时间为最大时间

Response.Cookies["username"].Expires = DateTime.MaxValue;

方法二:通过HttpCookie类来实例化cookie对象

//实例化cookie对象,并确定键名

HttpCookie myCookie = new HttpCookie("pwd");

//键值

myCookie.Value = "123456";

//设置过期时间为30天之后

myCookie.Expires = DateTime.Now.AddDays(30);

//将cookie对象添加到cookie集合中

Response.Cookies.Add(myCookie);

方法三:多值cookie的写法

//创建cookie实例,并确定键名

HttpCookie myCookie = new HttpCookie("user");

//对cookie赋键值

myCookie.Values["userName"] = "小强";

myCookie.Values["password"] = "654321";

myCookie.Values["phoneNum"] = "13912345678";

 

//设置cookie的过期时间

myCookie.Expires = DateTime.MaxValue;

//将cookie实例添加到cookies集合中

Response.Cookies.Add(myCookie);

删除cookie

删除单个cookie

//创建cookie实例,并确定键名

HttpCookie myCookie = new HttpCookie("username");

//设置cookie的过期时间为前一天,浏览器就会认为这个cookie已经过期而将其删除

myCookie.Expires = DateTime.Now.AddDays(-1);

//将cookie实例添加到cookies集合中覆盖原来的同名元素

Response.Cookies.Add(myCookie);

删除多值cookie中的其中一个值

//创建cookie实例,并确定键名

HttpCookie myCookie = new HttpCookie("user");

//对cookie赋键值

myCookie.Values["userName"] = "小强";

myCookie.Values["password"] = "654321";

myCookie.Values["phoneNum"] = "13912345678";

 

//删除多值中的phoneNum

myCookie.Values.Remove("phoneNum");

 

//设置cookie的过期时间

myCookie.Expires = DateTime.MaxValue;

//将cookie实例添加到cookies集合中

Response.Cookies.Add(myCookie);

遍历并删除所有cookie

//获取到当前浏览器中的cookie的总数

int cookiesCount = Request.Cookies.Count;

HttpCookie CItem;

//遍历cookies集合

for (int i = 0; i < cookiesCount; i++)

{

CItem = Request.Cookies[i];

//显示出cookie的键名

Response.Write(CItem.Name+"<br />");

//如果当前cookie是sessionID的话,不进行删除 

if (CItem.Name == "ASP.NET_SessionId") {

continue;

}

CItem.Expires = DateTime.Now.AddDays(-1);

//添加并覆盖原来cookie

Response.Cookies.Add(CItem);

 

//sessionID是服务端用来实现session机制的一个很重要的一参数,不要误删除。

修改cookie

对于单值cookie,我们只需要重新赋值并添加入cookies集合即可。

 

对于多值cookie,可以用如下方法修改:

Response.Cookies["user"]["userName"] = "小白";

Response.Cookies["user"].Expires = DateTime.Now.AddDays(1);

 

读取浏览器中的cookie

通过Request.Cookies集合,我们就可以得到浏览器针对本网站存储的所有cookie。(cookie数据是连同浏览器的请求一同发送给服务器的,执行Request.Cookies并不是去获取数据,而只是在读取已发送过来的cookie数据)

 

cookie不能跨网站读取。是以文本文件的形式存储在浏览器的缓存中的。

 

读取已知键名的cookie

//读取前先判断指定cookie是否存在

if (Request.Cookies["userName"] !=null)

{

string un = Request.Cookies["userName"].Value;

Response.Write(un);

}

遍历所有cookie

foreach (string cName in Request.Cookies.AllKeys)

{

Response.Write("<br />键名:"+cName+"键值:"+Request.Cookies[cName].Value);

}

读取多值cookie

string uname = Request.Cookies["user"]["userName"];

Response.Write(uname);

 

注意事项:

同一个网站,如果有一个顶级域名和多个二级域名的话,不同域名会被认为是不同的网站,它们的cookie默认情况下是不共享。

如果必须共享cookie的话,可以用如下格式设置:

cookie.Domain=”.主域名”;

cookie.Path=”/”;

 

小练习:

制作一个用户登录模块

1、 需要用sqlServer建立一张数据库,存入用户名和密码。

2、 制作一个登录页面,包含两个文件框用来输入用户名和密码,一个登陆按钮,以及一个复选框,复选框后有一段文字“一周之内不需要重复登陆”。

3、 当第一次登陆时,需要填写用户名和密码,只要登陆成功就将用户名和密码存储在cookie中,而且显示登陆成功。

4、 当第二次打开登陆页面时,读取cookie,并与数据库中的用户名密码相比较,如果一致的话,就自动登陆,而且显示登陆成功,否则要求用户重新输入用户名密码。

 

Server对象

Server对象提供了网页服务器上的某些功能与参数的访问, 它是HttpServerUtility类型的实例 。

MachineName

获取服务器上的计算机名称

Response.Write(Server.MachineName);

 

ScriptTimeout

获取和设置代码执行时的超时限制,以防止死循环等情况造成的服务器死机(单位:秒)

Server.ScriptTimeout = 10000;

Response.Write(Server.ScriptTimeout);

Execute(路径)

执行当前服务器上的另一个aspx页面,执行完该页后再返回本页继续执行。(必须是相对路径,也就说必须是当前服务器上的路径) 。

    <div>

<% Server.Execute("header.aspx");   %>

这是本网页的正文的内容<br />

<% Server.Execute("footer.aspx");   %>

    </div>

Transfer(路径)

执行当前服务器上的另一个aspx网页,执行完该页后不再返回本页继续执行。(必须是相对路径,也就说必须是当前服务器上的路径)

Response.Write(1);

Response.Write(2);

Server.Transfer("header.aspx");

//后面的代码不会再被执行

Response.Write(3);

Response.Write(4);

 

HtmlEncode(html代码)

如果需要在网页显示<p>之类的html标记,或者有时服务器对中文支持不好的话,就可以使用该方法。

示例:

Response.Write(Server.HtmlEncode( "<div style=‘color:red‘>意思是中断换行</div>"));

 

HtmlDecode(html代码)

HtmlEncode()编译的html代码,再编译回可以正常运行的状态,示例:

Response.Write(Server.HtmlDecode( Server.HtmlEncode( "<div style=‘color:red‘>意思是中断换行</div>")));

 

UrlEncole(字符串)

将字符串转换为任何字符集都可以正常读取的url地址,转换之后就可以在不同字符集的计算机与浏览器之上正常的使用了。

示例:

string url = "webFrom1.aspx?name=小明";

Response.Write(url + "<br />");

Response.Write(Server.UrlEncode(url) + "<br />");

UrlDecode(字符串)

将编码后的url地址还原。

示例:

string  url2 =Server.UrlEncode(url) ;

Response.Write(url2+"<br />");

Response.Write(Server.UrlDecode(url2));

MapPath(相对路径)

将服务中的某个文件的相对路径转换为,服务器的绝对物理地址。

Response.Write(Server.MapPath( "WebForm1.aspx"));

 

Page对象

每一个aspx页面,在运行时都会被编译为一个page对象。我们之前讲的ResponseRequestServer等对象都以page对象的属性的形式存在的。

 

Page对象包含aspxaspx.cs两个文件,其中aspx文件的最上面必须是@Page指令,它的CodeBehind(CodeFile)Inherits两个属性将aspx.csaspx网页相关联起来。

 

aspx.cspage中,this 就代表当前页面的page对象

 

IsPostBack属性

这个属性是指当前打开的页面,是否为通过表单提交而刷新的页面。

 

如果是通过地址栏输入页面,打开的页面IsPostBack就是false

如果是通过提交表单而导致当前页面被刷新IsPostBack就是True。(只能是以posd方式提交表单导致本页面刷新才为true

 

AppRelativeVirtualPath属性

当前页面相对于网站根目录的相对路径。

注意:

~ 波浪号在asp.net中代表网站的根目录。

 

IsVaild属性

验证控件是否全部通过

 

Title属性

获取和设置页面的<title>标题

this.Title = "雨停了";

 

ViewState

它用于记录asp.net服务器端控件的状态信息。

html代码中以隐藏域的方式出现。

 

HasControls()

当前页面是否包含服务器端控件

 

MapPath()

类似于server对象的同名方法,得到一个相对路径在服务器端上的物理文件地址。

Response.Write( this.MapPath("WebForm1.aspx") );

aspNet_2_常见的几大对象

标签:ali   views   input   mes   NPU   nstat   decode   setcookie   32位   

原文地址:https://www.cnblogs.com/yigegaozhongsheng/p/9629639.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!