ASP.NET 页面之间传递值的几种方式
使用QueryString :
优点:(1)非常简单的传值方式,可以将传送的值显示在浏览器的地址栏中
缺点:(1)不能传递数组或对象等复杂类型 (2)传送的值显示在浏览器的地址栏中(安全性不高)
适用范围:如果是传递一个或多个安全性要求不高或是结构简单的数值时
//1,使用控件创建web表单(form) //2,创建可以返回表单的按钮和链接按钮 //3,在按钮或链接按钮的单击事件里创建一个保存URL的字符变量 //4,在保存的URL里添加QueryString参数 //5,使用Response.Redirect重定向到上面保存的URL //下面的代码片断演示了如何实现这个方法: //源页面代码: private void Button1_Click (object sender, System.EventArgs e) { string url; url="anotherwebform.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text; Response.Redirect(url); } //目标页面代码: private void Page_Load (object sender, System.EventArgs e) { Label1.Text=Request.QueryString["name"]; Label2.Text=Request.QueryString["email"]; }
使用Session变量:
优点:(1)能够传递数组或对象等复杂类型
(2)很容易实现任意两个页面之间的值的传递
缺点:(1)Session变量存储过多的数据会消耗比较多的服务器资源,我们也应该使用一些清理动作来去除一些不需要的session来降低资源的无谓消耗
(2)iis中由于有进程回收机制,系统繁忙的话Session会丢失
//1,在页面里添加必要的控件 //2,创建可以返回表单的按钮和链接按钮 //3,在按钮或链接按钮的单击事件里,把控件的值添加到session变量里 //4,使用Response.Redirect方法重定向到另一个页面 //5,在另一个页面提取session的值,在确定不需要使用该session时,要显式清除它 //下面的代码片断演示了如何实现这个方法: //源页面代码: private void Button1_Click (object sender, System.EventArgs e) { //textbox1 and textbox2 are webform //controls Session["name"]=TextBox1.Text; Session["email"]=TextBox2.Text; Server.Transfer("anotherwebform.aspx"); } //目标页面代码: private void Page_Load (object sender, System.EventArgs e) { Label1.Text=Session["name"].ToString(); Label2.Text=Session["email"].ToString(); Session.Remove("name"); Session.Remove("email"); }
使用Server.Transfer :
优点(1)可以在另一个页面以对象属性的方式来存取显露的值 (2)简洁且面向对象
缺点(2)你需要额外写一些代码以创建一些属性以便可以在另一个页面访问它
//1,在页面里添加必要的控件 //2,创建返回值的Get属性过程 //3,创建可以返回表单的按钮和链接按钮 //4,在按钮单击事件处理程序中调用Server.Transfer方法转移到指定的页面 //5,在第二个页面中,我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了 //以下代码综合实现上述步骤过程的代码: //源页面代码: //把以下的代码添加到页面中 public string Name { get { return TextBox1.Text; } } public string EMail { get { return TextBox2.Text; } } private void Button1_Click (object sender, System.EventArgs e) { Server.Transfer("anotherwebform.aspx"); } //目标页面代码: private void Page_Load (object sender, System.EventArgs e) { //create instance of source web form WebForm1 wf1; //get reference to current handler instance wf1=(WebForm1)Context.Handler; Label1.Text=wf1.Name; Label2.Text=wf1.EMail; }
使用Application 对象变量
Application对象的作用范围是整个全局,也就是说对所有用户都有效。其常用的方法用Lock和UnLock。
//a.aspx的C#代码 private void Button1_Click(object sender, System.EventArgs e) { Application["name"] = Label1.Text; Server.Transfer("b.aspx"); } //b.aspx中C#代码 private void Page_Load(object sender, EventArgs e) { string name; Application.Lock(); name = Application["name"].ToString(); Application.UnLock(); }
使用Cookie对象变量
这个也是大家常使用的方法,与Session一样,其是什对每一个用户而言的,但是有个本质的区别,即Cookie是存放在客户端的,而session是存放在服务器端的。而且Cookie的使用要配合ASP.NET内置对象Request来使用。
//a.aspx的C#代码 private void Button1_Click(object sender, System.EventArgs e) { HttpCookie cookie_name = new HttpCookie("name"); cookie_name.Value = Label1.Text; Reponse.AppendCookie(cookie_name); Server.Transfer("b.aspx"); } //b.aspx中C#代码 private void Page_Load(object sender, EventArgs e) { string name; name = Request.Cookie["name"].Value.ToString(); }
参考链接:
(1)
(2)