跨页传值方法集锦
1. 使用QueryString变量
QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中。如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法。但是对于传递数组或对象的话,就不能用这个方法了。下面是一个例子:
a.ASPx的C#代码
private void Button1_Click(object sender, System.EventArgs e)
{
string s_url;
s_url = "b.aspx?name=" + Label1.Text;
Response.Redirect(s_url);
}
b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
Label2.Text = Request.QueryString["name"];
}
2. 使用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();
}
3. 使用Session变量
想必这个肯定是大家使用中最常见的用法了,其操作与Application类似,作用于用户个人,所以,过量的存储会导致服务器内存资源的耗尽。
a.aspx的C#代码
private void Button1_Click(object sender, System.EventArgs e)
{
Session["name"] = Label.Text;
}
b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
string name;
name = Session["name"].ToString();
}
4. 使用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();
}
5. 使用Server.Transfer方法
这个才可以说是面象对象开发所使用的方法,其使用Server.Transfer方法把流程从当前页面引导到另一个页面中,新的页面使用前一个页面的应答流,所以这个方法是完全面象对象的,简洁有效。
a.aspx的C#代码
public string Name
{
get{ return Label1.Text;}
}
private void Button1_Click(object sender, System.EventArgs e)
{
Server.Transfer("b.aspx");
}
b.aspx中C#代码
private void Page_Load(object sender, EventArgs e)
{
a newWeb; //实例a窗体
newWeb = (source)Context.Handler;
string name;
name = newWeb.Name;
}
6.另外一个方法就是在源表单页已经确定的情况下,使用@PreviousPageType指令。这个指令可以在目标表单页中以强类型的方式访问源表单页。这个指令指定源表单页使用VirtualPath属性还是TypeName属性。PreviousPage属性返回一个强类型的结果来对源表单页进行引用。其允许访问源目标页的公共属性。
SourcePage.aspx:
<form runat="server" >
...
<asp:textbox runat="server" id="txtFirstName"/>
<asp:textbox runat="server" id="txtLastName"/>
<asp:button runat="server" id="btnViewReport" Text="View Report" PostbackURL="~/targetpage.aspx" />
...
public string FirstName
{
get { return txtFirstName.Text; }
}
...
TargetPage.aspx
<%@ PreviousPageType VirtualPath="sourcepage.aspx" %>
string strFirstName;
strFirstName = PreviousPage.FirstName
//Strongly Typed PreviousPage allows direct access to the public properties of the source page.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
7.
source.cs
public string Name
......{
get
......{
return txtName.Text;
}
}
public string Pwd
......{
get
......{
return txtPwd.Text;
}
}
private void btnCommit_Click(object sender, System.EventArgs e)
......{
//1.使用QueryString方式传值
//QueryString是一种非常简单的传值方式,它可以将传送的值显示在浏览器的地址栏中,
//如果想要传递一个安全性不太重要或一个结构简单的数值时,用此法最容易。但如果要
//传递的信息涉及安全性或值的类型是较为复杂的array(数组)或object(对象)时,
//就不能和此方法。
//实现:
string url;
url = "distination.aspx Name=" + txtName.Text + "&Pwd=" + txtPwd.Text;
Response.Redirect(url);
//2.使用Application对象变量
//Application对象在服务器端生成一个状态变量来存储所需的信息,该Application对象
//变量的可视范围涵盖全部使用者,也就是只要正在使用这个网页程序的程序都可以存取
//这个状态变量。这就意味着它只能存储一些要公布的信息,而对于那些涉及个人及安全
//的信息就不能用它来存取。Application对象变量有2个常用的方法,Lock和UnLock方法,
//主要用于处理多个用户对存储在Application变量中的数据进行写入的问题。Lock方法锁
//定全部的Application变量,从而阻止其他用户修改Application对象的变量值,UnLock
//方法则解除对Application对象变量的锁定。
//例如聊天室的制作,也可以用Static对象变量来代替。
//实现:
Application["Name"] = txtName.Text;
Application["Pwd"] = txtPwd.Text;
Server.Transfer("distination.aspx");
//3.使用Session对象变量
//Session对象变量和Application对象变量一样,都是用来存储跨网页程序的变量或是对象。
//但与Application对象变量不同的是,Session对象变量只针对单一网页使用者,各个连接的
//机器有各自的Session对象变量,不同的客户端无法相互存取。在Session变量使用过程中,
//当用户在应用程序中从一页移动到另一页时,存储在Session对象中的变量不会被放弃,只有
//当用户关掉浏览器或超过设定Session对象变量的有效时间时,Session变量才会消失。因此,
//Session对象变量若存储过多的数据则会消耗大量的服务器资源,在使用时尤其要注意控制数量。
//当然也可以利用Session对象的方法,如获至宝Remove、Clear来及时清理,以降低资源的消耗。
//实现:
Session["Name"] = txtName.Text;
Session["Pwd"] = txtPwd.Text;
Server.Transfer("distination.aspx");
//4.使用Cookie对象变量
//Session对象变量和Application对象变量都是在服务器端产生的,与此不同,Cookie变量的数据
//是以文件形式放于客户端文件系统或客户端浏览器会话内的内存中,只含少量信息,并且可以永
//久存在或终止于所设定的时间,使用时配合ASP.NET的内置对象ResPonse和Request完成传值。另
//外,Cookie是与Web站点而不是具体页面关联的,不论用户请示浏览器站点中的哪个页面,浏览器
//和服务器都将交换Cookie信息。由于Cookie对象变量在客户端存取,不可避免地带来存取权限及
//安全性问题,对于用户而言,要慎用。
//实现:
HttpCookie Name = new HttpCookie("Name");
HttpCookie Pwd = new HttpCookie("Pwd");
Name.Value = txtName.Text;
Pwd.Value = txtPwd.Text;
Response.AppendCookie(Name);
Response.AppendCookie(Pwd);
Server.Transfer("distination.aspx");
//5.使用server.Transfer方法
//server.Transfer把执行流程从当前的aspx页面转到同一服务器的另一个aspx页面,新的aspx页面
//仍然使用前一aspx页面创建的应答流,可以通过对象属性的方式来存取信息。使用该方法进行值传
//递需要额外创建一些属性以便在另一页面访问它,这种方法是面向对象的,简洁而有效。
//实现:
//在属性申明区写上相应的属性
Server.Transfer("distination.aspx");
}
distination.cs
private void Page_Load(object sender, System.EventArgs e)
......{
if(!IsPostBack)
......{
//1.使用QueryString方式接值
if(Request.QueryString["Name"]!=null || Request.QueryString["Name"].Trim()=="")
......{
Response.Write("您的姓名为:" + Request.QueryString["Name"] + "<br>" + "您丢失的密码为:" + Request.QueryString["Pwd"]);
}
//2.使用Application对象变量
Application.Lock();
Response.Write("您的姓名为:" + Application["Name"].ToString() + "<br>" + "您丢失的密码为:" + Application["Pwd"].ToString());
Application.UnLock();
//3.使用Session对象变量
Response.Write("您的姓名为:" + Session["Name"].ToString() + "<br>" + "您丢失的密码为:" + Session["Pwd"].ToString());
Session.Remove("Name");
//或者用Clear方法
Session.Remove("Pwd");
//4.使用Cookie对象变量
Response.Write("您的姓名为:" + Request.Cookies["Name"].Value.ToString() + "<br>" + "您丢失的密码为:" + Request.Cookies["Pwd"].Value.ToString());
//5.使用server.Transfer方法
source sc;
sc = (source)Context.Handler;
//Context.Handler属性用来获得对页面实例对象的引用
Response.Write("您的姓名为:" + sc.Name + "<br>" + "您丢失的密码为:" + sc.Pwd);
}
}