http://www.cnblogs.com/lgzslf/archive/2009/05/21/1486362.html
方法一:问号传值(Response.Redirect方法)
1:源页:在按钮的点击事件程序中写入Response.Redirect方法,在其中使用问号传值。如:
Response.Redirect("Default2.aspx?id="+txtId.Text.Trim()+"&name="+Server.UrlEncode(txtName.Text.Trim()));
HTML代码中可以这样写:
<a href="Default2.aspx?id=1&name=aa">跳转</a> //多个值用&相连,注意&两边不要加空格
2:目标页:在Request.QueryString集合中查找。
如:Response.Write("ID is "+Request.QueryString["id"].ToString());
或者:<% =Request.QueryString["id"] %>
特点:简单方便,可以跨WEB服务器,但效率低。当Web服务器接到一个重定向请求后,它会将一个响应头送给客户端,这将导致客户端发送一个新的请求到服务器。按句话说,一个重定向请求实际上是两个请求响应。如果想要传递一个安全性不太重要或一个结构简单的数值时,用此法最容易。
方法二:使用Server.Transfer
1:源页:在按钮的点击事件程序中写入: Server.Transfer("Default2.aspx", true); 注意一定要加上第二个参数true,否则值传不过去。
2: 目标页:在Request.Form集合中查找发送方页面上的文本框架ID,如
Response.Write("传过来的名字是:"+Request.Form["txtName"].ToString());
特点:跳转的范围仅限于同一个Web服务器的不同网页,且在地址栏中显示的仍是原网页的地址,不便于调试,但属于服务器端的直接重定向,效率比Response.Redirect方法高。
Response.Redirect和Server.Transfer的比较:
由于Response.Redirect方法要进行两次请求响应操作,因此,我们应该在对性能要求高的网站尽量避免使用这种方法。然而,只从技术上说,使用redirect方式确实可以从一个网页跳到另一个网页。相比之下,Server.Transfer会更有效率,但是。从本质上说,我们可以使用 Server.Transfer来消除不必要的请求响应操作。如果我们需要重定位到不同服务器的网页,就需要使用Response.Redirect方法。
方法三:使用PostBackUrl
从ASP.NET2.0开始,可以使用PostBackUrl实现跨页传值。
1:源页:在实现了IbuttonControl接口的控件(如按钮、LinkButton等)上,添加属性PostBackUrl="~/Default2.aspx"
2: 目标页:使用PreviousPage属性,且最好判断一下是否是从发送页以PostBackUrl方式跳转过来的,代码如下所示:
if(PreviousPage!=null && PreviousPage.IsCrossPagePostBack &&
PreviousPage.IsValid)
{
TextBox txt = (TextBox)PreviousPage.FindControl("txtName");
Response.Write(txt.Text);
}
若要获取源页的公共成员(例如某个属性的值),必须先获取对源页的强类型引用。例如:
源页中有如下属性:public String CurrentCity{ get { return textCity.Text; }}
目标页:<%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %>
Label1.Text = PreviousPage.CurrentCity;
特点:底层通过javascript函数和保存视图状态的__POSTBACK的隐藏字段实现。具体效率应该较高。
方法四:使用Application对象变量
1:源页: 保存信息,建议同时使用Lock和UnLock方法。
Application.Lock();
Application["PageRequestCount"] =
((int)Application["PageRequestCount"])+1;
Application.UnLock();
2:目标页:int cnt=int.Parse(Application["PageRequestCount"].ToString());
特点:全局变量,所有用户可见,常用在聊天室程序中。
方法五:使用Session
1:源页:保存信息
Session["Name"]= txtName.Text;
2:目标页 string name=Session["Name"].ToString();
Session对象变量若存储过多的数据则会消耗大量的服务器资源,在使用时尤其要注意控制数量。
方法六:使用Cookie
1:源页: HttpCookie Name= new HttpCookie("Name");
Name.Value= txtName.Text;
cookie.Expires = DateTime.Now.AddMinutes(30);
HttpContext.Current.Response.AppendCookie(Name);
2:目标页:string info =Request.Cookies["cookiename"].Value;
或者:
HttpCookie acookie=Request.Cookie("cookiename");//通过Request获取acookie对象
string aa=acookie.Value.ToString();//在通过Value属性获取值基本上和Response用法相似。在获取cookie之前,应确保该cookie确实存在。否则,您将得到一个system.NullReferenceException
注:后面三种方法用的是三大对象,各自的特点请参考其他资料。