一、QueryString
QueryString是一种异常简朴的传值体式格局,他可以将传送的值显现在浏览器的地点栏中。假如是通报一个或多个平安性要求不高或是组织简朴的数值时,可以运用这个要领。然则关于通报数组或对象的话,就不能用这个要领了。
这类要领的长处:1.运用简朴,关于平安性要求不高时通报数字或是文本值异常有用。
这类要领的瑕玷:1.缺少平安性,因为它的值暴露在浏览器的URL地点中的。
2.不能通报对象。
运用要领:1.在源页面的代码顶用须要通报的称号和值组织URL地点。
2.在源页面的代码用Response.Redirect(URL);重定向到上面的URL地点中。
3.在目标页面的代码运用Request.QueryString["name"];掏出URL地点中通报的值。
例子:(1)a.aspx
private void Button1_Click(object sender, System.EventArgs e) { string s_url; s_url = "b.aspx?name=" + Label1.Text; Response.Redirect(s_url); }
(2)b.aspx
private void Page_Load(object sender, EventArgs e) { Label2.Text = Request.QueryString["name"]; }
二、Session
想必这个肯定是人人运用中最罕见的用法了,其操纵与Application相似,作用于用户个人,所以,过量的存储会致使服务器内存资本的耗尽。
长处:1.运用简朴,不仅能通报简朴数据类型,还能通报对象。
2.数据量大小是不限定的。
瑕玷:1.在Session变量存储大批的数据会斲丧较多的服务器资本。
2.轻易丧失。
运用要领:1.在源页面的代码中建立你须要通报的称号和值组织Session变量:Session["Name"]="Value(Or Object)";
2.在目标页面的代码运用Session变量掏出通报的值。Result = Session["Nmae"]
注重:session不用时可以烧毁它,烧毁的要领是:消灭一个:Session.Remove("session名");
消灭一切:Session.Clear();
例子:(1)a.aspx
private void Button1_Click(object sender, System.EventArgs e) { Session["name"] = Label.Text; }
(2)b.aspx
private void Page_Load(object sender, EventArgs e) { string name; name = Session["name"].ToString(); }
三、Cookie
这个也是人人常运用的要领,Cookie用于在用户浏览器上存储小块的信息,保留用户的相干信息,比方用户接见某网站时用户的ID,用户的偏好等,用户下次接见就可以经由过程检索取得之前的信息。所以Cookie也可以在页面间通报值。Cookie经由过程HTTP头在浏览器和服务器之间往返通报的。Cookie只能包括字符串的值,假如想在Cookie存储整数值,那末须要先转换为字符串的情势。
与Session一样,其是什对每个用户而言的,然则有个实质的区分,即Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的运用要合营ASP.NET内置对象Request来运用。
长处:1.运用简朴,是坚持用户状况的一种异经常常运用的要领。比方在购物网站顶用户跨多个页面表单时可以用它来坚持用户状况。
瑕玷:1.经常被人以为用来网络用户隐私而遭到指摘。
2.平安性不高,轻易捏造。
运用要领:1.在源页面的代码中建立你须要通报的称号和值组织Cookie对象:
HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!"); Response.Cookies.Add(cookie);
2.在目标页面的代码运用Cookie对象掏出通报的值:Result = Request.Cookies[ "myCookie" ].Value;
例子:(1)a.aspx
private void Button1_Click(object sender, System.EventArgs e) { HttpCookie objCookie = new HttpCookie("myCookie","Hello,Cookie!"); Response.Cookies.Add(objCookie); }
(2)b.aspx
string myName1Value; myName1Value = Request.Cookies[ "myCookie" ].Value;
四、Application
Application对象的作用局限是全部全局,也就是说对一切用户都有用。它在全部应用程序生命周期中都是有用的,相似于运用全局变量一样,所以可以在差别页面中对它举行存取。它和Session变量的区分在于,前者是一切的用户共用的全局变量,后者是各个用户独占的全局变量。
可以有人会问,既然一切用户都可以运用application变量,那他可以用在什么场所呢?这里举个例子:网站接见数。多个要求接见时都可以对它举行操纵。
长处:1.运用简朴,斲丧较少的服务器资本。
2.不仅能通报简朴数据,还能通报对象。
3.数据量大小是不限定的。
瑕玷:1.作为全局变量轻易被误操纵。所以单个用户运用的变量平常不能用application。
运用要领:1.在源页面的代码中建立你须要通报的称号和值组织Application变量:Application["Nmae"]="Value(Or Object)";
2.在目标页面的代码运用Application变量掏出通报的值。Result = Application["Nmae"]
注重:经常运用lock和unlock要领用来锁定和解锁,为了防备并发修正。
例子:(1)a.aspx
private void Button1_Click(object sender, System.EventArgs e) { Application["name"] = Label1.Text; }
(2)b.aspx
private void Page_Load(object sender, EventArgs e) { string name; Application.Lock(); name = Application["name"].ToString(); Application.UnLock(); }
五、Server.Transfer
这个才可以说是面象对象开辟所运用的要领,其运用Server.Transfer要领把流程从当前页面指导到另一个页面中,新的页面运用前一个页面的应对流,所以这个要领是完周全象对象的,简约有用。
Server.Transfer是从当前的ASPX页面转到新的ASPX页面,服务器端实行新页并输出,在新页面中经由过程Context.Handler来取得前一个页面通报的种种数据类型的值、表单数据、QueryString.因为重定向完整在服务器端完成,所以客户端浏览器中的URL地点是不会转变的。挪用Server.Transfer时,当前的ASPX页面停止实行,实行流程转入另一个ASPX页面,但新的ASPX页面仍运用前一ASPX页面建立的应对流。
ps:比较Server.Transfer和Response.Redirect的区分。
(1)Server.Transfer在服务器端完成,所以客户端浏览器中的URL地点是不会转变的;Response.Redirect是客户端完成,向服务器端提出新的页面处置惩罚要求,所以客户端浏览器中的URL地点是会转变的。
(2)Server.Transfer在服务器端完成,不须要客户端提出要求,减少了客户端对服务器端提出要求。[2]
(3)Server.Transfer只可以转跳到当地虚拟目录指定的页面,也就是工程项目中的页面,而Response.Redirect则非常天真,可以跳转到任何URL地点。
(4)Server.Transfer可以将前一个页面的种种类型的值传到新的页面;Response.Redirect则只能借助URL中带参数或是连系上面四种方法把种种类型的值传到新的页面。
长处:1.直接在服务器端重定向,运用简朴轻易,减少了客户端对服务器端提出要求。
2.可以通报种种数据类型的值和控件的值。
瑕玷:1.客户端浏览器中的URL地点是不转变,会致使在新的页面可以涌现一些意想不到的题目。比方假如源页面和目标页面不在同一个虚拟目录或其子目录下,那末运用相对路径的图片、超链接都邑致使毛病的指向。
运用要领:1.在源页面的代码中,运用Page类的Server.Transfer跳到另一个页面通报页面数据:Server.Transfer("b.aspx","false")。
2.在目标页面中,运用Context.Handler来吸收数据:FormerPage formerPage = (FormerPage)Context.Handler; 然后用formerPage的属性和要领来猎取前一个页面的值,或许直接用Context.Items["myParameter "]
例子:(1)a.aspx
public string Name { get{ return Label1.Text;} } private void Button1_Click(object sender, System.EventArgs e) { Server.Transfer("b.aspx"); }
(2)b.aspx
private void Page_Load(object sender, EventArgs e) { a newWeb; //实例a窗体 newWeb = (source)Context.Handler; string name; name = newWeb.Name; }
以上就是ASP.NET经常运用的几种页面间传值的要领,我平常运用session和querystring来传值,少数状况会运用到cookie。本篇文章仅仅是引见这几种要领的运用要领,内部道理没有过量的诠释,关于session的存储体式格局请拜见:session的存储体式格局和配置文件